Spring+Mybatis整合笔记-通过映射器进行整合

Author Avatar
yizhiyan 1月 18, 2019

问题

手动编写映射器实现存在的问题:
    1.SqlSession.selectList()等方法需要采用字符串来指定映射项

    2.SqlSession.getMapper()方法需要在每次调用时都实现一次映射器接口

能不能在ioc容器中始终存在一个映射器接口的实现呢?

解决方案

配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 使用dbcp数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://mysql.1zyan.cc:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8" /> <property name="username" value="yizhiyan" /> <property name="password" value="464312406" /> </bean> <!-- 配置数据库操作 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引用数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 将mybatis配置文件引入 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- dao --> <bean id="userMapperImpl" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="cn.smbms.dao.UserMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean></beans>

测试方法:

 @Test public void ts1(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml"); UserMapper um=(UserMapper)ctx.getBean("userMapperImpl"); List<User> userList=um.getUserListByName("李"); for (User user : userList) { System.out.println(user.getId()+"."+user.getUserName()); } }

这样就不需要UserMapperImpl这个类了。博主在这里踩了个坑,那就是死坑那个UserMapperImpl。在上一篇文章中可以看到博主是使用UserMapperImpl来获取实例的,在我改了时候没注意把测试方法getBean的类型强制设置为UserMapperImpl然后把bean节点里面的mapperinterface也强制设置成立UserMapperImpl导致报错。所以注意了在使用映射器的时候就没有中间的UserMapperImpl了直接写dao的接口就可以了。一定注意!!!

那好问题又来了,如果有多个dao呢?这样写岂不是要写很多个MapperFactoryBean?

经过修改后的配置文件如下

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 使用dbcp数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://mysql.1zyan.cc:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8" /> <property name="username" value="yizhiyan" /> <property name="password" value="464312406" /> </bean> <!-- 配置数据库操作 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引用数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 将mybatis配置文件引入 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- 通过dao批量映射 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 会自动创建一个MapperFactoryBean节点 id就是接口名首字母小写,如UserMapper接口的id就是userMapper --> <property name="basePackage" value="cn.smbms.dao" /> </bean></beans>

发表评论

电子邮件地址不会被公开。 必填项已用*标注