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

posted @ 2018-12-21 15:36 韦邦杠 阅读(...) 评论(...) 编辑 收藏

spring+jdbc+template+transaction实现相关推荐

  1. Spring JDBC Template

    Spring为我们提供了JDBC的模板来连接数据库,Spring JDBC Template. 使用: 第一,导入相关的jar包 第二,要连接数据库首先要加载驱动,获得连接,然后才能进行相关的数据库操 ...

  2. Spring jdbc Template和Spring 事务管理

    使用jdbcTemplate完成增删改查操作(重点) package com.it.jdbctemplate;import java.util.List;import org.junit.Test; ...

  3. Spring JDBC数据库连接池设置

    对于任何Java应用程序而言, 在Spring框架中设置JDBC数据库连接池都是很容易的,仅需更改spring配置文件中的一些配置即可.使用Apache Commons DBCP和Commons Po ...

  4. Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块

    概述 功能简介 环境准备 构建工具Maven 数据库脚本Oracle 建立工程 类包及Spring配置文件规划 持久层 建立领域对象 用户领域对象 登录日志领域对象 UserDao LoginLogD ...

  5. jdbc Template 介绍和 spring 链接数据源的四种方式

    为什么具体讲template介绍和spring jdbc链接数据源的几种方式放在一起介绍,在于你在使用template的时候,具体配置数据源,或者在链接配置数据源的时候要是使用template,就在在 ...

  6. Spring组件之一 JDBC Template

    JDBC Template是基于JDBC的基础上产生的,所以在讲JDBC Template之前,先聊聊 JDBC ? 什么是JDBC ? JDBC(Java DataBase Connectivity ...

  7. java day30【数据库连接池 、Spring JDBC : JDBC Template】

    第一章  数据库连接池 1. 概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后 ...

  8. Spring JDBC-使用Spring JDBC访问数据库

    概述 使用Spring JDBC 基本的数据操作 更改数据 返回数据库表的自增主键值 批量更改数据 查询数据 使用RowCallbackHandler处理结果集 使用RowMapperT处理结果集 R ...

  9. Spring JDBC的学习

    文章目录 介绍 使用步骤 常用方法 示例代码 介绍 所谓 Spring JDBC,是 Spring 框架对 JDBC 的简单封装.提供了一个 JdbcTemplate 对象简化 JDBC 的开发. 使 ...

  10. JDBC笔记02-数据库连接池 Spring JDBC

    今日内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 概念: 其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器被创建,容器中会申请一些连接 ...

最新文章

  1. 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
  2. python简单代码 春节集五福-新年福利来一波之Python轻松集齐五福(demo)
  3. 深度学习中常用的误差方法
  4. H. Fight Against Monsters
  5. bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法
  6. [ app.json 文件内容错误] app.json: [“usingComponents“][“van-button“]: “@vant/weapp/button/index“ 未找到
  7. 斯坦福大学2019年NLP课程上线,下周二开课 | 附PPT+视频
  8. javascript基础知识(13) Date
  9. 达芬奇剪辑调色软件:DaVinci Resolve Studio 17.3.2 for Mac中文版
  10. mysql为什么limit没用,MySQL是否可以使用LIMIT语法进行子查询?如果没有,为什么?...
  11. IT服务体系工具支撑
  12. 程序员之路:Gmail邮箱客户端配置
  13. 【sql】178. 分数排名---两种解决方法,是否使用group by分组成为重点,建议使用分组!!!
  14. Superset系列9- 制作地图
  15. 第四周.直播.03.论文带读+GAT
  16. Android返回键
  17. android低电量提示,Android P系统低电量提醒功能 根据使用情况判断充电时间
  18. 前后端分离电商B2C模式之_后端_商品评论功能
  19. 程序员专属段子集锦 8/10
  20. 摩拜再裁员:主要面对亚太地区

热门文章

  1. Gephi初识之简单绘图学习
  2. python实现猴子排序(Monkey_sort)闲聊睡眠排序
  3. linux进程状态a,Linux进程状态标识符含义
  4. C++ 传递指针给函数
  5. 【Django 2021年最新版教程36】 python django runserver 后台运行
  6. 单片机sleep函数的头文件_关于PIC单片机SLEEP指令
  7. modbus调试工具 linux,Modbus测试工具 :Modbus Poll,Modbus Slave
  8. idea2020配置
  9. ajax 详解(GET,POST方式传输以其封装)
  10. js 音乐播放器(audio属性及其使用方法)