Spring JdbcTemplate 簡(jiǎn)單總結(jié)

最近新接觸一個(gè)小的項(xiàng)目中用到了Spring JdbcTemplate框架,用起來(lái)感覺和DBUTILS差不多,仿制可能以后需要用到,因此記錄一下。

概念

JdbcTemplate 類執(zhí)行 SQL 查詢、更新語(yǔ)句和存儲(chǔ)過(guò)程調(diào)用,執(zhí)行迭代結(jié)果集和提取返回參數(shù)值。它也捕獲 JDBC 異常并轉(zhuǎn)換它們到 org.springframework.dao 包中定義的通用類、更多的信息、異常層次結(jié)構(gòu)。

JdbcTemplate 類的實(shí)例是線程安全配置的。所以你可以配置 JdbcTemplate 的單個(gè)實(shí)例,然后將這個(gè)共享的引用安全地注入到多個(gè) DAOs 中。

使用 JdbcTemplate 類時(shí)常見的做法是在你的 Spring 配置文件中配置數(shù)據(jù)源,然后共享數(shù)據(jù)源 bean 依賴注入到 DAO 類中,并在數(shù)據(jù)源的設(shè)值函數(shù)中創(chuàng)建了 JdbcTemplate。

執(zhí)行SQL 語(yǔ)句

在表中插入一行:

String SQL = "insert into Student (name, age) values (?, ?)";     
jdbcTemplateObject.update( SQL, name, age);
//jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

從表中刪除一行:

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

更新表中的一行:

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

查詢一個(gè)整數(shù)類型:

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

查詢一個(gè) long 類型:

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

一個(gè)使用綁定變量的簡(jiǎn)單查詢:

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

查詢字符串:

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

查詢并返回一個(gè)對(duì)象:

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(SQL, 
                  new Object[]{10}, new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }
}

查詢并返回多個(gè)對(duì)象:

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(SQL,
                         new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      return student;
   }
}

插入數(shù)據(jù),獲取自增組件的ID:

public int addStudent(final Student student){
    final String sql="insert into t_student(name,sex) values(?,?)";
    //創(chuàng)建一個(gè)主鍵持有者
    KeyHolder keyHolder=new GeneratedKeyHolder();
    jdbcTemplateObject.update(new PreparedStatementCreator(){
        public PreparedStatement createPreparedStatement(Conection con) throws SQLException{
            PreparedStatement preState=con.prepareStatement(sql);
            preState.setString(1,student.getName());
            preState.setString(2,student.getSex());
            return preState;
        }
    },keyHolder);
    //從主鍵持有者中獲得主鍵值
    return keyHolder.getKey().intValue();
}

批量插入數(shù)據(jù):

 public void testBatchUpdate() {  
        String sql = "INSERT INTO employees(last_name, email, dept_id) VALUES(?,?,?)";  
      
        List<Object[]> batchArgs = new ArrayList<>();  
        batchArgs.add(new Object[]{"AA", "aa@atguigu.com", 1});  
        batchArgs.add(new Object[]{"BB", "bb@atguigu.com", 2});  
        batchArgs.add(new Object[]{"CC", "cc@atguigu.com", 3});  
        batchArgs.add(new Object[]{"DD", "dd@atguigu.com", 3});  
        batchArgs.add(new Object[]{"EE", "ee@atguigu.com", 2});  
          
        jdbcTemplate.batchUpdate(sql, batchArgs);  
    }   
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,265評(píng)論 6 342
  • 聲明:我已委托「維權(quán)騎士」(rightknights.com)為我的文章進(jìn)行維權(quán)行動(dòng)。 這個(gè)《恐怖新娘》,是圣誕特...
    化物有生閱讀 1,805評(píng)論 0 0
  • 周未,休息。以前做淘寶都是沒有休息的,周未都是輪休,現(xiàn)在開始任性了,周未必須休息。因?yàn)榇蠹叶汲鋈ネ媪苏l(shuí)還在網(wǎng)上購(gòu)物...
    凡了閱讀 851評(píng)論 3 9
  • 警醒于光 1.說(shuō)出真相 “我是神及其力量的臨在,這一切都是我創(chuàng)造的,這不是真的,這是虛構(gòu)的全息幻象,這是我的意識(shí)創(chuàng)...
    火樹銀花1閱讀 622評(píng)論 0 0

友情鏈接更多精彩內(nèi)容