MySQL 数据库 JDBC 简化 JDBCTemplate

JDBCTemplate编程

场景:使用JdbcTemplate技术向MySQL中插入一条数据

  • 表结构如下

create table t_person(
    person_id int primary key auto_increment,
    person_name varchar(20),
    age tinyint,
    sex  enum('男','女','奥特曼'),
    height  decimal(4,1),
    birthday  datetime
)
  1. API介绍

    API 含义
    Connection 数据库连接 作为Java程序向MySQL发送SQL和返回结果数据的网络连接
    DataSource 连接池 Connection的管理者,内部有多个Connection,可以重复使用,免去了销毁和创建Connection所消耗的时间和CPU资源,可以提高性能。
    JdbcTemplate 封装了JDBC的操作代码,相当于MySQL的客户端,可以发送SQL语句。
    resultSet 结果集 里面封装了MySQL数据库返回的查询结果。
  2. 编程思路

    1. 创建连接池DataSource
    2. 创建JdbcTemplate对象
    3. 发送SQL
  3. 编码实现

    ① 准备工作

    • 使用IDEA创建一个的java项目

    • 加入如下依赖

      MySQL 数据库 JDBC 简化 JDBCTemplate_第1张图片

      ② 具体编码

    package com.xx.test;
    ​
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    ​
    import javax.sql.DataSource;
    ​
    public class InsertTest {
        public static void main(String[] args) {
           // 1. 创建数据库连接池(可以辅助我们获取连接管理连接)
            //连接路径: 连接途径:数据库类型://ip:port/数据库名?k=v&k=v(编码集&时区)
            String url = "jdbc:mysql://localhost:3306/xx2304?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
            String username = "root";
            String password = "root";
            DataSource dataSource=new DriverManagerDataSource(url,username,password);
           // 2. 创建JDBCTemplate (创建操作数据库的工具)
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
           // 3. 书写SQL
            String sql = "insert into t_person(person_name,age) values('lisi',20)";
           // 4. 发送执行SQL
            int n = jdbcTemplate.update(sql);
           // 5. 处理结果
            if (n == 1) {
                //如果受影响行数为1,证明操作成功
                System.out.println("添加成功!");
            } else {
                System.out.println("添加失败");
            }
        }
    }

二 结果集处理

场景:查询t_person表中的数据,并逐条地将每个字段输出在控制台。

ResultSet说明:

# 注意:
1. ResultSet表示的是查询结果,其数据已经是MySQL返回,并保存在Java程序中的。
2. ResultSet查询结果的列名,不是原表列名,而是select查询结果列名,可以由as进行别名定义。
​

MySQL 数据库 JDBC 简化 JDBCTemplate_第2张图片

1. RowMapper

功能: 用来把SQL查询结果集ResultSet,映射(转化)为Java对象,便于java程序的后续数据管理和处理。

语法:

  • ① 定义一个类

class Java类{
  1. 类名与对应表名相关
  2. 一个属性对应一个字段
  3. 属性类型必须与字段类型一致
  4. 属性名必须与字段名相关
    - 字段名只由一部分组成,属性名保持一致  age--age
    - 字段名由多个部分组成,属性名采用小驼峰命名  person_id--personId
  5. 进行正常封装
  6. 提供有参无参的构造
  7. 数据类型声明为引用类型 
}
  • ② 映射查询结果

List personList = jdbcTemplate.query("查询的SQL语句", new RowMapper() {
    /**
      功能:作为JdbcTemplate,将查询结果的每个字段映射为一个ORM对象的属性的实现。
      执行时机:查询结果的每条数据的映射,都会调用一次mapRow方法。
      参数:
        ResultSet:结果集,封装了MySQL返回的查询结果。可以看作是之前MySQL客户端返回的行结果。
        rowNum:当前映射的行,在整体本次查询结果的行号。
    */
    @Override
    public Java类 mapRow(ResultSet rs, int rowNum) throws SQLException {
        //获取当前行数据
        rs.getXxxx("查询结果列名");
        rs.getString("");
        rs.getInt("");
        rs.getDouble("");
        // 将结果封装成Java对象,并返回。
        
    }
});

示例代码:

  • ① 定义一个类

package com.xx.entity;
​
import java.util.Date;
​
/**
 * 对应t_person表
 */
public class Person {
    private Integer personId;
    private String personName;
    private Integer age;
    private String sex;
    private Double height;
    private Date birthday;
​
    //省略getter、setter、有参构造、无参构造
​
}
  • ② 映射查询结果

package com.xx.test;
​
import com.xx.entity.Person;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
​
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
​
/**
 * 需求:查询person表的所有数据
 */
public class SelectTest {
    public static void main(String[] args) {
        //创建数据库连接池
        String url = "jdbc:mysql://localhost:3306/xx2304?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        DataSource dataSource = new DriverManagerDataSource(url, username, password);
        //创建JDBCTemplate
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //书写SQL
        String sql = "select * from t_person";
        //发送SQL处理结果
        List list=jdbcTemplate.query(sql, new RowMapper() {
            /**
             * RowMapper:更改当前操作的行号-->按照我们书写的代码处理结果集指定行的内容-->将返回的对象添加进集合
             *
             * @param rs 结果集 存放着所有的查询数据
             * @param i 当前被处理的行号  RowMapper执行时自动使用,无需手动处理
             * @return 本行数据对应的对象
             * @throws SQLException
             */
            @Override
            public Person mapRow(ResultSet rs, int i) throws SQLException {
                //获取字段值
                Integer personId = rs.getInt("person_id");
                String personName = rs.getString("person_name");
                Integer age = rs.getInt("age");
                String sex = rs.getString("sex");
                Double height = rs.getDouble("height");
                Date birthday = rs.getDate("birthday");
                //组装当前行的Person对象
                Person p = new Person(personId, personName, age, sex, height, birthday);
                return p;
            }
        });
        //查看集合数据
        System.out.println("查询结果为:");
        list.forEach(person -> System.out.println(person));
    }
}
2. BeanPropertyRowMapper

JdbcTemplate还提供了内置的BeanPropertyRowMapper,简化查询结果和实体类对象的转换RowMapper的操作。

要求:

1. 如果查询结果(select后的字段名)的字段由一个单词构成,则Java类的属性名要和列名一致。
2. 如果查询结果(select后的字段名)的字段由n个单词构成,则Java类的属性名要变成驼峰命名法
​

如图:

MySQL 数据库 JDBC 简化 JDBCTemplate_第3张图片

语法:

jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(与查询结果对应的Java类.class));

编码:

package com.xx.test;
​
import com.xx.entity.Person;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
​
import javax.sql.DataSource;
import java.util.List;
​
/**
 * 需求:查询person表的所有数据-BeanPropertyRowMapper
 */
public class SelectTest_2 {
    public static void main(String[] args) {
        //创建数据库连接池
        String url = "jdbc:mysql://localhost:3306/xx2304?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        DataSource dataSource = new DriverManagerDataSource(url, username, password);
        //创建JDBCTemplate
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //书写SQL
        String sql = "select * from t_person";
        //发送SQL处理结果
        List list=jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Person.class));
        //查看集合数据
        System.out.println("查询结果为:");
        list.forEach(person -> System.out.println(person));
​
    }
}
 
 

你可能感兴趣的:(MySQL,数据库,mysql)