持久层

  • 持久层整合总述
  • Mybatis 开发步骤回顾
  • Mybatis 开发中存在的问题
  • Spring 与 Mybatis 整合思路
  • Spring 与 Mybatis 整合的开发步骤
  • Spring 与 Mybatis 整合的编码
    • 搭建开发环境 pom.xml
    • Spring 配置文件的配置
    • 编码
    • Spring 与 Mybatis 整合细节

更多内容请查看笔记目录:【Spring 5.x】学习笔记汇总

持久层整合总述

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

  • JavaEE开发需要持久层进行数据库的访问操作
  • JDBC、Hibernate、MyBatis 进行持久开发过程存在大量的代码冗余
  • Spring 基于模板设计模式对于上述的持久层技术进行了封装

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

  • JDBC —— JDBCTemplate
  • Hibernate(JPA)—— HibernateTemplate
  • MyBatis —— SqlSessionFactoryBeanMapperScannerConfigure

Mybatis 开发步骤回顾

  1. 实体类 User
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;}
}
  1. 实体别名 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Confi 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias alias="user" type="com.yusael.mybatis.User"/></typeAliases><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/yus?useSSL=false"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment></environments>
</configuration>
  1. 表 t_users
create table t_users values (id int(11) primary key auto_increment,name varchar(12),password varchar(12)
);
  1. 创建 DAO 接口:UserDAO
public interface UserDAO {public void save(User user);
}
  1. 实现Mapper文件:UserDAOMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.yusael.mybatis.UserDAO"><insert id="save" parameterType="user">insert into t_users(name, password) values (#{name}, #{password})</insert>
</mapper>
  1. 注册 Mapper 文件 mybatis-config.xml
<mappers><mapper resource="UserDAOMapper.xml"/>
</mappers>
  1. 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("yusael");user.setPassword("123456");userDAO.save(user);session.commit();}
}

Mybatis 开发中存在的问题

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

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

Spring 与 Mybatis 整合思路


Spring 与 Mybatis 整合的开发步骤

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

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

Spring 与 Mybatis 整合的编码

搭建开发环境 pom.xml

<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.6.RELEASE</version>
</dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.4</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.43</version>
</dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version>
</dependency>

Spring 配置文件的配置

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/yus?useSSL=false"/><property name="username" value="root"/><property name="password" value="1234"/></bean><!--创建SqlSessionFactory SqlSessionFactoryBean--><bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!-- 指定实体类所在的包 --><property name="typeAliasesPackage" value="com.yusael.entity"/><!--指定配置文件(映射文件)的路径,还有通用配置--><property name="mapperLocations"><list><value>classpath:com.yusael.dao/*Mapper.xml</value></list></property></bean><!--创建DAO对象 MapperScannerConfigure--><bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/><!--指定DAO接口放置的包--><property name="basePackage" value="com.yusael.dao"/></bean></beans>

编码

  1. 实体 com.yusael.entity.User
public class User implements Serializable {private Integer id;private String name;private String 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;}
}
  1. t_user
create table t_users values (id int(11) primary key auto_increment,name varchar(12),password varchar(12)
);
  1. DAO接口 com.yusael.dao.UserDAO
public interface UserDAO {public void save(User user);
}
  1. Mapper文件配置 resources/applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/yus?useSSL=false"/><property name="username" value="root"/><property name="password" value="1234"/></bean><!--创建SqlSessionFactory SqlSessionFactoryBean--><bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="typeAliasesPackage" value="com.yusael.entity"/><property name="mapperLocations"><list><value>classpath:com.yusael.dao/*Mapper.xml</value></list></property></bean><!--创建DAO对象 MapperScannerConfigure--><bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/><property name="basePackage" value="com.yusael.dao"/></bean></beans>
  1. 测试
/*** 用于测试: Spring 与 Mybatis 的整合*/
@Test
public void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");UserDAO userDAO = (UserDAO) ctx.getBean("userDAO");User user = new User();user.setName("xiaojr");user.setPassword("999999");userDAO.save(user);
}

