持久层整合
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 configuration
PUBLIC "-//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
<?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通过事务控制解决这个问题