持久化之JdbcTemplate

各种持久化方式的对比参见:https://blog.csdn.net/hello_world123456789/article/details/88659457

转自:https://liuyanzhao.com/5689.html

Spring中jdbcTemplate实现增删改查操作

1、 spring 框架一站式框架

(1)针对 javaee 三层,每一层都有解决技术

(2)在 dao 层,使用 jdbcTemplate

 

2、 spring 对不同的持久化层技术都进行封装

Spring中jdbcTemplate实现增删改查操作

(1)jdbcTemplate对jdbc进行封装

 

3 、jdbcTemplate 使用和 dbutils 使用很相似,都数据库进行 crud 操作

 

实现准备

1、导入 jar 包

(1)Spirng 基础包(不一定都需要)

Spring中jdbcTemplate实现增删改查操作

(2)jdbcTemplate 包

Spring中jdbcTemplate实现增删改查操作

(3)jdbc-mysql 驱动包

Spring中jdbcTemplate实现增删改查操作

2、新建数据库

(1)本地服务器 localhost,用户名 root,密码为空

(2)新建数据库 spring

(3)新建数据表 user,三个字段,分别是 id,username,password

 

 

增加,删除,修改

JdbcTemplateDemo1

  1. package com.liuyanzhao.jdbc;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.jdbc.core.RowMapper;
  6. import org.springframework.jdbc.datasource.DriverManagerDataSource;
  7.  
  8. import java.sql.*;
  9. import java.util.List;
  10.  
  11. public class JdbcTemplateDemo1 {
  12.     //1 添加操作
  13.     @Test
  14.     public void saveUser() {
  15.         //1、创建对象,设置数据库信息
  16.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  17.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  18.         dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring");
  19.         dataSource.setUsername("root");
  20.         dataSource.setPassword("");
  21.  
  22.         //2、创建jdbcTemplate对象,设置数据源
  23.         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  24.  
  25.         //3、调用jdbcTemplate对象里的方法实现操作
  26.         String sql = "insert into user values(?,?,?)";
  27.         int rows = jdbcTemplate.update(sql,1,"刘曌","123456");
  28.         System.out.println(rows);
  29.     }
  30.  
  31.     //2 更新操作
  32.     @Test
  33.     public void updateUser() {
  34.         //1、创建对象,设置数据库信息
  35.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  36.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  37.         dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring" +
  38.             "?useUnicode=true&characterEncoding=utf8");
  39.         dataSource.setUsername("root");
  40.         dataSource.setPassword("");
  41.  
  42.         //2、创建jdbcTemplate对象,设置数据源
  43.         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  44.  
  45.         //3、调用jdbcTemplate对象里的方法实现操作
  46.         String sql = "update user set username=?,password=? where id=?";
  47.         int rows = jdbcTemplate.update(sql,"刘言曌","666666",1);
  48.         System.out.println(rows);
  49.     }
  50.  
  51.     //3 删除操作
  52.     @Test
  53.     public void removeUser() {
  54.         //1、创建对象,设置数据库信息
  55.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  56.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  57.         dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring" +
  58.             "?useUnicode=true&characterEncoding=utf8");
  59.         dataSource.setUsername("root");
  60.         dataSource.setPassword("");
  61.  
  62.         //2、创建jdbcTemplate对象,设置数据源
  63.         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  64.  
  65.         //3、调用jdbcTemplate对象里的方法实现操作
  66.         String sql = "delete from user where id=?";
  67.         int rows = jdbcTemplate.update(sql,1);
  68.         System.out.println(rows);
  69.     }
  70.  
  71. }

查询

查询分为 “查询记录总数”,“查询单个记录”,“查询多个记录”

1、查询记录总数,返回一个整数

  1. // 4 查询表中有多少数据
  2. @Test
  3. public void countUser() {
  4.     //1、创建对象,设置数据库信息
  5.     DriverManagerDataSource dataSource = new DriverManagerDataSource();
  6.     dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  7.     dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring" +
  8.         "?useUnicode=true&characterEncoding=utf8");
  9.     dataSource.setUsername("root");
  10.     dataSource.setPassword("");
  11.  
  12.     //2、创建jdbcTemplate对象,设置数据源
  13.     JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  14.  
  15.     //3、调用方法得到记录数
  16.     String sql = "select count(*) from user";
  17.     int count = jdbcTemplate.queryForObject(sql,Integer.class);
  18.     System.out.println(count);
  19. }

2、查询单个对象,返回一个对象