Spring 与 Mybatis 整合细节

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

  1. Mybatis 提供的连接池对象 —> 创建 Connection
    Connection.setAutoCommit(false) 手工的控制了事务,操作完成后,需要手工提交。
  2. Druid(C3P0、DBCP)作为连接池 —> 创建 Connection
    Connection.setAutoCommit(true) 默认值为 true,保持自动控制事务,一条 sql 自动提交。

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

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

【Spring 持久层】Spring 与 Mybatis 整合相关推荐

  1. Java持久层框架之mybatis使用

    一.什么是框架,框架从何而来,为什么使用框架? 框架(framework): 1.是一系列jar包,其本质是对JDK功能的拓展.(jar包,jar:class文件的压缩包) 2.框架是一组程序的集合, ...

  2. 【Spring 持久层】Spring 事务开发、事务属性详解

    持久层 事务回顾 Spring 事务编程开发 Spring 中的事务属性(Transaction Attribute) 隔离属性(ISOLATION) 传播属性(PROPAGATION) 只读属性(r ...

  3. Spring –持久层–编写实体并配置Hibernate

    欢迎来到本教程的第二部分. 当您看到本文有多长时间时,请不要惊慌–我向您保证,这主要是简单的POJO和一些生成的代码. 在开始之前,我们需要更新我们的Maven依赖项,因为我们现在将使用Hiberna ...

  4. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  5. 数据层HikariCP与MyBatis整合

    <!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql- ...

  6. spring boot mybatis 整合_Spring、MyBatis和SpringMVC的整合

    SSM框架整合的知识. 不用maven,为什么呢?主要是帮助更好的理解有哪些包,这样更加透彻.当然了,使用maven会更方便一点. 1 jar包管理 2 整合思路 spring在进行管理时,是很有条理 ...

  7. java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取

    java spring+mybatis整合实现爬虫之<今日头条>搞笑动态图片爬取(详细) 原文地址原博客地址 先上效果图 抓取的动态图: 数据库: 一.此爬虫介绍 今日头条本身就是做爬虫的 ...

  8. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  9. 【SpringBoot】SpringBoot——整合持久层技术

    文章目录 5. 整合持久层技术 5.1 整合JdbcTemplate 5.2 整合MyBatis 5.3 Spring Data JPA 5.3.1 JPA.Spring Data.Spring Da ...

最新文章

  1. 用于数字成像的双三次插值技术​
  2. ES6中的class是如何实现的?(附Babel编译的ES5代码详解)
  3. html5实现获取地理位置信息并定位
  4. 【组图】地震前线归来--心中的震撼
  5. 95-30-020-Channel-NioSocketChannel
  6. 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析(含代码)
  7. paip..net代码生成器使用总结
  8. C++实现 模糊综合评价法
  9. 证件照处理软件(IDPhoto Processor)免费版 v3.2.10
  10. isis协议_[IS-IS] IS-IS路由协议的基本知识及配置
  11. 计算机远程用户关机指令,有哪些远程关机命令?如何用向日葵进行远程关机电脑?...
  12. android kodi 启动器,kodi安卓
  13. IPad 如何使用蓝牙鼠标
  14. 数组系列—连续数中寻找缺失的数字
  15. Layer js——弹窗/提示/询问/加载/层
  16. 计算机的显示器颜色怎么调,电脑显示器怎样调色差
  17. 学习记录633@python特征筛选之WOE值与IV值
  18. 计算机毕业设计Java养老院信息管理(系统+源码+mysql数据库+Lw文档)
  19. 世界电信和信息社会日 | TcaplusDB君节日介绍
  20. 为什么同样是跳槽,有些人跳槽薪资能翻三倍?

热门文章

  1. 有的网线接口为什么做不到轻薄化?
  2. We want to do better without being distracted
  3. 以太网CSMA/CD算法交换机自学习/转发简述
  4. IDEA配置使用阿里云maven仓库
  5. sql azure 语法_如何将SQL Server数据库备份到Microsoft Azure
  6. azure_Azure Analysis Services中的动态分区(表格)
  7. SQL Server中的报表–结合T-SQL和DAX查询以生成有效的报表
  8. jQuery事件绑定
  9. Spring中实现自定义事件
  10. EasyUI使用JSON保存数据