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思想

第一步:配置事務管理器

 

第二步:配置事務增強

 

第三步:配置切面

 

聲明事務管理(注解)

第一步:配置事務管理器

 

第二步:配置事務注解

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM