博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jdbc模板、事务管理
阅读量:6257 次
发布时间:2019-06-22

本文共 3837 字,大约阅读时间需要 12 分钟。

第一步用maven引入jdbc模板:注意引入的是Spring jdbc模板

第二步创建DataSource对象bena(用的话直接调用就行了)

懂就行了 jdbc模板查询巨麻烦mybatis好一点

更新语句用了Spring为我节省了好多操作例如:Connection、PreparedStatement、ResultSet等等操作

他这里是封装了jdbc操作

开始jdbc模板需要的jar:

c3p0数据源

spring-jdbc、spring的jdbc架包

Spring的环境架包

Xml配置

创建数据源对象:

08f1e3fc90a476efce0ca7bf54450e0e9088ae4d

想要开启事务管理第一步需要配置事务管理主键:

8a80611d1a7430500b143fa6b444bb37769747ca

e989c0808f3148ac29ef27caf99e88f0d186ae2b

在类中操作用到的注解:

14407e97c90266d1bbf5071cf8c6ca117583834c

如果想开启事务的话就在方法中写个@Transactional注解,也可以将这个注解写在类上面变成全局的

在org.springframework.transaction.annotation.Transactional这个包下

dc8806952b094ba99f9fd8ad7c9723e3fc5832c0

package com.sun.spring;import org.aspectj.lang.annotation.Around;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Component;import javax.sql.DataSource;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;@Componentpublic class UserDao extends JdbcTemplate {    @Autowired    public void setDataSource(DataSource dataSource) {        super.setDataSource(dataSource);    }    public void insert(String sname, String address) {        update("insert into student(sname,address) values (?,?)", sname, address);    }    public void update1(String sname, String address, int sid) {        update("update student set sname=?,address=? where sid=?", sname, address, sid);    }    ;    public List
select1() {//需要创建数据库表向对应的对象,返回的是对象 List
studentList = this.query("select*from student", new RowMapper
() { @Override public Student mapRow(ResultSet resultSet, int i) throws SQLException { Student student = new Student(); student.setSname(resultSet.getString("sname")); student.setAddress(resultSet.getString("address")); student.setSid(resultSet.getInt("sid")); student.setCid(resultSet.getString("cid")); return student; } }); return studentList; }}
Spring事务管理:

          如果没有开启事务的话,sql语句就不在一个事物当中

d280039b83c4fa73b941ef031a2d9c61113d6823

 Spring中七种Propagation类的事务属性详解: 

@Transactional(propagation = (在这里选择)Propagation.REQUIRES_NEW)

 REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 

 SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 

 MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 

 REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。 

 NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 

 NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 

 NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。

//这个方法每个方法都是独立的事务//这个切面是切的StudentDao类他会在每个方法的前后都加开启和提交//每个方法都是单独的事务@Component()@Transactionalpublic class StudentDao extends JdbcTemplate {    @Autowired    public void SetDataSource(DataSource dataSource) {        super.setDataSource(dataSource);    }//这两个方法用的是一个事物即使其中一个事物失败另一个也会提交数据(之所以会这样因为他动态代理了在每个方法前后都做了开始方法后都做了提交)//这个操作并不是很好,所以就需要一个管理事务类    @Transactional      public void insert1 (){        update("insert into student(sname,address) values (?,?)", "小李子", "东莞");    }    @Transactional    public void insert2() {        update("insert into student(name,address) values (?,?)", "小李子", "东莞");    }}

所以需要一个单独的类来管理事务,将事务管理在一个方法中,执行方法前开启事务,方法后关闭事务

业务逻辑处理类

 

可以控制事务回滚:不是所有异常都要回滚,有可能你密码错了,要进行录入

事务使用面向切面,代理模式来做个 方法前要执行那些(开启事务) 方法后是否发生异常(发生回滚,未发生提交)

@Componentpublic class StudentDaoService {    @Autowired    private StudentDao studentDao;//直接通过注释将对象赋值给他    @Transactional()    //isolation事务隔离级别    //timeout超时只要在规定时间没有执行完就会报错    //@Transactional(在各个当中选择你的需要)    //readOnly只读模式只能读不能修改数据,在这个方法中不能插入任何数据,调用别人的方法修改数据也不行(只要修改就不行)    //可以指定多个异常类    //noRollbackFor这里声明报发生哪些异常事务不用回滚,这里一般指的是业务需要要不用回滚的    //rollbackFor发生哪些异常类需要回滚    public void insert() {        studentDao.insert1();        studentDao.insert2();        //这里还是会报错误,但是可以对数据库进行操作,这里将事务提交了        String s = null;        //假如这个是密码的话,这是密码错误        s.toCharArray();    }}

转载地址:http://ignsa.baihongyu.com/

你可能感兴趣的文章
信息检索Reading List
查看>>
JavaWeb_JavaEE_命名规则
查看>>
申小雨命案审理延期至3月5日 警方将翻译嫌犯口供
查看>>
自动精简配置&重复数据删除核心技术点及其经济效应探究
查看>>
cncert网络安全周报35期 境内被植入后门的政府网站112个 环比上涨24.4%
查看>>
物联网到底是不是泡沫,且看英特尔交出的答案
查看>>
IPv6太落后了:中国加速服务器援建
查看>>
安防大数据应用国家工程实验室在乌鲁木齐成立
查看>>
物理引擎中velocity的单位是个什么鬼?
查看>>
[译] 全新 Android 注入器 : Dagger 2 (二)
查看>>
为什么要评审代码?
查看>>
小程序开发前的准备工作之【深入封装Component】
查看>>
AFN3.0源码解析
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
Python正则表达式指南
查看>>
使用css3制作渐变分割线
查看>>
垃圾回收概念与算法
查看>>
IconFont 图标svg
查看>>
TFS实现需求工作项自动级联保存
查看>>