栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring整合MyBatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring整合MyBatis

文章目录
    • 概述
    • 头
    • Mybatis配置文件
    • 数据源
    • sqlSessionFactory
    • sqlSessionTemplate
    • 映射文件
        • 1.基本方式
        • 2.实现类继承SqlSessionDaoSupport方式
        • 3.MapperFactoryBean方式
        • 4.mybatis:scan 方式
    • 事务(aop,xml实现)
        • ACiD
        • 头
        • 开启事务
        • 配置事务通知
        • 事务织入

概述
  • 将实际需要的映射器,数据源,sqlsession,sqlSessionFactory 放到spring的ioc容器中
  • sqlsession转变为SqlSessionTemplate
  • mybatis配置文件的数据源,注册映射文件等任务都交给了spring的配置文件处理
头





Mybatis配置文件


    




数据源

这里使用spring提供的数据源类,在创建sqlSessionFactory 时需要数据源

  


    
    
        
        
        
        
    
sqlSessionFactory
  • 属性解释
    configLocation 读取mybatis配置文件
    mapper 读取mapper文件
   
   
        

        

        
    
sqlSessionTemplate

如果不使用最原始的注册mapper方法,这个bean可以省略
注意: 使用构造器注入

    
        
    
映射文件
  • 环境:
    映射文件(UserMapper.xml)
    映射对应的接口(UserMapper.java)
    mybatis配置文件
  • 注:下面几种注册映射文件的方法中,最后一种最方便
1.基本方式

a.新建mapper接口的实现类

public class UserMapperImp implements UserMapper{
//    调用接口方法需要SqlSessionTemplate
    private final SqlSessionTemplate sqlSessionTemplate;

    public UserMapperImp(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

    public List selectById(int id) {
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        return mapper.selectById(id);
    }
}

b.为实现类配置bean

    
        
    

c.使用

  ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("spring-config.xml");
  UserMapper mapper = cpx.getBean("UserMapper1",UserMapper.class);
  List users = mapper.selectById(1);
2.实现类继承SqlSessionDaoSupport方式
  • 省略了 SqlSessionTemplate 这一步
  • SqlSessionDaoSupport 里面封装了SqlSessionTemplate,通过getSqlSessionTemplate就可以拿到

a.实现类继承SqlSessionDaoSupport 实现mapper接口

public class UserMapperSupportImp extends SqlSessionDaoSupport implements UserMapper {
//    父类提供的方法 getSqlSessionTemplate() 
    public List selectById(int id){
        SqlSessionTemplate sqlSessionTemplate = getSqlSessionTemplate();
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        return mapper.selectById(id);
    }
}

b.为实现类配置bean

    
        
    
3.MapperFactoryBean方式
  • 无需实现类
  • 名字是MapperFactoryBean的id
  • 属性
    mapperInterface: mapper接口
  • mapper和接口需要在同一个包下
  • 鸡肋在每一个mapper都需要这样建立一个bean

a.为MapperFactoryBean配置bean

    
        
        
    

b.使用

UserMapper mapper = cpx.getBean("userMapper",UserMapper.class);
4.mybatis:scan 方式
  • 将一个包下的所有mapper注册。横扫饥饿,做回自己。
  • 名字是接口名, 首字母小写

a.声明命名空间

    xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
    http://mybatis.org/schema/mybatis-spring
    http://mybatis.org/schema/mybatis-spring.xsd

b.配置 base-package:需要扫描的包


c.使用

        UserMapper mapper1 = cpx.getBean("userMapper",UserMapper.class);

        TestMapper mapper2 = cpx.getBean(TestMapper.class);
事务(aop,xml实现)
  • 通过aop给一个方法创建事务。
  • 流程 开启事务–配置事务通知-织入事务
ACiD

原子性; 过程原子
一致性: 前后数据库状态一致
隔离性: 事务之间隔离
持久性: 一旦提交,数据永久改变

头




开启事务

    
        
    
配置事务通知

name : 需要配置事务的方法
propagation :一般为REQUIRED,
read-only:用于select,只读


    
        

            
            
            



        
    
事务织入

    
        
        
    

目前不太理解为什么 tx:method 和切入点都在声明一种方法,感觉很多余。一个勉强的解释是
tx:method 是在声明一种规则,而aop:config在强调在哪里切入

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号