Spring5学习随笔-整合MyBatis(持久层)、连接池、Mapper文件 ...

打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

学习视频:【孙哥说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整合思路分析


4.Spring与Mybatis整合的开发步骤


  • 配置文件(ApplicationContext.xml)进行相关配置
    1. **#配置 是只需要配置一次
    2. **
    3. <bean id="dataSource" />
    4. <bean id="ssfb" >
    5.                 <property name="dataSource" ref=""/>
    6.                 <property name="typeAliasesPackage">
    7.                                 **指定实体类所在的包 com.baizhi.entity**
    8.                 </property>
    9.                 <property name="mapperLocations">
    10.                                 **指定 配置文件的路径以及通用配置**
    11.                                 com.baizhi.mapper/*Mapper.xml
    12.                 </property>
    13. </bena>
    14. session.getMapper() ---xxxDAO实现类对象
    15.                 XXXDAO ---> xXXDAO
    16. -->
    17. <bean id="scanner" >
    18.                 <property name="sqlSessionFactoryBeanName" value="ssfb"/>
    19.                 <property name="basePackage">
    20.                                 **指定DAO接口放置的包 com.baizhi.dao**
    21.                 </property>
    22. </bean>
    复制代码
  • 编码
    实战经常根据需求 写的代码

    • 实体

    • 创建DAO接口
    • 实现Mapper文件

5.Spring与Mybatis整合编码


  • 搭建开发环境(jar)
    1. <dependency>
    2.     <groupId>org.springframework</groupId>
    3.     <artifactId>spring-jdbc</artifactId>
    4.     <version>5.1.14.RELEASE</version>
    5. </dependency>
    6. <dependency>
    7.     <groupId>org.mybatis</groupId>
    8.     <artifactId>mybatis-spring</artifactId>
    9.     <version>2.0.2</version>
    10. </dependency>
    11. <dependency>
    12.     <groupId>com.alibaba</groupId>
    13.     <artifactId>druid</artifactId>
    14.     <version>1.1.18</version>
    15. </dependency>
    16. <dependency>
    17.     <groupId>mysql</groupId>
    18.     <artifactId>mysql-connector-java</artifactId>
    19.     <version>5.1.48</version>
    20. </dependency>
    21. <dependency>
    22.     <groupId>org.mybatis</groupId>
    23.     <artifactId>mybatis</artifactId>
    24.     <version>3.4.6</version>
    25. </dependency>
    复制代码
  • Spring配置文件的配置
    1. <bean id="dataSource" >
    2.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    3.     <property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false&allowPublicKeyRetrieval=true"/>
    4.     <property name="username" value="root"/>
    5.     <property name="password" value="123456"/>
    6. </bean>
    7. <bean id="sqlSessionFactoryBean" >
    8.     <property name="dataSource" ref="dataSource"/>
    9.     <property name="typeAliasesPackage" value="com.baizhi.entity"/>
    10.     <property name="mapperLocations">
    11.         <list>
    12.             <value>classpath:com.baizhi.mapper/*Mapper.xml</value>
    13.         </list>
    14.     </property>
    15. </bean>
    16. <bean id="scanner" >
    17.     <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
    18.     <property name="basePackage" value="com.baizhi.dao"/>
    19. </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通过事务控制解决这个问题。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表