持久层整合
1.Spring框架为什么要与持久层技术进行整合
JavaEE开发需要持久层进行数据库的访问操作
JDBC Hibernate Mybatis进行持久层开发存在大量的代码冗余
Spring基于模板设计模式对于上述的持久层技术进行了封装
2.Mybatis整合
SqlSessionFactoryBean MapperScannerConfigure
Spring与Mybatis整合
1.Mybatis开发步骤的回顾
1.实体
2.实体别名
3.表
4.创建DAO接口
5.实现Mapper文件
6.注册Mapper文件
7.MybatisAPI调用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="EmpMapper.xml"/></mappers>
</configuration>
1.实体
2.实体别名 配置繁琐
3.表
4.创建DAO接口
5.实现Mapper文件
6.注册Mapper文件 配置繁琐(一个Dao就需要配置一个)
7.MybatisAPI调用 代码冗余
Spring与Mybatis整合思路分析
编码步骤
1.搭建开发环境(jar)
<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.14.RELEASE</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.18</version></dependency>
applicationContext.xml
java"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:mysql://localhost:3306/db03?useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/><property name="driverClassName" value="com.mysql.jdbc.Driver"/></bean>
<!-- 创建sqlSessionFactory SqlSessionFactoryBean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations"><list><value>classpath:mybatis.mapper/*Mapper.xml</value></list></property></bean>
<!-- 创建DAO对象 MapperSannerConfigure--><bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mybatis.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>
</beans>
Spring与Mybatis细节
Spring与Mybatis整合后,为什么Dao不提交事务,但是数据能查询并插入的数据库?
本质上控制连接对象(Connection)--->连接池(DataSource)
1.Mybatis提供的连接池对象 --->创建Connection
Connection.setAutoCommit(false) 手工的控制了事务 操作完成后,手动提交
2.Druid(C3P0 DBCP)作为连接池 ->>>创建Connection
Connection.setAutoCommit(true) true为默认值 保存自动控制事务 一条sql 自动提交
回答:Spring与Mybatis整合,引入了外部连接池对象,保持自动事务提交这个机制(Connection.setAutoCommit(true))不需要手动提交,自动提交事务
未来实战中,还会手工控制事务,多条Sql一起成功 一起失败 后续Spring通过事务控制解决这个问题