mybatis+spring 中自动实现mapper接口调用存储过程
来源:互联网 发布:知乎恐怖手机游戏 编辑:程序博客网 时间:2024/05/01 01:15
public interface SeqMapper {public Map<String,Integer> getTopicSeq(Map<String,Integer> map);}
public interface SeqMapper {public Map<String,Integer> getTopicSeq();}
mybatis+spring+springmvc越来越受到企业开发者青睐。最近对mybatis+spring进行了一些初步的学习。我们知道在spring配置文件里面配置好org.mybatis.spring.mapper.MapperScannerConfigurer即可采用自动扫描的方式让系统找到我们写好的mapper接口,并由系统将其实现。这一点确实是比较方便的,省去了我们很多时间。但是今天在使用mybatis调用数据库存储过程遇到了问题,因为之前没有在xml的配置文件里面使用过存储过程,所有悲剧就发生了。先看看异常:
There is no getter for property named 'seq01' in 'class java.lang.Class'.
下面是xml配置文件
<parameterMap type="com.tot.entity.MysqlSeq" id="seqMap"><parameter property="seq01" jdbcType="INTEGER" mode="OUT"/></parameterMap>
<select id="getTopicSeq" parameterMap="seqMap" statementType="CALLABLE" >{call get_topic_seq(?)};</select>
java代码:接口:
public interface SeqMapper {public Map<String,Integer> getTopicSeq();}java代码:测试:
public static void main(String[] args) {String conf = "applicationContext.xml";ApplicationContext ac = new ClassPathXmlApplicationContext(conf);//查数据SeqMapper sq = ac.getBean("seqMapper", SeqMapper.class);//获取bean,系统帮我们将接口实现,并创建好了这个bean,实现接口归功于mybatisMap sqMap = sq.getTopicSeq();System.out.pringln(sqMap);}
一下是问题发生的经过:
为什么写这段代码呢?我的想法是调用存储过程和调用一般的语句肯定是一样的,就按照之前的流程写了这段代码。结果就悲剧的发生了上述异常,上网查了很久也没有找到问题的所在。于是我开始了苦逼的调试过程,我一遍又一遍的该我的配置文件,将parameterMap都改坏了都没有结果,而且更为气人的是,无论我怎么改paramerterMap中的type报的结果 都一样,我在想mybaits为什么会去找java.lang.Class中的方法呢?我下载了mybaits的源代码看了一下,大概的知道了是因为mybaits框架中的中的Reflector.java类中 的type属性没有设置正确,也就是没有获取到xml文件中的值,type自动默认为java.lang.Class.由于Class类里面没有xml的parameterMap中声明的属性,因此报错。于是我就想考虑到了是不是接口没有传参的问题,因为我存储过程中是通过参数将值传入或者传入的,也就是我们声明的in,out,inout3中类型。于是我将接口添加上参数,经过测试,问题终于解决了。现在想起来主要是对数据库的存储过程理解不够深入。
总结上面的问题:
主要是因为写的mapper接口方法中没有传参数,而调用存储过程有必须要参数,无论我们声明的是in,out,还是inout。
下面是正确的代码:
xml代码:
<parameterMap type="map" id="seqMap"><parameter property="seq01" jdbcType="INTEGER" mode="OUT"/></parameterMap><select id="getTopicSeq" parameterMap="seqMap" statementType="CALLABLE" >{call get_topic_seq(?)};</select>java代码:Mapper接口
public interface SeqMapper {public Map<String,Integer> getTopicSeq(Map<String,Integer> map);}
java代码:测试
public static void main(String[] args) {String conf = "applicationContext.xml";ApplicationContext ac = new ClassPathXmlApplicationContext(conf);//查数据SeqMapper sq = ac.getBean("seqMapper", SeqMapper.class);Map map = new HashMap();Map sqMap = sq.getTopicSeq(map);System.out.println(map);}
控制台有结果了哈哈啊哈。
附:
存储过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_topic_seq`( out topic_seq int)BEGINselect seq into topic_seq from topic_seq;update topic_seq set seq = last_insert_id(seq+1);ENDspring配置文件:
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.tot.service"></property><property name="annotationClass" value="com.tot.annotation.MyBatisDao"></property><!-- 自动绑定sqlsession --></bean>
<bean id="sqlsessionfactorybean" class="org.mybatis.spring.SqlSessionFactoryBean"><span style="white-space:pre"></span><property name="dataSource" ref="mydataSource"></property><span style="white-space:pre"></span><property name="mapperLocations" value="classpath:com/tot/entity/*.xml"></property><span style="white-space:pre"></span></bean>mydatasource就不贴了,涉及密码了。
0 0
- mybatis+spring 中自动实现mapper接口调用存储过程
- 【Mybatis源码剖析】Spring中获取 Mybatis Mapper接口(注解Autowired),并调用过程剖析
- mybatis-自动生成mapper接口实现类
- spring mybatis 调用存储过程
- MyBatis 中调用存储过程
- MyBatis Mapper接口实现原理
- MyBatis 中调用存储过程的方式
- mybatis中存储过程的调用
- 在 MyBatis 中调用Oracle存储过程
- MyBatis中调用存储过程和函数
- spring mybatis mapper接口注解方式注入
- spring mybatis mapper接口注解方式注入
- spring mybatis mapper接口注解方式注入
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- MTK6577+Android log端口设置
- linux启动过程,及开机启动项的配置
- Eclipse中设置自己的注释模板 .
- 九度_题目1361:翻转单词顺序
- Ubuntu下安装Jenkins
- mybatis+spring 中自动实现mapper接口调用存储过程
- 又是字符集乱码问题
- Microsoft100——005.合并两个已经排序好的链表
- MTK6577+Android GPIO
- Android自定义对话框
- 10. 命名空间和程序集
- android弹出对话框
- Android Adapter
- 用IT技术玩金融系列文章