微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

spring与mybatis三种整合方法

未分类 aide_941 26℃

spring与mybatis三种整合方法

https://www.cnblogs.com/wangmingshun/p/5674633.html

1、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
spring-mybatis.xml:

复制代码





<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${initialSize}" />
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${maxActive}" />
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${maxIdle}" />
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${minIdle}" />
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${maxWait}" />
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 自动扫描mapping.xml文件,**表示迭代查找 -->
    <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
</bean>

<!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.hua.saf.*" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>    


复制代码
UserMapper.xml:

复制代码



  
  
  
复制代码
dao类:

复制代码
/**
* 这里的@MapperScan就是上面所讲的Mapper扫描器中所需要的配置,会自动生成代理对象。
* 注意,接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样,因为生成的
* 动态代理,会根据这个匹配相应的Sql语句执行。另外就是方法的参数和返回值也需要注
* 意。接口中的方法如何定义,对应的MyBatis映射文件就应该进行相应的定义。
* 最后,标注中的userDao是用来作为Spring的Bean的id(或name)进行使用的,方便我
* 们在Service层进行注入使用。
*/

@MapperScan
public interface UserDao {
  //此处的方法名必须和mapper中的映射文件中的id同名
  //回去映射文件中通过com.hua.saf.dao.UserDao.getUser,即this.getClass().getName()+”.getUser”
  public User getUser(int id);
}
复制代码
service类:

复制代码
@Service(“userService”)
public class UserServiceImpl implements IUserService {

@Resource
private UserDao userDao;

  public User getUser(int id) {
    return userDao.getUser(id);
  }
}
复制代码
2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
  mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代。SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
spring-mybatis.xml

复制代码





<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${initialSize}" />
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${maxActive}" />
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${maxIdle}" />
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${minIdle}" />
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${maxWait}" />
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
    <!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件-->
    <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
</bean>

<!-- mybatis spring sqlSessionTemplate,使用时直接让spring注入即可 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>


复制代码
sqlMapConfig.xml

复制代码







复制代码
User.java

复制代码
public class User {

private int id;
private String username;
private String password;
private int age;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

}
复制代码
UserDao.java

复制代码
@Repository
public class UserDao{

@Resource
private SqlSessionTemplate sqlSessionTemplate;

public User getUser(int id) {
    return sqlSessionTemplate.selectOne(this.getClass().getName() + ".getUser", 1);
}   

}
复制代码
UserService.java

复制代码
@Service
public class UserService{

@Resource
private UserDao userDao;

public User getUser(int id) {
    return userDao.getUser(id);
}

}
复制代码
3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
spring-mybatis.xml

复制代码





<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- 初始化连接大小 -->
    <property name="initialSize" value="${initialSize}" />
    <!-- 连接池最大数量 -->
    <property name="maxActive" value="${maxActive}" />
    <!-- 连接池最大空闲 -->
    <property name="maxIdle" value="${maxIdle}" />
    <!-- 连接池最小空闲 -->
    <property name="minIdle" value="${minIdle}" />
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait" value="${maxWait}" />
</bean>

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
    <!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件-->
    <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>


复制代码
sqlMapConfig.xml

复制代码







复制代码
User.java

复制代码
public class User {

private int id;
private String username;
private String password;
private int age;


public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

}
复制代码
UserDao.java

复制代码
@Repository
public class UserDao extends SqlSessionDaoSupport{

public User getUser(int id) {
    return this.getSqlSession().selectOne(this.getClass().getName() + ".getUser", 1);
}

  //使用SqlSessionDaoSupport必须注意,此处源码1.1.1中有自动注入,1.2中取消了自动注入,需要手工注入,侵入性强
  //也可在spring-mybatis.xml中如下配置,但是这种有多少个dao就要配置到少个,多个dao就很麻烦。
  //
  //   //

@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
// TODO Auto-generated method stub
super.setSqlSessionFactory(sqlSessionFactory);
}
}
复制代码
UserService.java

复制代码
@Service
public class UserService{

@Resource
private UserDao userDao;

public User getUserss(int id) {
    return userDao.getUser(1);
}

}
复制代码

转载请注明:SuperIT » spring与mybatis三种整合方法

喜欢 (0)or分享 (0)