今天内容介绍
1.基于aspectj的注解aop操作(会用)
(1) 使用注解操作方式实现aop操作
第一步:创建对象
第二步:在spring核心配置文件中,开启aop操作
第三步:在增强的类里面使用注解完成aop操作
2.spring的jdbcTemplate操作
1.spring框架一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用jdbcTemplate
2.Spring对不同的持久化技术都做了封装
(1)jdbcTemplate对jdbc进行了封装
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.queryForObject(String sql,Class<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)创建service和dao,配置service和dao对象,在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介绍
(1)spring针对不同的dao层框架,提供接口不同的实现表
(2)首先配置事务的管理器
搭建转账环境
1.创建数据库表,添加数据
转账,小王少一千,小马多一千
2.创建service和dao类,完成注入操作
(1)service层又叫业务逻辑层
(2)dao层,单纯的数据库操作层,在dao层不添加业务
(3)需求,小王转账1000给小马,
-小王少一千,小马多一千
3.产生问题:如果中途出现异常,一个少了一千,一个没有增加
4.解决问题
(1)添加一个事务,回滚
声明事务管理(xml配置)
1.配置文件方式使用aop思想
第一步:配置事务管理器
第二步:配置事务增强
第三步:配置切面
声明事务管理(注解)
第一步:配置事务管理器
第二步:配置事务注解
第三步:在要使用事务的方法所在类上面添加注解