需要的jar
除了普通spring项目需要的jar、mybatis需要的jar;还需要一个mybatis-spring.jar
在applicationContext.xml中配置数据库信息
mybatis操作数据库,对应于数据访问层。spring整合mybatis就是将dao层用mybatis处理。以往的mybatis项目中中通过mybatis的config.xml文件加载数据库信息获得SQLSessionFactory对象。现在通过spring整合mybatis就需要将其加入到spring容器中。所以我们可以将数据库配置信息加入到spring应用上下文配置文件中
<!-- 加载db.properties文件 -->
<bean id="dbProperties" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:db.properties</value>
</array>
</property>
</bean>
<!-- 配置数据库信息 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
将SQLSessionFactory添加到spring容器中
在mybatis中通过加载config.xml文件获得SQLSessionFactory对象,进而获得session对象,最后通过session获得mapper对象。SQLSessionFactory作为mybatis的核心,需要将其加入到spring容器中。
方法是使用SqlSessionFactoryBean。若在config.xml中配置了mapper映射则可以通过配置configLocation属性加载,否则则需要通过mapperLocations指定mapper文件的位置。
<!-- 在spring IOC容器中创建Mybatis的核心类 SQLSessionFactory SqlSessionFactoryBean在mybatis-spring.jar中-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 加载mybatis配置文件
<property name="configLocation" value="classpath:conf.xml"></property>
-->
<property name="mapperLocations" value="com/yang/mapper/*.xml"></property>
</bean>
将mapper添加到容器中,并将其注入到service对象中
生成mapper的方式有多种,可以通过让dao的实现类继承SqlSessionDaoSupport实现然后将dao的实现类加入spring容器中,需要注意的是,dao需要SQLSessionFactory,需要将其注入到dao实现类中<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
属性sqlSessionFactory就继承自父类SqlSessionDaoSupport
还可以通过MapperFactoryBean实现。使用MapperFactoryBean时和mybatis最为相似,可以省略dao的实现类。
<bean id="personMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 指定接口和sqlSessionFactory -->
<property name="mapperInterface" value="com.yang.mapper.PersonMapper"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="personService" class="com.yang.service.impl.PersonServiceImpl">
<property name="personMapper" ref="personMapper"></property>
</bean>
也可以通过MapperScannerConfigurer批量的将mapper加入到容器中,但是要遵循约定:id值为首字母小写的接口名
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!-- value可指定多个包 -->
<property name="basePackage" value="com.yang.mapper"></property>
</bean>
测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
PersonServiceImpl personService = context.getBean(PersonServiceImpl.class);
Person person = new Person(1,"罗志祥",40,"male");
boolean result = personService.addPerson(person);
System.out.println(result);
}