Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件
学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】Spring持久层整合 第一章、持久层整合
1.Spring框架为什么要与持久层技术进行整合
[*]JavaEE开发需要持久层进行数据库的访问操作。
[*]JDBC MyBatis、Hibernate进行持久开发过程存在大量的代码冗余
[*]Spring基于模板设计模式对与上述的持久层技术进行了封装
2.Spring可以与那些持久层技术进行整合?
[*]JDBC
工具:JDBCTemplate
[*]Hibernate(JPA)
工具:HibernateTemplate
[*]MyBatis
工具:SqlSessionFactoryBean MapperScannerConfigure
第二章、Spring与MyBatis整合
本质:就是对MyBatis目前不满意的地方进行整合,从而让MyBatis开发变得更整洁
1.MyBatis开发步骤的回顾
[*]实体
[*]实体别名
[*]建立表
[*]创建DAO接口
[*]实现Mapper文件
[*]注册Mapper文件
[*]MybatisAPI调用
2.Mybatis在开发过程中存在的问题
[*]配置繁琐(2.实体别名,6.注册Mapper文件)代码冗余(7.API调用)
3.Spring与Mybatis整合思路分析
https://img2023.cnblogs.com/blog/3321544/202311/3321544-20231120231520233-1777926017.png
4.Spring与Mybatis整合的开发步骤
[*]配置文件(ApplicationContext.xml)进行相关配置
**#配置 是只需要配置一次
**
<bean id="dataSource" />
<bean id="ssfb" >
<property name="dataSource" ref=""/>
<property name="typeAliasesPackage">
**指定实体类所在的包 com.baizhi.entity**
</property>
<property name="mapperLocations">
**指定 配置文件的路径以及通用配置**
com.baizhi.mapper/*Mapper.xml
</property>
</bena>
session.getMapper() ---xxxDAO实现类对象
XXXDAO ---> xXXDAO
-->
<bean id="scanner" >
<property name="sqlSessionFactoryBeanName" value="ssfb"/>
<property name="basePackage">
**指定DAO接口放置的包 com.baizhi.dao**
</property>
</bean>
[*]编码
实战经常根据需求 写的代码
[*]实体
[*]表
[*]创建DAO接口
[*]实现Mapper文件
5.Spring与Mybatis整合编码
[*]搭建开发环境(jar)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.18</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
[*]Spring配置文件的配置
<bean id="dataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false&allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactoryBean" >
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.baizhi.entity"/>
<property name="mapperLocations">
<list>
<value>classpath:com.baizhi.mapper/*Mapper.xml</value>
</list>
</property>
</bean>
<bean id="scanner" >
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<property name="basePackage" value="com.baizhi.dao"/>
</bean>
[*]编码
[*]编码
[*]表
[*]DAO接口
[*]Mapper文件配置
6.Spring与Mybatis整合细节
[*]问题:Spring与Mybatis整合后,为什么DAO不提交事务,但是数据能够插入数据库中?
Connection -—> tx
Mybatis(Connection)
本质上控制连接对象(Connection) —→连接池(DataSource)
[*]Mybatis提供的连接池对象 --→创建Connection
Connection.setAutoCommit(false) 手工的控制了事务、操作完成后,手工提交
[*]Druid(C3P0) DBCP)作为连接池—→创建Connection
Druid保持自动控制事务,Connection.setAutoCommit的参数为true,一条sql 自动提交
答案:因为Spring与Mybatis整合时,引入了外部连接池对象,保持自动的事务提交机制,不需要手工进行事务的操作也能自动提交。
注意:未来实战中,还会手工控制事务(多条sql一起成功,一起失败),后续Spring通过事务控制解决这个问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]