(1)新建 user 实体类

  1. package com.liuyanzhao.jdbc;
  2.  
  3. public class User {
  4.     private int id;
  5.     private String username;
  6.     private String password;
  7.  
  8.     public int getId() {
  9.         return id;
  10.     }
  11.  
  12.     public String getUsername() {
  13.         return username;
  14.     }
  15.  
  16.     public String getPassword() {
  17.         return password;
  18.     }
  19.  
  20.     public void setId(int id) {
  21.         this.id = id;
  22.     }
  23.  
  24.     public void setUsername(String username) {
  25.         this.username = username;
  26.     }
  27.  
  28.     public void setPassword(String password) {
  29.         this.password = password;
  30.     }
  31.  
  32.     @Override
  33.     public String toString() {
  34.         return "User{" +
  35.             "id=" + id +
  36.             ", username='" + username + '\'' +
  37.             ", password='" + password + '\'' +
  38.             '}';
  39.     }
  40. }

(2)新建 MyRowMapper 类,我们可以把它放到 JdbcTemplateDemo1 类中

  1. class MyRowMapper implements RowMapper<User> {
  2.  
  3.     @Override
  4.     public User mapRow(ResultSet rs, int num) throws SQLException {
  5.         //从结果集中得到数据
  6.         int id = rs.getInt("id");
  7.         String username = rs.getString("username");
  8.         String password = rs.getString("password");
  9.  
  10.         //把得到的数据封装到对象里面
  11.         User user = new User();
  12.         user.setId(id);
  13.         user.setUsername(username);
  14.         user.setPassword(password);
  15.  
  16.         return user;
  17.     }
  18. }

(3)查询单条记录信息

  1. //5、查询返回对象
  2.     @Test
  3.     public void getUser() {
  4.         //1、创建对象,设置数据库信息
  5.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  6.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  7.         dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring" +
  8.             "?useUnicode=true&characterEncoding=utf8");
  9.         dataSource.setUsername("root");
  10.         dataSource.setPassword("");
  11.  
  12.         //2、创建jdbcTemplate对象,设置数据源
  13.         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  14.  
  15.         //调用方法得到对象
  16.         String sql = "select * from user where username=?";
  17.         User user = jdbcTemplate.queryForObject(sql,new MyRowMapper(),"刘言曌");
  18.         System.out.println(user);
  19.     }

3、查询多条记录,返回一个 list 集合

(1)同上

(2)同上

(3)查询多条记录信息

  1. //7、查询返回集合
  2.     @Test
  3.     public void listUser() {
  4.         //1、创建对象,设置数据库信息
  5.         DriverManagerDataSource dataSource = new DriverManagerDataSource();
  6.         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  7.         dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring" +
  8.             "?useUnicode=true&characterEncoding=utf8");
  9.         dataSource.setUsername("root");
  10.         dataSource.setPassword("");
  11.  
  12.         //2、创建jdbcTemplate对象,设置数据源
  13.         JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  14.  
  15.         //3、调用方法得到集合
  16.         String sql = "select * from user";
  17.         List<User> list = jdbcTemplate.query(sql,new MyRowMapper());
  18.         System.out.println(list);
  19.     }

 

补充

我们这里补充一下 原生的 JDBC 查询单条记录的代码,复习一下 JDBC,同时比较一下 Spring 的 jdbcTemplate 和 原生 JDBC 代码的区别

  1. //5、查询返回对象,原生JDBC代码
  2.     @Test
  3.     public void getUserByJDBC() throws SQLException {
  4.         final String URL = "jdbc:mysql://127.0.0.1:3306/spring?useUnicode=true&characterEncoding=utf8";
  5.         final String USERNAME = "root";
  6.         final String PASSWORD = "";
  7.  
  8.         Connection conn = null;
  9.         PreparedStatement ptmt = null;
  10.         ResultSet rs = null;
  11.         //加载驱动
  12.         try {
  13.             Class.forName("com.mysql.jdbc.Driver");
  14.             conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
  15.             String sql = "select * from user where username=?";
  16.             //预编译sql
  17.             ptmt = conn.prepareStatement(sql);
  18.             //设置参数值
  19.             ptmt.setString(1,"刘言曌");
  20.             //执行sql
  21.             rs = ptmt.executeQuery();
  22.             //遍历结果集
  23.             while (rs.next()) {
  24.                 //得到返回值
  25.                 int id = rs.getInt("id");
  26.                 String username = rs.getString("username");
  27.                 String password = rs.getString("password");
  28.                 //放到user对象中
  29.                 User user = new User();
  30.                 user.setId(id);
  31.                 user.setUsername(username);
  32.                 user.setPassword(password);
  33.  
  34.                 System.out.println(user);
  35.             }
  36.         } catch (ClassNotFoundException e) {
  37.             e.printStackTrace();
  38.         } finally {
  39.             //关闭连接
  40.             rs.close();
  41.             ptmt.close();
  42.             conn.close();
  43.         }
  44.     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值