1、首先我们需要引入mybatis-spring.jar包
它具有一个MapperFactoryBean组件,封装了根据mapper映射器接口生成实现组件的功能,并且会将生成的实现组件放入spring容器中,供spring容器管理
在之前我们要生成这样的组件,需要:session.getMapper(接口名.class)
现在我们只需要在applicationContext.xml中声明一个bean,即可获得一个UserDao的实现组件:
<!-- 可以根据指定的mapper接口生成实现组件 --> <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- 指定sqlSession资源 --> <property name="sqlSessionFactory" ref="ssf"></property> <!-- 指定映射器接口 --> <property name="mapperInterface" value="com.zlc.dao.UserDao"></property> </bean> <!-- SqlSessionFactoryBean封装了创建SqlSessionFactory组件的过程 --> <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入dataSource --> <property name="dataSource" ref="dataSource"></property> <!-- 注入Mapper.xml文件位置信息 --> <!-- 这样配置就会扫描com/zlc/mapper/下的所有xml文件 --> <property name="mapperLocations" value="classpath:com/zlc/mapper/*.xml"></property> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="#{dbParams.user}"></property> <property name="password" value="#{dbParams.password}"></property> <property name="driverClass" value="#{dbParams.driverClass}"></property> <property name="jdbcUrl" value="#{dbParams.jdbcUrl}"></property> </bean> <util:properties location="classpath:db.properties" id="dbParams"> </util:properties>
经过这样配置后,我们可以省去mybatis-config.xml文件。
写个测试类:
public static void main(String[] args){ String conf = "applicationContext.xml"; ApplicationContext ac = new ClassPathXmlApplicationContext(conf); UserDao userDao = ac.getBean("userDao",UserDao.class); User u = userDao.findByName("zhangsan"); System.out.println(u.getUser_name()); }
总结:
(1)配置一个MapperFactoryBean,需要注入SqlSessionFactory,需要注入mapperInterface的全限定接口名
(2)配置一个SqlSessionFactoryBean,需要注入DataSource,需要注入MapperLocations(Mapper.xml)的位置,可以使用通配符
(3)配置一个dataSource,需要注入数据库连接的相关参数
2、利用MapperScannerConfigurer批量生成Mapper映射器实现组件,相当于写了多个MapperFactoryBean,封装了批量生成Mapper组件的功能
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="ssf"></property> <!-- 扫描com.zlc.dao下所有接口,批量生成实现实例,并交于spring管理 ,实例名默认为接口名首字母小写--> <property name="basePackage" value="com.zlc.dao"></property> </bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="ssf"></property> <!-- 扫描com.zlc.dao下所有接口,批量生成实现实例,并交于spring管理 --> <property name="basePackage" value="com.zlc.dao"></property> <!-- 追加这个属性后,dao接口还得带这个注解才能被生成实现实例 --> <property name="annotationClass" value="com.zlc.annotation.MyBatisDao"></property> </bean>
这个注解是一个自定义注解:
public @interface MyBatisDao { }