基于MapperFactoryBean的整合
MapperFactoryBean是Mybatis-spring团队提供的一个用于根据Mapper接口生成Mapper对象的类,该类在Spring配置文件中使用时可以配置如下参数:
MapperInterface:用于指定接口
SqlSessionFactory:用于指定sqlsessionFactory
SqlSessionFactory:用于指定sqlSessionTemplate,如果与sqlsessionFactory连用,那么只会启动sqlsessionFactory
实例代码:
CustomerMapper接口代码:
package com.bdqn.cn.dao;
import com.bdqn.cn.pojo.Customer;
public interface CustomerMapper {
// 通过id查询用户
public Customer findCustomerById(Integer id);
}
CustomerMapper.xml配置文件代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.bdqn.cn.dao.CustomerMapper">
<select id="findCustomerById" parameterType="Integer" resultType="customer">
select * from Customer where id=#{id}
</select>
</mapper>
applicationContext.xml配置文件:
<!-- 引入外部数据源配置文件 -->
<context:property-placeholder location="db.properties" />
<!-- 1、配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--
数据库驱动
${driver}: ${}表示EL表达式 作用:直接获取数据
-->
<property name="driverClassName" value="${driver}" />
<!-- 链接数据库的url -->
<property name="url" value="${url}" />
<!-- 链接数据库的用户名 -->
<property name="username" value="${username}" />
<!-- 链接数据库的密码 -->
<property name="password" value="${password}" />
</bean>
<!-- 配置事务管理器,依赖于数据源 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置mybatis工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定核心配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!-- Mapper代理开发 -->
<bean id="customerMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.bdqn.cn.dao.CustomerMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
Mybatis配置文件代码:
<configuration>
<!--类型别名 -->
<typeAliases>
<package name="com.bdqn.cn.pojo" />
</typeAliases>
<mappers>
<mapper resource="com/bdqn/cn/dao/CustomerMapper.xml" />
</mappers>
</configuration>
测试类代码:
@Test
public void method(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerMapper cd = (CustomerMapper) app.getBean(CustomerMapper.class);
Customer findCustomerById = cd.findCustomerById(1);
System.out.println(findCustomerById);
}
基于MapperScannerConfigurer的整合
CustomerMapper接口:
package com.bdqn.cn.dao;
import com.bdqn.cn.pojo.Customer;
public interface CustomerMapper {
// 通过id查询用户
public Customer findCustomerById(Integer id);
// 添加用户
public void addCustomer(Customer customer);
}
CustomerMapper.xml文件代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.bdqn.cn.dao.CustomerMapper">
<select id="findCustomerById" parameterType="Integer" resultType="customer">
select * from Customer where id=#{id}
</select>
<insert id="addCustomer" parameterType="customer">
insert into Customer(username,jobs,phone) values(#{username},#{jobs},#{phone})
</insert>
</mapper>
CustomerServiceImpl实现类代码:
package com.bdqn.cn.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.bdqn.cn.dao.CustomerMapper;
import com.bdqn.cn.pojo.Customer;
@Service
@Transactional
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerMapper customerMapper;
@Override
public void addCustomer(Customer customer) {
// TODO Auto-generated method stub
this.customerMapper.addCustomer(customer);
// int i = 1/0;
}
}
applicationContext.xml代码:
<!-- 引入外部数据源配置文件 -->
<context:property-placeholder location="db.properties" />
<!-- 1、配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--
数据库驱动
${driver}: ${}表示EL表达式 作用:直接获取数据
-->
<property name="driverClassName" value="${driver}" />
<!-- 链接数据库的url -->
<property name="url" value="${url}" />
<!-- 链接数据库的用户名 -->
<property name="username" value="${username}" />
<!-- 链接数据库的密码 -->
<property name="password" value="${password}" />
</bean>
<!-- 配置事务管理器,依赖于数据源 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置mybatis工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定核心配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<!-- Mapper代理开发(基于MapperScannerConfigurer) -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bdqn.cn.dao" />
</bean>
<context:component-scan base-package="com.bdqn.cn.service" />
测试类:
@Test
public void method(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService cd = (CustomerService) app.getBean(CustomerService.class);
Customer customer = new Customer();
customer.setUsername("马超2");
customer.setJobs("运维");
customer.setPhone("1234567890");
cd.addCustomer(customer);
System.out.println("增加成功!");
}