1、整合方式共有四种,这里总结了三种。
2、通用配置
2.1、依赖包:
在导依赖包时,不能导入
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>5.0.3</version>
</dependency>
此包,否则会报方法找不到的异常,其实是jar包中的类冲突。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lin</groupId>
<artifactId>spring-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- spring -->
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-jdbc</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-core</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-context</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-beans</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-tx</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-expression</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<artifactId>org.springframework</artifactId>
<groupId>spring-aop</groupId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aopalliance</groupId>
<artifactId>com.springsource.org.aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.12</version>
</dependency>
<!-- mybatis-spring桥接 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.6</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<!-- c3p0连接池 -->
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.15</version>
</dependency>
<dependency>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
2.2、spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 开启spring注解扫描 -->
<context:component-scan base-package="service"></context:component-scan>
<!-- 配置数据源,使用c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://192.168.20.40:3306/swan?characterEncoding=utf-8"></property>
<property name="user" value="devswan"></property>
<property name="password" value="DEVswan123!"></property>
</bean>
</beans>
2.3、Service接口
package service;
public interface ILinBookService {
LinBook getLinBook();
void addBook(LinBook linBook);
}
2.4、实体类
package bean;
public class LinBook {
private int bookId;
private String bookName;
private int bookNum;
private String bookCategory;
}
2.4、测试类
public class JTest {
ILinBookService bean =null;
@Before
public void fun() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-mybatis.xml");
bean = (ILinBookService) applicationContext.getBean("ILinBookService");
}
@Test
public void fun1() {
LinBook linBook2 = bean.getLinBook();
System.out.println(linBook2);
}
}
3、第一种:使用org.mybatis.spring.mapper.MapperScannerConfigurer
3.1、创建sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="dao/ILinBook.xml"></property>
</bean>
3.2、sqlSession
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
3.3、ILinBook.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.ILinBook">
<select id="getBookById" parameterType="Integer" resultType="bean.LinBook" statementType="PREPARED">
select * from linbook where bookid=#{v}
</select>
<insert id="addLinBook" parameterType="bean.LinBook">
insert into linbook values(#{bookId},#{bookName},#{bookNum},#{bookCategory})
</insert>
</mapper>
3.4、Service类
package service;
@Component("ILinBookService")
public class LinBookService implements ILinBookService {
// MapperScannerConfigurer
@Resource
private ILinBook ilinbook;
public LinBook getLinBook() {
return ilinbook.getBookById(1);
}
public void addBook(LinBook linBook) {
ilinbook.addLinBook(linBook);
}
}
3.5、Dao层接口
package dao;
@MapperScan
public interface ILinBook {
LinBook getBookById(int bookId);
void addLinBook(LinBook linBook);
}
4、第二种:采用org.mybatis.spring.mapper.MapperFactoryBean
4.1、创建sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
4.2、sqlSession
<bean id="ILinBook" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="dao.ILinBook" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
4.3、Service类
package service;
@Component("ILinBookService")
public class LinBookService implements ILinBookService {
// MapperFactoryBean
@Resource
private ILinBook ilinbook;
public LinBook getLinBook() {
return ilinbook.getBookById(1);
}
// @Transactional(rollbackFor=Throwable.class)
public void addBook(LinBook linBook) {
ilinbook.addLinBook(linBook);
}
}
4.4、Dao层接口
package dao;
@MapperScan
public interface ILinBook {
// 注解用于第二种,不需要xml文件
@Select("select * from linbook where bookid=#{v}")
LinBook getBookById(@Param("v") int bookId);
void addLinBook(LinBook linBook);
}
5、第三种:采用org.mybatis.spring.SqlSessionTemplate
5.1、创建sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="dao/ILinBook.xml"></property>
</bean>
5.2、sqlSession
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
5.3、ILinBook.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.ILinBook">
<select id="getBookById" parameterType="Integer" resultType="bean.LinBook" statementType="PREPARED">
select * from linbook where bookid=#{v}
</select>
<insert id="addLinBook" parameterType="bean.LinBook">
insert into linbook values(#{bookId},#{bookName},#{bookNum},#{bookCategory})
</insert>
</mapper>
5.4、Service类
package service;
@Component("ILinBookService")
public class LinBookService implements ILinBookService {
// SqlSessionTemplate
@Resource
private SqlSessionTemplate sqlSessionTemplate;
public LinBook getLinBook() {
//以下二选一
return sqlSessionTemplate.getMapper(ILinBook.class).getBookById(1);
return sqlSessionTemplate.selectOne("dao.ILinBook.getBookById", 1);
}
// @Transactional(rollbackFor=Throwable.class)
public void addBook(LinBook linBook) {
ilinbook.addLinBook(linBook);
}
}
5.5、Dao层接口
package dao;
@MapperScan
public interface ILinBook {
LinBook getBookById(int bookId);
void addLinBook(LinBook linBook);
}
6、总结
三种方式采用不同的spring提供的工厂,生成sqlSession,使得集成后的spring和mybatis中,mybatis又将一些东西交由spring管理。
6.1、事务
6.1.1、spring-mybatis.xml
加入
<!-- 配置事务控制器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
6.1.2、不使用注解时
<!-- 不使用注解,aop控制事务 -->
<tx:advice id="iccardTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- read-only:只读事务,事务中没有对数据库修改,mysql会进行优化 -->
<!-- propagetion:事务传播, -->
<tx:method name="add*" rollback-for="java.lang.Exception" read-only="false" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!-- 把事务控制在service层 -->
<aop:config>
<aop:pointcut id="iccardTerm" expression="execution(public * service.*.*(..))" />
<aop:advisor pointcut-ref="iccardTerm" advice-ref="iccardTxAdvice" />
</aop:config>
6.1.3、使用注解时
<!-- 使用注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
需要在service中的方法上加入注解,如:
rollbackFor是回滚情况
@Transactional(rollbackFor=Throwable.class)
public void addBook(LinBook linBook) {
ilinbook.addLinBook(linBook);
}
来源:oschina
链接:https://my.oschina.net/linqiankun/blog/3192340