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

it2022-05-09  35

今天内容介绍

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)