Spring DAO(5):集成 MyBatis

Spring 集成 MyBatis


Spring 4.0 移除了对于 iBatis 的直接支持,由 MyBatis 自身提供整合支持,对于 MyBatis 来说,没有特别的事务管理策略,除了 JDBC Connectin 之外,没有其他特别的事务资源,因此和 Spring JDBC 事务管理的方式完全一致,采用相同的 DataSourceTransactionManager 事务管理器;

以下通过一个简单的示例演示 Spring + MyBatis + MySQL 的集成过程:


示例代码模块 :
site/assad/domain/User(领域对象)
site/assad/dao/UserDao(DAO对象)
site/assad/dao/mapper/UserMapper(MyBatis 映射方法接口)
site/assad/servcie/UserServcie(Service对象)
applicationContext.xml(spring 配置文件)
mybatis-config.xml(MyBatis 配置文件)
mapper/UserMapper.xml(MyBatis 实体映射配置文件)


领域对象 site.assad.domain.User 如下:
 
public class User implements Serializable{
    private int id;
    private String name;
    private String password;
    private Date createDate;
    private String icon;
    //getter,setter
}

Mybatis 部分的配置

同样创建 mybatis 配置文件, 不同的是不同配置数据源,这一部分由 Spring 配置: mybatis-config.xml 
 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--mybatis 全局配置-->
    <settings>
        <setting name="logImpl" value="LOG4J2" />
        <setting name="lazyLoadingEnabled" value="false" />
    </settings>
    <!--引入实体映射配置文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

创建针对 User 实体的映射配置文件  mapper/UserMapper.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="site,assad.dao.mapper.UserDao">
    <resultMap id="userMap" type="site.assad.domain.User">
        <id property="id" column="user_id" />
        <result property="name" column="user_name" />
        <result property="password" column="user_password" />
        <result property="createDate" column="create_date" />
        <result property="icon" column="user_icon" />
    </resultMap>
    <select id="getUserById" resultMap="userMap">
        select * from users where user_id = #{id}
    </select>
    <select id="getUserByName" resultMap="userMap">
        select * from users where user_name = #{name}
    </select>
    <select id="getUserByIcon" resultMap="userMap">
        select * from users where user_icon = #{icon}
    </select>
</mapper>

创建mapper接口对象, site.assad.dao.mapper.UserMapper
 
public interface UserMapper {
    User getUserById(int id);
    User getUserByName(String name);
    List<User> getUserByIcon(String icon);
}

Spring 部分的配置

在 Spring 上下文配置文件中配置 MyBatis 数据源,模板引擎,事务管理器等, applicationContext.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<beans ....>
    <!--扫描bena-->
    <context:component-scan base-package="site.assad.dao" />
    <context:component-scan base-package="site.assad.service" />
    <!--配置属性占位符空间-->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!--配置数据源-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
          p:driverClassName="${jdbc.driverClassName}"
          p:url="${jdbc.url}"
          p:username="${jdbc.username}"
          p:password="${jdbc.password}" />
    <!--配置 MyBatis 的 SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
          p:dataSource-ref="dataSource"
          p:configLocation="classpath:mybatis-config.xml" />
    <!--配置SqlSessionTemplate-->
    <bean class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    </bean>
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
          p:dataSource-ref="dataSource" />
    <!--自动扫描注解声明式事务管理切面-->
    <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
</beans>

创建 DAO 类

mybatis 提供了 SqlSessionTemplate 模板类用于支持 Spring 风格产生 Mybatis SqlSesison 对象;
编写一个 User 实体的 DAO , site.assad.dao.UserDao
 
@Repository
public class UserDao {
    @Autowired
    private SqlSessionTemplate sessionTemplate;
    public User getUserById(final int id){
        return sessionTemplate.getMapper(UserMapper.class).getUserById(id);
    }
    public User findUserByName(final String name){
        return sessionTemplate.getMapper(UserMapper.class).getUserByName(name);
    }
    public List<User> findUserByIcon(final String icon) {
        return sessionTemplate.getMapper(UserMapper.class).getUserByIcon(icon);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值