Mybtis-Spring整合

Mybatis-Spring 方法一

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

关于Spring来接管MyBatis

Mybatis原有的数据源将会被接管

只需要 建立一个 Mybatis-dao.xml 随后将xml引入到 完整的xml中即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:c="http://www.springframework.org/schema/aop"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <aop:aspectj-autoproxy/>
    <context:annotation-config/>

    <!--   指定要扫描的包 -->
    <context:component-scan base-package="com.xue"/>

    <!--  DataSource : 使用Spring Mybatis来替换  -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="1111"/>
    </bean>
    <!--  sql Session  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--    绑定Mybatis配置文件    -->
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>

    <!--   sqlSession  -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>


</beans>

这样就可以完成连接的建立这个过程并且完成了之前的获取sqlsession这个工具类的步骤,利用的是SqlSessionTemplate来实现

接下来来个测试!

假如说存在Teahcer 表在数据库中

我们要获取表的数据

在MyBatis中

  1. 创建pojo
  2. 做一个mapper的接口与实现它的xml文件
  3. 利用工具类来获取sqlsession,随后获取 xml所实现的方法,然后再使用方法,来获取数据

(具体代码不再赘述)

在MyBatis-Spring中不同,因为工具类获取sqlsession已经被Spring给接管了,我们可以尝试做一个AOP(我理解的叫AOP)来进行操作

即我们不用xml来实现单一的实现接口而改用一个类来实现接口,随后再用这个类来实现xml文件,我们只需要把我们到的sqlsession注入到这个类中,就可以了。像下面这样:

<bean id="teacherMapper" class="com.xue.mapper.TeacherMapperImpl">
    <property name="sqlSession" ref="sqlSession"/>
</bean>

在这里插入图片描述

然后它的impl可以是

public class TeacherMapperImpl implements TeacherMapper{
    //设置一下将要注入的session

    private SqlSessionTemplate sqlSession;

    public SqlSessionTemplate getSqlSession() {
        return sqlSession;
    }
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    @Override
    public List<Teacher> queryTeacher() {
        //获取要操作的Mapper
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);

        //这个时候 这个mapper已经是实现了TeacherMapper.xml 这个文件里的方法
        return  mapper.queryTeacher();


    }
}

测试类可以是:

public class MyTest {
    public static void main(String[] args) throws IOException {


        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TeacherMapper userMapper = (TeacherMapper) context.getBean("teacherMapper");


        List<Teacher> queryUser = userMapper.queryTeacher();
        queryUser.forEach(System.out::println);
    }
}

Mybatis-Spring 方法二

终极简化版本

SqlSessionDaoSupport

SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法,就像下面这样:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  public User getUser(String userId) {
    return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

在这个类里面,通常更倾向于使用 MapperFactoryBean,因为它不需要额外的代码。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一个非抽象的实现类,那么这个类就很有用了。

SqlSessionDaoSupport 需要通过属性设置一个 sqlSessionFactorySqlSessionTemplate。如果两个属性都被设置了,那么 SqlSessionFactory 将被忽略。

假设类 UserMapperImplSqlSessionDaoSupport 的子类,可以编写如下的 Spring 配置来执行设置:

<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

这是一个化简的方法

这样的话我们可以省去sqlsession注入SqlSessionTemplate这个过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值