持久层整合、Spring与Mybatis整合 打卡第十天

第一章、持久层整合

1.Spring框架为什么要与持久层技术进行整合

1.JavaEE开发需要持久层进行数据库访问操作

2.JDBC Mybatis进行持久层开发过程存在大量的代码冗余

3.Spring基于模板设计模式对于上述的持久层技术进行封装

2.Spring可以与哪些持久层技术进行整合?

1.JDBC

|- JDBCTemplate

2.Hibernate(JPA)

|- HibernateTemplate

3.Mybatis

|- SqlSessionFactoryBean MapperScannerConfigure

第二章、Spring与Mybatis整合

1.Mybatis开发步骤的回顾

1.实体

public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;

    public User() {
    }

    public User(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.实体别名


        PUBLIC "-//mybatis.org//DTD Confi 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

   
       
   

    
   
       
           
           
               
               
               
               
           

       

   

    
       
   

3.表

create table t_users values (
    id int(11) primary key auto_increment,
    name varchar(12),
    password varchar(12)
);

4.创建DAO接口

public interface UserDAO {
    public void save(User user);
}

5.实现Mapper文件


        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


   
        insert into t_users(name, password) values (#{name}, #{password})
   

6.注册Mapper文件

  
       
   

7.MybatisAPI调用

public class TestMyBatis {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession session = sqlSessionFactory.openSession();
        UserDAO userDAO = session.getMapper(UserDAO.class);

        User user = new User();
        user.setName("liulei");
        user.setPassword("1234562");
        userDAO.save(user);

        session.commit();
    }
}

2.Mybatis在开发过程层中存在的问题

问题:配置繁琐,代码冗余

  1. 实体
  2. 实体别名 配置繁琐
  3. 创建 DAO 接口
  4. 实现 Mapper 文件
  5. 注册 Mapper 文件 配置繁琐
  6. Mybatis API 调用 代码冗余

3.Spring与Mybatis整合的思路

持久层整合、Spring与Mybatis整合 打卡第十天_第1张图片

持久层整合、Spring与Mybatis整合 打卡第十天_第2张图片

4.Spring与Mybatis这整合的开发步骤

1.配置文件 (ApplicationContext.xml)进行相关配置(只需配置一次)

1.配置文件 (ApplicationContext.xml)进行相关配置(只需配置一次)

创建SqlSessionFactory

指定实体类所在的包 com.liulei.mybatis

指定 配置文件(映射文件)的路径 还有通用配置

com.liulei.mapper/*Mapper.xml

DAO接口的实现类

指定DAO接口放置的包

2.编码

没有整合前:

  1. 实体
  2. 实体别名 配置繁琐
  3. 创建 DAO 接口
  4. 实现 Mapper 文件
  5. 注册 Mapper 文件 配置繁琐
  6. Mybatis API 调用 代码冗余

整合后:

1.实体类
2.表
3.创建DAO接口
4.Mapper文件配置

5.Spring与Mybatis整合编码

搭建开发环境(jar)


        org.springframework
        spring-jdbc
      5.2.6.RELEASE
   

   
       org.mybatis
       mybatis-spring
      2.0.4
   

   
      com.alibaba
      druid
      1.1.12
   

    
   
   
      org.mybatis
      mybatis
      3.5.5
   

   
   
      mysql
      mysql-connector-java
      5.1.48
   

Spring配置文件的配置


 
   
   
   
   
   


 
   
   
   
     
        classpath:com.liulei.mapper/*Mapper.xml
     

   

 

 
 
   
   
 

编码

1.实体

public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;

    public User() {
    }

    public User(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.表

create table t_users values (
    id int(11) primary key auto_increment,
    name varchar(12),
    password varchar(12)
);

3.DAO接口

public interface UserDAO {
    public void save(User user);
}

4.Mapper文件配置


   
        insert into t_users(name, password) values (#{name}, #{password})
   

在运行整段代码时,一定要记住配置日志文件(log4j.properties),负责会报错

6.Spring与Mybatis整合的细节

问题:Spring与Mybatis整合后,为什么DAO不提交事务,但是数据能够插入数据库中?

Mybatis 提供的连接池对象 —> 创建 Connection

Connection.setAutoCommit(false) 手工的控制了事务,操作完成后,需要手工提交

Druid(C3P0、DBCP)作为连接池 —> 创建 Connection

Connection.setAutoCommit(true) 默认值为 true,保持自动控制事务,一条 sql 自动提交。

答案:因为 Spring 与 Mybatis 整合时,引入了外部连接池对象,保持自动的事务提交这个机制Connection.setAutoCommit(true),不需要手工进行事务的操作,也能进行事务的提交。

注意:实战中,还是会手工控制事务(多条SQL一起成功,一起失败),后续 Spring 通过 事务控制 解决这个问题 。

你可能感兴趣的:(java基础知识,Spring,mybatis,spring,java)