spring(三)数据库操作事务的注解形式

今天内容介绍

1.基于aspectj的注解aop操作(会用)

1) 使用注解操作方式实现aop操作

第一步:创建对象

 

第二步:在spring核心配置文件中,开启aop操作

 

第三步:在增强的类里面使用注解完成aop操作

 

2.spring的jdbcTemplate操作

1.spring框架一站式框架

1)针对javaee三层,每一层都有解决技术

2)在dao层,使用jdbcTemplate

2.Spring对不同的持久化技术都做了封装

 

1jdbcTemplatejdbc进行了封装

 

3. jdbcTemplate使用和dbutils使用很相似,都是数据库进行crud操作

 

1)实现crud操作

第一步:导入jar

 

第二步:创建对象,设置数据库信息

第三步:创建jdbcTemplate对象,设置数据源

第四步:调用jdbcTemplate对象里面的方法实现操作

增加操作:

 


public void add() { // 第二步:创建对象,设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///hibernate"); dataSource.setUsername("root"); dataSource.setPassword("1234"); // 第三步:创建jdbcTemplate对象,设置数据源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // 第四步:调用jdbcTemplate对象里面的方法实现操作 String sql = "insert into test values(?,?,?)"; int row = jdbcTemplate.update(sql, 3, "jieke", "253"); System.out.println("行号:" + row); }

 

修改:

public void update() {
        // 第二步:创建对象,设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///hibernate");
        dataSource.setUsername("root");
        dataSource.setPassword("1234");

        // 第三步:创建jdbcTemplate对象,设置数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 第四步:调用jdbcTemplate对象里面的方法实现操作
        String sql = "update test set password=? where uid=?";
        int row = jdbcTemplate.update(sql, "455", 1);
        System.out.println("行号:" + row);
    }

 删除:

public void delete() {
        // 第二步:创建对象,设置数据库信息
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///hibernate");
        dataSource.setUsername("root");
        dataSource.setPassword("1234");
        // 第三步:创建jdbcTemplate对象,设置数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        // 第四步:调用jdbcTemplate对象里面的方法实现操作
        String sql = "delete from test where uid=?";
        int row = jdbcTemplate.update(sql, 1);
        System.out.println("行号:" + row);
    }

查询(重点)

1.使用jdbc

QueryRunner runner=new QueryRunner(datasource);
//返回对象
runner.query(sql,new BeanHandler<User>(User.class));
//返回list集合
runner.query(sql,new BeanListHandler<User>(User.class))
// 在dbutils时候,有接口ResultSetHandler

//dbutils提供了针对不同的结果实现类
//2,在jdbcTemplate实现查询,有接口RowMapper
//jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装

 

2.查询的具体实现

第一个 查询返回某一个值

1.queryForObjectString sqlClass<T>required

原始JDBC代码:

public void testJDBC() {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
// 创建连接
conn = (Connection) DriverManager.getConnection("jdbc:mysql:///hibernate","root","1234");
String sql = "select * from test where username=?";
 
psmt = (PreparedStatement) conn.prepareStatement(sql);
psmt.setString(1, "rose");
rs = psmt.executeQuery();
// 遍历结果集 while (rs.next()) { String username = rs.getString("username"); String password = rs.getString("password"); User user=new User(); user.setUsername(username); user.setPassword(password); System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); psmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

 

第二个 查询返回某一个对象

 

第一个接口是SQL语句,

第二个接口是RowMapper,是一个接口,类似于dbutils里面接口

 

第三个参数是一个可变参数,这里的MyRowMapper要自己写

class MyRowMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int num) throws SQLException {
    // 1.从结果集里面把数据得到
    String username = rs.getString("username");
    String password = rs.getString("password");

    // 2.把得到的数据封装到对象里面
    User user = new User();
    user.setUsername(username);
    user.setPassword(password);
    return user;
    }
}

第三个 查询返回某一个集合

 

spring配置连接池

配置c3p0连接池

第一步:导入jar

 

第二步 创建spring的配置文件,配置连接池

 

jdbcTemplate里面注入dataSource属性值

 

2.dao使用jdbcTemplate

1)创建servicedao,配置servicedao对象,在service注入dao对象

 

2)创建jdbcTemplate对象,把模板对象注入到dao里面去

 

3)在jdbcTemplate里面注入DataSource属性,因为源代码里面有这个dataSource

 

spring事务管理

事务概念

1.什么事务

2.事务特性

3.不考虑隔离性产生读问题

多个事务之间不会产生影响

4.解决读问题

1)设置隔离级别

 

spring事务管理api

1.spring事务管理两种方式

第一种:编程式事务管理(不用)

第二种:声明式事务管理

1)基于xml配置文件实现

2)基于注解实现

2.spring事务管理api介绍

 

1spring针对不同的dao层框架,提供接口不同的实现表

 

 

2)首先配置事务的管理器

 

搭建转账环境

1.创建数据库表,添加数据

 

转账,小王少一千,小马多一千

2.创建servicedao类,完成注入操作

 

1service层又叫业务逻辑层

2dao层,单纯的数据库操作层,在dao层不添加业务

 

3)需求,小王转账1000给小马,

-小王少一千,小马多一千

 

3.产生问题:如果中途出现异常,一个少了一千,一个没有增加

4.解决问题

1)添加一个事务,回滚

 

声明事务管理(xml配置)

1.配置文件方式使用aop思想

第一步:配置事务管理器

 

第二步:配置事务增强

 

第三步:配置切面

 

声明事务管理(注解)

第一步:配置事务管理器

 

第二步:配置事务注解

 

第三步:在要使用事务的方法所在类上面添加注解

 

 

转载于:https://www.cnblogs.com/yq12138/p/7210242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值