我爱普洱茶 发表于 2024-1-2 19:23:34

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]
查看完整版本: Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件