spring复习05,spring整合mybatis,声明式事务
创始人
2024-03-02 07:09:41
0

spring复习05,spring整合mybatis,声明式事务

  • spring整合mybatis
    • 1. 在pom.xml中导入依赖
    • 2. 创建实体类
    • 3. 创建Mapper接口
    • 4. 配置mybatis核心配置文件
    • 5. 编写映射文件Mapper.xml
    • 6. 编写数据源配置
    • 7. sqlSessionFactory
    • 8. sqlSessionTemplate
    • 9. 需要给接口加实现类
    • 10. 将实现类注入到spring中
    • 11. 添加声明式事务
    • 12. 测试使用
  • 声明式事务
    • 1. 传播行为
    • 2. 隔离级别
    • 3. 只读提示 readOnly
    • 4. 事务超时期间

spring整合mybatis

新建一个maven项目,对用户的增删改查的业务操作。

1. 在pom.xml中导入依赖

	org.springframeworkspring-context5.3.1org.springframeworkspring-orm5.3.1junitjunit4.13.2testmysqlmysql-connector-java8.0.30org.mybatismybatis3.5.11org.mybatismybatis-spring3.0.0org.springframeworkspring-aspects5.3.1

这里我的数据源选择的是mybatis-spring。链接: mybatis-spring介绍和快速入门

2. 创建实体类

package com.gothic.sunset.pojo;public class User {private Integer id;private String userName;private String password;public User() {}public User(Integer id, String userName, String password) {this.id = id;this.userName = userName;this.password = password;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

3. 创建Mapper接口

package com.gothic.sunset.mapper;import com.gothic.sunset.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {public int addUser(User user);public int updateUser(@Param("id") int id);public int delete(@Param("id") int id);public List selectAllUsers();}

4. 配置mybatis核心配置文件

mybatis-config.xml:



5. 编写映射文件Mapper.xml

UserMapper.xml(在resources下的com/gothic/sunset/mapper目录下):



insert into user(id,user_name,password) values (#{id},#{userName},#{password})update  userset user_name=#{userName},password = #{password}where id = #{id}delete from user where id =#{id}

6. 编写数据源配置

在这里我的数据库连接配置信息在另一个文件中jdbc.properties中,通过 引入。
jdbc.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

在resources目录下新建spring-dao.xml:

	

7. sqlSessionFactory

也在spring-dao.xml中编写:

	

在这里可以通过sqlSessionFactory来绑定mapper映射文件,也可以像之前一样在mybatis-config.xmlmappers标签来绑定mapper映射文件。

8. sqlSessionTemplate

在spring-dao.xml中编写:
使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。

	

SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,可以使用它无缝代替你代码中已经在使用的 SqlSession。 SqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。

Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。(本着万物皆bean,交由容器处理)

9. 需要给接口加实现类

因为现在我们的sqlsession已经交由ioc容器来管理,所以我们可以通过接口实现类的方式,直接使用依赖注入去完成功能,这会使我们的代码更简单。

package com.gothic.sunset.mapper;import com.gothic.sunset.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{//set注入sqlSession对象private SqlSessionTemplate sqlSession;public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}@Overridepublic int addUser(User user) {UserMapper mapper = sqlSession.getMapper(UserMapper.class);int i = mapper.addUser(user);return i;}@Overridepublic int updateUser(int id) {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.updateUser(id);}@Overridepublic int delete(int id) {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.delete(id);}@Overridepublic List selectAllUsers() {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.selectAllUsers();}}

这里的sqlSession也可以通过注解的方式注入,这样子就更简单了。

10. 将实现类注入到spring中

在applicationContext.xml中编写:

	

11. 添加声明式事务

要开启 Spring 的事务处理功能,在 Spring 的配置文件中创建一个 DataSourceTransactionManager 对象。

事务管理器:

	 

这里如果使用@Transactional注解方式来配置的话,配置事务通知就需要使用

配置事务通知:

	

read-only属性:设置只读属性
rollback-for属性:设置回滚的异常
no-rollback-for属性:设置不回滚的异常
isolation属性:设置事务的隔离级别
timeout属性:设置事务的超时属性
propagation属性:设置事务的传播行为

配置aop事务切入:

 	

12. 测试使用

 	@Testpublic void testJdbc(){ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper =  ioc.getBean("userMapper", UserMapper.class);User user1 = new User(1, "一叶知秋", "110244001");User user2 = new User(2, "大漠孤烟", "110244003");User user3 = new User(3, "夜雨声烦", "110244023");User user4 = new User(4, "树藤海岛", "110244026");userMapper.addUser(user1);userMapper.addUser(user2);userMapper.addUser(user3);userMapper.addUser(user4);}

观察我们的测试代码,越来越简单,相比于之前sqlSessionFactory的工具类也更简单了。

插入成功:

在这里插入图片描述

声明式事务

声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一。

Spring使用AOP来完成声明式的事务管理,因而声明式事务是以方法为单位,在Spring中事务属性有以下四个参数:

1. 传播行为

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

2. 隔离级别

数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。一个事务与其他事务隔离的程度称为隔离级别。SQL标准中规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高数据一致性就越好但并发性越弱

隔离级别一共有四种:

  • 读未提交:READ UNCOMMITTED
    允许Transaction01读取Transaction02未提交的修改。
  • 读已提交:READ COMMITTED、
    要求Transaction01只能读取Transaction02已提交的修改。
  • 可重复读:REPEATABLE READ
    确保Transaction01可以多次从一个字段中读取到相同的值,即Transaction01执行期间禁止其它事务对这个字段进行更新。
  • 串行化:SERIALIZABLE
    确保Transaction01可以多次从一个表中读取到相同的行,在Transaction01执行期间,禁止其它事务对这个表进行添加、更新、删除操作。可以避免任何并发问题,但性能十分低下。

3. 只读提示 readOnly

对一个查询操作来说,如果我们把它设置成只读,就能够明确告诉数据库,这个操作不涉及写操作。这样数据库就能够针对查询操作来进行优化。

4. 事务超时期间

事务在执行过程中,有可能因为遇到某些问题,导致程序卡住,从而长时间占用数据库资源。而长时间占用资源,大概率是因为程序运行出现了问题(可能是Java程序或MySQL数据库或网络连接等等)。此时这个很可能出问题的程序应该被回滚,撤销它已做的操作,事务结束,把资源让出来,让其他正常程序可以执行。
超时回滚,释放资源


以上的四个属性在xml和注解中都可以配置:
xml中:


好多我就不一一列出,大家可以自行查看文档。
注解:


@Transactional(isolation = "",timeout = "",
readOnly = true|flase,propagation = "",rollbackFor...)

在这里插入图片描述
声明式事务默认只针对运行时异常回滚,编译时异常不回滚。可以通过@Transactional中相关属性设置回滚策略。
rollbackFor属性:需要设置一个Class类型的对象
rollbackForClassName属性:需要设置一个字符串类型的全类名
noRollbackFor属性:需要设置一个Class类型的对象
rollbackFor属性:需要设置一个字符串类型的全类名


spring大概的过了一遍,过几天要开始springMvc的复习了,果然“配置地狱”!!!

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...