Spring整合Mybatis

1. MyBatis-Spring

        Spring整合Mybatis需要用到MyBatis-Spring包,MyBatis-Spring会帮助将Mybatis代码无缝整合到Spring中,使用maven在pom.xml引入MyBatis-Spring包:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>

        要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:一个SqlSessionFactory 和至少一个数据映射器类

2 Spring中配置 SqlSessionFactory

        在 MyBatis-Spring 中,可使用SqlSessionFactoryBean来创建 SqlSessionFactory。要配置这个工厂 bean,只需要把下面代码放在 Spring 的 XML 配置文件中:

    <!--
        DataSource:使用spring的数据源替换Mybatis的配置。数据源如:C3P0、dbcp、druid
        次数使用spring提供的jdbc
    -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatistest?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!-- sqlSessionFactory配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 绑定Mybatis配置文件 -->
        <property name="configuration" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- SqlSessionTemplate:就是我们使用的sqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!-- 只能使用构造器注入SqlSessionFactory,因为它没有set方法 -->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

        以上.xml文件中,首先创建了DataSource,使用的是Spring带的数据源。

        然后配置了SqlSessionFactory对象,在之前Mybatis配置文件中,使用SqlSessionFactoryBuilder 来创建SqlSessionFactory,而在MyBatis-Spring中,则使用 SqlSessionFactoryBean 来创建,该对象需要注入一个数据源datasource,这也是首先配置datasource的原因。

        在 MyBatis的使用中,通过 SqlSessionFactory 来创建 SqlSession。一旦获得一个 session 之后,就可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,关闭掉 session就行。在Mybatis-Spring中,使用SqlSessionTemplate 代替SqlSession,如上文xml文件中的配置所示,可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。

3.  为接口添加实现类:

        Mybatis原有接口UserMapper及接口映射文件UserMapper.xml如下:

UserMapper:

public interface UserMapper {
    public List<User> selectUser();
}

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="com.wyf.mapper.UserMapper">

    <resultMap id="userMap" type="com.wyf.pojo.User">
        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
    </resultMap>

    <select id="selectUser" resultMap="userMap">
        select * from user
    </select>

</mapper>

 增加Dao接口的实现类;私有化sqlSessionTemplate

public class UserMapperImpl implements UserMapper {

    /**
     *  qlSessionTemplate类相当于Mybatis中使用的SqlSession,该对象用以操作数据库
     */
    private SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public List<User> selectUser() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.selectUser();
    }
}

将接口实现类注入到Spring中:

    <bean id="userMapper" class="com.wyf.mapper.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

测试:

public class MyTest {
    @Test
    public void test() throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapperImpl mapper = context.getBean(UserMapperImpl.class);
        List<User> userList = mapper.selectUser();
        for(User user:userList){
            System.out.println(user);
        }
    }
}

Spring整合Mybatis源码:https://download.csdn.net/download/sssxlxwbwz/85077558

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值