首页 > 其他分享 >【学习笔记】Spring整合Mybatis

【学习笔记】Spring整合Mybatis

时间:2023-02-18 11:34:49浏览次数:43  
标签:SqlSessionFactory 配置文件 Spring bean 笔记 mybatis sqlSession spring Mybatis

Spring整合Mybatis

回顾Mybatis

  1. 首先需要导入mybatis和mysql的依赖

  2. 需要一个配置文件,mybatis-config.xml

    在这个配置文件中,需要配置连接数据库的环境

  3. 通过SqlSessionFactory创建SqlSession,之前我们是把这些代码提取为一个工具类

    public class SqlSessionUtils {
        private static SqlSessionFactory sqlSessionFactory;
        static{
            try {
                String resource = "mybatis-config.xml";
                InputStream is = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }

    通过调用getSqlSession方法,获得SqlSession

  4. 开始进行业务的编写

    • 需要实体类

    • 持久层的接口和配置文件

      在配置文件中用namespace绑定持久层接口,然后就可以在里面用标签写sql语句

    • 在mybatis配置文件中,需要注册接口所对应的xml配置文件

  5. 测试

    • 调用SqlSessionFactory工具类中的方法,获得sqlSession

    • sqlSession.getMapper() ,方法里面就是你写的持久层接口,返回值是mapper

    • 用返回的mapper去调用接口里面的方法即可

    • 不要忘记关闭sqlSession,节省资源

详见:【学习笔记】Mybatis的使用 - GrowthRoad - 博客园 (cnblogs.com)

 

整合Mybatis方式一

在整合之前,需要导入如下依赖

除了mybatis导入的 mysql和 mabatis 和spring导入的spring-mvc、aop 还有以下依赖spring-jdbc、mybatis-spring

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>
​
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

 

  1. 在spring配置文件中准备DataSource数据源,也就是连接数据库的,之前都是在mybatis的配置文件中进行环境的设置,现在我们用Spring提供的JDBC 来替换掉mybatis的配置

    和注册bean一样,只是class用的是spring提供的 org.springframework.jdbc.datasource.DriverManagerDataSource

    在这个bean中,可以对连接数据库的属性进行配置,就是Driver、url、username、password

    <!--  datasource:数据源-->
        <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/jdbcstudy?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>

    这一步配置完毕后,在mybatis-config配置文件中

    image-20230217180905517

    这些可以被替换掉了

  2. 之前在工具类中需要用SqlSessionFactory来创建SqlSession,现在也是通过注册bean的方式来注册一个SqlSessionFactory,class是spring提供的SqlSessionFactoryBean,它的属性需要上面创建的数据源

    <!--    SqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    在这个bean中,还可以绑定mybatis的配置文件,也可以直接在这里面完成mybatis配置文件中可以进行的配置。比如设置环境、别名、设置等

    <property name="configLocation" value="classpath:mybatis-config.xml"/>

    image-20230217183326755

    绑定mybatis配置后,这两个配置文件就连接起来了,在哪个配置文件中配置都可以

  3. 有了SqlSessionFactory,之前我们是用SqlSessionFactory去获取SqlSession,但现在我们使用SqlSessionTemplate,它就是相当于sqlSession。创建方法还是通过注册bean的方式,class是spring提供的SqlSessionTemplate。这个bean需要注入一个属性SqlSessionFactory,就是上面我们创建的,但只能通过构造器注入,因为它没有set方法

    <!--    SqlSessionTemplate-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
  4. 之前是只有一个接口和接口的xml 就可以了,现在我们需要一个实现类,这个实现类需要实现上面的接口。在这个类中使用SqlSessionTemplate,是用组合的方式,还要有一个set方法,用来注入SqlSessionTemplate。

    然后在重写的方法中,进行getMapper,获得mapper以后,就可以执行接口中的方法了。

    package com.wang.mapper;
    ​
    import com.wang.pojo.User;
    import org.mybatis.spring.SqlSessionTemplate;
    ​
    import java.util.List;
    ​
    public class UserMapperImpl implements UserMapper{
        
        //获得sqlSession,也就是SqlSessionTemplate
        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的方式,他需要的参数是sqlSessionTemplate,正是我们上面注册的那个。

  5. 测试,直接去调用UserMapper实现类中的方法即可。

    @Test
    public void test01(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
        UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
        List<User> users = userMapper.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }

     

整合Mybatis方式二

在方式一中,创建流程大概是:数据源dataSource--->SqlSessionFactory---> SqlSessionTemplate-->

通过set方法注入SqlSessionTemplate

方式二可以省略注册SqlSessionFactory的bean的步骤,直接向实现类bean注入SqlSessionFactory,前提是实现类需要继承SqlSessionDaoSupport类,然后调用getSqlSession方法就可以获得sqlSession了

新建一个实现类UserMapperImpl2

package com.wang.mapper;
​
import com.wang.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
​
import java.util.List;
​
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
    @Override
    public List<User> selectUser() {
        return getSqlSession().getMapper(UserMapper.class).selectUser();
    }
}

在xml配置文件中,注册这个bean,里面的属性是SqlSessionFactory

<bean id="userMapper2" class="com.wang.mapper.UserMapperImpl2">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

标签:SqlSessionFactory,配置文件,Spring,bean,笔记,mybatis,sqlSession,spring,Mybatis
From: https://www.cnblogs.com/wztblogs/p/17132223.html

相关文章

  • SpringMVC:RESTful
    目录RESTful简介①资源②资源的表述③状态转移RESTful的实现HiddenHttpMethodFilterRESTful简介REST:RepresentationalStateTransfer,表现层资源状态转移。①资源资源......
  • spring事务管理
    1.事务添加到javaEE三层架构里面的Service层(业务逻辑层)2.spring事务管理API①提供一个接口,代表事务管理器,这个接口针对不同框架提供不同的实现类  声明式事务管理......
  • MobaXterm相关使用笔记
    调节界面字体大小1.菜单栏字体大小设置2.terminal字体大小(1)CTRL+鼠标滚动——暂时(2)永久设置......
  • Android笔记--动态申请权限
    动态申请权限在动态申请权限这里,一共分为两种不同的模式,分别是Lazy模式(懒汉式)和Hungry模式(饿汉式),这两种模式区分的话,可以通俗地解释一下就是,对于懒汉来说,只有在我们点击某......
  • python学习笔记七:DataFrame
    1.Series是ndarray的升级,而DataFrame是Series的升级,从一维拓展到多维DataFrame的属性:index,colums,values,shapeimportnumpyasnpimportpandasaspdfrompandasimport......
  • python学习笔记六:Series
    Series是一种类似于一维数组的对象,由以下两部分组成:values:一组数据(ndarray或list类型)index:相关的数据索引标签一维数组默认索引为0,1,2,3...,而Series的索引可以自己给定......
  • python学习笔记五:numpy
    ndarray是一个多维数组的数据结构1.彩色图像是一个三维数组,通过matplotlib显示图像#显示图像importnumpyasnpimportmatplotlib.pyplotaspltfish=plt.imread('HappyF......
  • opencv学习笔记七十一:图像修复
    当我们的照片有划痕或遭到人为的涂鸦(比如马赛克)时,如果我们想让这些遭到破坏的图片尽可能恢复到原样,Opencv能帮我们做到吗?答案是肯定的。那么图像修复技术的原理是什么呢?简......
  • python学习笔记四:字典
    字典和集合一样是无序的,不能通过索引来存取,只能通过键来存取。字典的键必须是不可变的数据类型,如数字,字符串,元组等,列表等可变对象不能作为键。不允许同一个键出现两次,创建......
  • python学习笔记三:元组和集合
    学习python的小伙伴们经常会有这样一个疑问,既然有列表里,问什么还要有元组呢。因为列表是可变的,而元组是不可变的。比如我们经常需要传入函数的数据是不变的,这时就要用到元组......