今天內容介紹
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思想
第一步:配置事務管理器
第二步:配置事務增強
第三步:配置切面
聲明事務管理(注解)
第一步:配置事務管理器
第二步:配置事務注解
第三步:在要使用事務的方法所在類上面添加注解