spring+jdbc+template+transaction实现
spring+jdbc+template+transaction实现
使用spring和jdbc模板事务实现
1、创建实体类:
Role
package com.wbg.sjt.entity;public class Role {private int id;private String roleName;private String note;@Overridepublic String toString() {return "Role{" +"id=" + id +", roleName='" + roleName + '\'' +", note='" + note + '\'' +'}';}public Role() {}public Role(int id, String roleName, String note) {this.id = id;this.roleName = roleName;this.note = note;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public String getNote() {return note;}public void setNote(String note) {this.note = note;} }
View Code
2、创建配置JavaConfig
package com.wbg.sjt.config;import com.mchange.v2.c3p0.ComboPooledDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import org.springframework.transaction.interceptor.TransactionInterceptor; import org.springframework.transaction.support.TransactionTemplate;import javax.sql.DataSource; import java.beans.PropertyVetoException;@Configuration @ComponentScan("com.wbg.sjt.*") @EnableTransactionManagement public class JavaConfig {@Bean(name = "dataSource")public DataSource getDataSource() {ComboPooledDataSource dataSource = new ComboPooledDataSource();try {dataSource.setDriverClass("org.mariadb.jdbc.Driver");} catch (PropertyVetoException e) {e.printStackTrace();}dataSource.setJdbcUrl("jdbc:mariadb://localhost:3306/wbg_logistics");dataSource.setUser("root");dataSource.setPassword("123456");dataSource.setMaxPoolSize(30);return dataSource;}@Beanpublic JdbcTemplate jdbcTemplate() {JdbcTemplate jdbcTemplate = new JdbcTemplate();jdbcTemplate.setDataSource(getDataSource());return jdbcTemplate;}@Beanpublic PlatformTransactionManager platformTransactionManager() {DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(getDataSource());return transactionManager;}@BeanTransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager){return new TransactionTemplate(platformTransactionManager);}}
View Code
3、创建dao
当出错的时候,事务滚动,数据库数据不变
代码:
package com.wbg.sjt.service;import com.wbg.sjt.entity.Role; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionTemplate;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map;@Repository public class RoleDao {@AutowiredDataSource dataSource;@Autowiredprivate PlatformTransactionManager transactionManager = null;@Autowiredprivate TransactionTemplate transactionTemplate;;@Autowiredprivate JdbcOperations jdbcOperations;public Role getRole(){String sql = "select * from role where id = 1";Role role = jdbcOperations.queryForObject(sql,/*//方式一new RowMapper<Role>() {@Overridepublic Role mapRow(ResultSet rs, int rowNum) throws SQLException {return new Role(rs.getInt(1),rs.getString(2),rs.getString(3));}}*///方式二:(rs, rowNum) -> new Role(rs.getInt(1),rs.getString(2),rs.getString(3)));return role;}public void create() {transactionTemplate.execute(status -> {//让事务出错String sql = "insert into role(role_name,note) values(?,?)";String sql2 = "insert into role(role_namess,note) values(?,?)";jdbcOperations.update(sql, "sql", "aa");jdbcOperations.update(sql2, "sql", "aa");return null;});}//0代码实现public List<Role> listAll() {List<Role> list = new ArrayList<Role>();Connection connection = null;try {connection = dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}String sql = "select * from role";PreparedStatement preparedStatement = null;try {preparedStatement = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement.executeQuery();Role role = null;while (resultSet.next()) {role = new Role(resultSet.getInt(1),resultSet.getString(2),resultSet.getString(3));list.add(role);}} catch (SQLException e) {e.printStackTrace();} finally {try {if (connection != null)connection.close();if(preparedStatement != null)preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}return list;}public List<Map<String, Object>> getToList() {List<Map<String, Object>> list = jdbcOperations.queryForList("select * from role");return list;}public Map<String, Object> getToMap() {String sql = "select * from role where id = ?";Map<String, Object> map = jdbcOperations.queryForMap(sql, 1);return map;}public int insert(Role role) {Connection connection = null;DefaultTransactionDefinition dtd = new DefaultTransactionDefinition();dtd.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED);TransactionStatus ts = transactionManager.getTransaction(dtd);String sql = "insert into role(role_name,note) values(?,?)";PreparedStatement preparedStatement = null;try {connection = dataSource.getConnection();preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, role.getRoleName());preparedStatement.setString(2, role.getNote());preparedStatement.executeUpdate();transactionManager.commit(ts);} catch (SQLException e) {transactionManager.rollback(ts);System.out.println("原因:" + e.getMessage());}return 0;} }
View Code
测试:
package com.wbg; import com.wbg.sjt.config.JavaConfig; import com.wbg.sjt.service.RoleDao; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.util.Map;public class Main {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfig.class);RoleDao roleDao = applicationContext.getBean(RoleDao.class);System.out.println(roleDao.getRole());for (Map<String, Object> map : roleDao.getToList()) {System.out.println(map);}roleDao.create();System.out.println("----------------------");for (Map<String, Object> map : roleDao.getToList()) {System.out.println(map);}} }
View Code
demo:https://github.com/weibanggang/hibernatejpaJpaRepository.git
spring+jdbc+template+transaction实现相关推荐
- Spring JDBC Template
Spring为我们提供了JDBC的模板来连接数据库,Spring JDBC Template. 使用: 第一,导入相关的jar包 第二,要连接数据库首先要加载驱动,获得连接,然后才能进行相关的数据库操 ...
- Spring jdbc Template和Spring 事务管理
使用jdbcTemplate完成增删改查操作(重点) package com.it.jdbctemplate;import java.util.List;import org.junit.Test; ...
- Spring JDBC数据库连接池设置
对于任何Java应用程序而言, 在Spring框架中设置JDBC数据库连接池都是很容易的,仅需更改spring配置文件中的一些配置即可.使用Apache Commons DBCP和Commons Po ...
- Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
概述 功能简介 环境准备 构建工具Maven 数据库脚本Oracle 建立工程 类包及Spring配置文件规划 持久层 建立领域对象 用户领域对象 登录日志领域对象 UserDao LoginLogD ...
- jdbc Template 介绍和 spring 链接数据源的四种方式
为什么具体讲template介绍和spring jdbc链接数据源的几种方式放在一起介绍,在于你在使用template的时候,具体配置数据源,或者在链接配置数据源的时候要是使用template,就在在 ...
- Spring组件之一 JDBC Template
JDBC Template是基于JDBC的基础上产生的,所以在讲JDBC Template之前,先聊聊 JDBC ? 什么是JDBC ? JDBC(Java DataBase Connectivity ...
- java day30【数据库连接池 、Spring JDBC : JDBC Template】
第一章 数据库连接池 1. 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后 ...
- Spring JDBC-使用Spring JDBC访问数据库
概述 使用Spring JDBC 基本的数据操作 更改数据 返回数据库表的自增主键值 批量更改数据 查询数据 使用RowCallbackHandler处理结果集 使用RowMapperT处理结果集 R ...
- Spring JDBC的学习
文章目录 介绍 使用步骤 常用方法 示例代码 介绍 所谓 Spring JDBC,是 Spring 框架对 JDBC 的简单封装.提供了一个 JdbcTemplate 对象简化 JDBC 的开发. 使 ...
- JDBC笔记02-数据库连接池 Spring JDBC
今日内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 概念: 其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器被创建,容器中会申请一些连接 ...
最新文章
- 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
- python简单代码 春节集五福-新年福利来一波之Python轻松集齐五福(demo)
- 深度学习中常用的误差方法
- H. Fight Against Monsters
- bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法
- [ app.json 文件内容错误] app.json: [“usingComponents“][“van-button“]: “@vant/weapp/button/index“ 未找到
- 斯坦福大学2019年NLP课程上线,下周二开课 | 附PPT+视频
- javascript基础知识(13) Date
- 达芬奇剪辑调色软件:DaVinci Resolve Studio 17.3.2 for Mac中文版
- mysql为什么limit没用,MySQL是否可以使用LIMIT语法进行子查询?如果没有,为什么?...
- IT服务体系工具支撑
- 程序员之路:Gmail邮箱客户端配置
- 【sql】178. 分数排名---两种解决方法,是否使用group by分组成为重点,建议使用分组!!!
- Superset系列9- 制作地图
- 第四周.直播.03.论文带读+GAT
- Android返回键
- android低电量提示,Android P系统低电量提醒功能 根据使用情况判断充电时间
- 前后端分离电商B2C模式之_后端_商品评论功能
- 程序员专属段子集锦 8/10
- 摩拜再裁员:主要面对亚太地区
热门文章
- Gephi初识之简单绘图学习
- python实现猴子排序(Monkey_sort)闲聊睡眠排序
- linux进程状态a,Linux进程状态标识符含义
- C++ 传递指针给函数
- 【Django 2021年最新版教程36】 python django runserver 后台运行
- 单片机sleep函数的头文件_关于PIC单片机SLEEP指令
- modbus调试工具 linux,Modbus测试工具 :Modbus Poll,Modbus Slave
- idea2020配置
- ajax 详解(GET,POST方式传输以其封装)
- js 音乐播放器(audio属性及其使用方法)