Spring JDBC

  Spring 框架是对 JDBC 的简单封装,提供了一个 JDBCTemplate 对象简化 JDBC 的开发。

  步骤

    1、导入 jar 包

        

    2、创建 JDBCTemplate 对象,依赖于数据源 DataSource。

      数据池之数据源创建。

JdbcTemplate template = new JdbcTemplate(ds);

    3、调用 JdbcTemplate 的方法来完成 CRUD 操作

  常用方法:

1、update():执行DML语句。增、删、改语句。
2、queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合,(注意:这个方法查询的结果集长度只能是1)
3、queryForList():查询结果将结果集封装为list集合(注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中)
4、query():查询结果,将结果封装成 JavaBean 对象,
  query的参数:RowMapper
         ① 创建一个匿名内部类 RowMapper,重写里面的方法
         ② 一般使用 BeanPropertyRowMapper 实现类,可以完成数据到 JavaBean 的自动封装
           new BeanPropertyRowMapper<类型>(类型.class)
5、queryForObject():查询结果,将结果封装成对象,一般用于聚合函数的查询

  案例:

      在bookstores 数据库中有一个book表,表结构和记录如下:

    

    需求

    (1)修改1号数据的 num 为10;

    (2)添加一条记录;

    (3)删除刚刚添加的记录;

    (4)查询 id 为1的记录,将其封装为 Map 集合;

    (5)查询所有记录,将其封装为 List;

    (6)查询所有记录,将其封装为 Emp对象的 List 集合;

    (7)查询总记录数。

    代码实现:

 import cn.ks.beans.Book;
import cn.ks.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map; public class JdbcTemplateDemo { //1获取JDBCTemplate 对象
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); /*
* 1、修改1号数据的 num 为10;
*/
@Test
public void test1() { // 2 定义SQL
String sql = "update book set num=10 where id=1";
// 3 执行SQL
int count = template.update(sql); System.out.println(count); } /*
* 2 添加一条记录;
*/
@Test
public void test2() {
String sql = "insert into book values(?,?,?,?,?)";
int count = template.update(sql, null, "红楼梦", 3, 33.0, 6);
System.out.println(count);
} /*
* 3、删除刚刚添加的记录;
*/
@Test
public void test3() {
String sql = "delete from book where id=?";
int count = template.update(sql, 3);
System.out.println(count);
} /*
* 4、查询 id 为1的记录,将其封装为 Map 集合;
* 注意,这个方法查询的结果长度只能是1
*/
@Test
public void test4() {
// String sql = "select * from book where id=? or id=?";
// Map<String, Object> map = template.queryForMap(sql, 1, 2);
String sql = "select * from book where id=?";
Map<String, Object> map = template.queryForMap(sql, 1);
System.out.println(map);
//{id=1, name=西游记, kind=1, price=22.0, num=5}
} /*
5、查询所有记录,将其封装为 List;
*/
@Test
public void test5() {
String sql = "select * from book";
List<Map<String, Object>> list = template.queryForList(sql); for (Map<String,Object> item : list) {
System.out.println(item);
}
} /*
6、查询所有记录,将其封装为 Emp对象的 List 集合;
*/
@Test
public void test6() {
String sql = "select * from book";
List<Book> list = template.query(sql, new RowMapper<Book>() { //匿名内部类
@Override
public Book mapRow(ResultSet resultSet, int i) throws SQLException {
Book book = new Book();
book.setId(resultSet.getInt("id"));
book.setName(resultSet.getString("name"));
book.setKind(resultSet.getString("kind"));
book.setPrice(resultSet.getDouble("price"));
book.setNum(resultSet.getInt("num")); return book;
}
}); for (Book book : list) {
System.out.println(book);
}
} /*
6、查询所有记录,将其封装为 Emp对象的 List 集合;
*/
@Test
public void test7() {
String sql = "select * from book";
List<Book> list = template.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
for (Book book : list) {
System.out.println(book);
}
} /*
* 7、查询总记录数。
*/
@Test
public void test8() {
String sql = "select count(id) from book";
Long aLong = template.queryForObject(sql, Long.class);
System.out.println(aLong);
}
}

    

最新文章

  1. innodb 自增列重复值问题
  2. centos7最小安装后常常需要添加的命令
  3. Apache Thrift 环境配置
  4. go特性学习
  5. [转]js动态获取图片长宽尺寸
  6. Eclipse CDT 代码高亮配置
  7. Shell学习笔记 - 循环语句
  8. 重燃你的PHP安全分析之火
  9. Apache开启Gzip压缩设置(转)
  10. 使用PowerDesigner画ER图详细教程
  11. 网络编程4之UDP协议
  12. ftp上传文件,本地安装了,服务器上也需要在也安装一个ftp
  13. 今天俺要说一说简单工厂模式(Simple Factory)
  14. AOJ1370: Hidden Anagrams(hash)
  15. 小程序的wx.onAccelerometerChange
  16. Android: 网络随时需要在3G和Wifi切换,网络程序需要注意
  17. PAT 1032 挖掘机技术哪家强(20)(有测试样例)
  18. python初步学习-python模块之 commands
  19. Java并发(四)多线程开销
  20. Linux下source文件两种方法

热门文章

  1. 子查询优化 - Hyper
  2. Centos7安装PHP、安装MySQL、安装apache
  3. 解决electron-vue中无法Element的Tooltip组件
  4. 解决Electron安装包下载慢的问题
  5. (转载)Universal Correspondence Network
  6. 【解决篇】映美FP-530K+打印发票卡纸,色带安装问题
  7. [LeetCode] 459. Repeated Substring Pattern 重复子字符串模式
  8. redis密码配置
  9. laravel相关知识点
  10. Python代码编码规范