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

Spring-MyBatis整合

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

Spring-MyBatis整合

1:介绍

MyBatis:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
Spring:
Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。

2:Spring对MyBatis提供那些支持

MyBatis需求:

    DataSource数据源SqlSessionFactory对象Mapper接口对象TransactionManager对象-事务管理

Spring可以为MyBatis提供这些对象的创建并交给IOC管理。

Spring可以为事务管理提供切面类,完成增删改查的事务管理。

3:整合环境
    Maven工程JDK1.8MySql数据库MyBatis3.5.7Spring5.2.13ehcache缓存分页插件Druid数据库连接池slf4j日志
4:添加工程依赖
    MySql驱动包MyBatis核心包SpringContext,SpringAOP,SpringJDBC包mybatis-spring整合包Druid数据库连接池MyBatis分页插件mybatis-ehcache整合包slf4j日志门面具体实现junit单元测试包
 
        
        
        
            mysql
            mysql-connector-java
            5.1.37
        
        
        
            org.mybatis
            mybatis
            3.5.7
        

        
        
        
            org.springframework
            spring-context
            5.2.13.RELEASE
        
        
        
            org.springframework
            spring-aspects
            5.2.13.RELEASE
        
        
        
            org.springframework
            spring-jdbc
            5.2.13.RELEASE
        

        
        
            org.mybatis
            mybatis-spring
            1.3.2
        

        
        
            com.alibaba
            druid
            1.1.10
        

        
        
            com.github.pagehelper
            pagehelper
            5.2.0
        

        
        
            org.mybatis.caches
            mybatis-ehcache
            1.2.1
        

        
        
            ch.qos.logback
            logback-classic
            1.2.3
        

        
        
            junit
            junit
            4.12
            test
        

    
5:数据库表

6:项目目录

7:配置MyBatis 7.1:MyBatis核心配置文件

mybatis-config:





    
        
        
        
        
        
        
        
        
    
    
    
        
        
    


7.2:MyBatis数据源配置 7.2.1:Druid数据库连接配置

druid.properties:

druid.driver=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=UTF-8
druid.username=root
druid.password=root
#初始化连接数
druid.pool.init=1        
#最小连接数
druid.pool.minIdle=3     
#最大连接数
druid.pool.maxActive=20  
#最长等待连接时间
druid.pool.timeout=30000 
7.2.2:Spring配置文件引入druid.properties文件

applicationContext:


7.2.3:Spring配置文件配置数据源

将原本由mybatis配置的数据源,放到spring配置,交给IOC容器管理。

重点: Druid数据库连接池的参数driver是一个对象,并不是字符串,所以需要声明一个Driver对象,也交给IOC,并在配置数据源时引用。



或者也可以使用driverClassName:


applicationContext:





       
       
        
        
        
        

        
        
        
        

7.3:SqlSessionFactory配置

MyBatis创建SqlSessionFactory时,传入的参数时mybatis的核心配置文件。文件包含了各种配置,我们将SqlSessionFactory交给SpringIOC管理,可以配置数据源,mapper文件,实体类别名,甚至还有mybatis的核心配置文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xx8JWTpQ-1647158021815)(C:UserslenovoAppDataRoamingTyporatypora-user-imagesimage-20220313151641798.png)]

7.3.1:实体类对象
//因为使用MyBatis二级缓存所以实现序列化接口
public class User implements Serializable {
    private Integer id;
    private String userName;
    private String passWord;
    private Integer age;
    private String sex;
    private String email;

    public User() {
    }

    public User(Integer id, String userName, String passWord, Integer age, String sex, String email) {
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }
//提供get和set已经toString方法
}
7.3.2:Dao层
public interface UserDao {
     List queryAllUser();
     int insertUser(User user);
}
7.3.3:Mapper.xml配置





    
    

    
        
        
        
        
        
        
    
    
    
        select *  from t_user
    


    
    
        insert into t_user values(null,#{userName},#{passWord},#{age},#{sex},#{email})
    


7.3.4:Spring配置文件中配置SqlSessionFactory

applicationContext:


    
    
    
    
    
    
    
    

7.4:Mapper管理

MyBatis如何获取Dao层接口实例?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LolGWuz0-1647158021816)(C:UserslenovoAppDataRoamingTyporatypora-user-imagesimage-20220313152933037.png)]

applicationContext:


    
    
    
    

8:SpringAOP管理事务 8.1:XML配置

1:配置Spring提供的事务管理类

2:通过Spring.jdbc提供的tx标签,声明事务管理策略

3:面向切面编程,AOP管理事务

    
    
        
    

    
    
        
            
            
            
            
            
            
        
    

    
    
        
        
        
        
        
    

8.2:注解配置

1:配置Spring提供的事务管理类,交给IOC管理

2:声明注解驱动事务管理

     
    
    
    



    



3:在Service层配置事务策略

Service层接口:

public interface UserService {
    public List queryListUsers();
    public int insertUser(User user);
}

Service层实现类:

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;
    @Override
    //默认可重复读  @Transactional声明事务管理和策略
    @Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.SUPPORTS )
    public List queryListUsers() {
        List users = userDao.queryAllUser();
        return users;
    }
    @Override
    @Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
    public int insertUser(User user) {
        int i = userDao.insertUser(user);
        return i;
    }
}
9:测试

因为通过AOP进行事务管理,且Service层分为接口和实现类,AOP底层是动态代理,因为有接口所以是JDK动态代理,返回的是接口的实现类,但需要用接口接收。

UserService userServiceImpl = (UserService) context.getBean("userServiceImpl");
@Test
public void listUsers() {
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    UserService userServiceImpl = (UserService) context.getBean("userServiceImpl");
    //分页查询 2个结果一页,找第二页数据
    PageHelper.startPage(2,2);
    List users = userServiceImpl.queryListUsers();
    users.forEach(u-> System.out.println(u));
}
10:slf4j配置和ehcache配置

logback.xml:




    
    
        
            
            
            [%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger] [%msg]%n
            
        
    

    
    
    
        
        
    
    
    

ehcache.xml:xsd格式报错不用管



    
    
    
    

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

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

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