JDBCTemplate和MySQL连接技术详解(上)

本文介绍了JavaJDBC的基本概念,包括如何通过原生代码进行数据库操作,以及Spring框架下的JDBCTemplate如何简化操作。重点讲解了RowMapper和BeanPropertyRowMapper在结果集映射中的应用。
摘要由CSDN通过智能技术生成

入门

(一) 简介

  • JDBC概念:

    💡JDBC(Java DataBase Connectivity) :Java数据库连接技术:具体讲就是通过Java连接数据库,并通过发送SQL,实现对表中数据执行增、删、改、查等操作的技术。
    在这里插入图片描述

(二)JDBC原始编程(了解)

前文提到,JDBC操作数据库达到的效果和navicat这种可视化工具类似,都是可以发送指令实现增删改查,所以其操作步骤也无太大差异
在这里插入图片描述

  • 原生JDBC代码示例(了解,观看即可)
public class JDBCTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        
        //2 获取连接
        String username = "root";//用户名
        String password = "root";//密码
        /*
            url参数用来确定连接的数据库信息: 数据库机器ip 端口号port 数据库名db_name 连接的参数,比如编解码集、时区...
            url格式:jdbc:mysql://ip:port/db_name?k=v参数 ,只需要了解url的组成,不需要记忆
        */
        String url = "jdbc:mysql://localhost:3306/baizhi?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, username, password);//通过DriverManager管理驱动获取连接
        
        //3 准备发送SQL的工具
        String sql = "select * from t_person";
        PreparedStatement pstm = conn.prepareStatement(sql);
        
        //4 发送执行SQL
        ResultSet rs = pstm.executeQuery();
        
        //5 处理结果集(如果有)
        while(rs.next()){
            /*
                rs.getXxx(列顺序从1开始) 或者 rs.getXxx("列名") 获取指定列的数据,Xxx为数据类型
                实战中多使用列名,可读性强
             */
            int personId1 = rs.getInt("person_id");
            String personName1 = rs.getString("person_name");
            int age1 = rs.getInt("age");
            String sex1 = rs.getString("sex");
            String mobile1 = rs.getString("mobile");
            String address1 = rs.getString("address");
            System.out.println("personId="+personId1+",personName="+personName1
                    +",age="+age1+",sex="+sex1+",mobile="+mobile1+",address="+address1);

            int personId2 = rs.getInt(1);
            String personName2 = rs.getString(2);
            int age2 = rs.getInt(3);
            String sex2 = rs.getString(4);
            String mobile2 = rs.getString(5);
            String address2 = rs.getString(6);
            System.out.println("personId="+personId2+",personName="+personName2
                    +",age="+age2+",sex="+sex2+",mobile="+mobile2+",address="+address2);
        }
        
        //6 释放资源(反序关闭:后出现先关闭)
        rs.close();
        pstm.close();
        conn.close();
    }
}

总结:书写非常繁琐

  • JDBCTemplate

    💡JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JDBC如同是毛坯房,而JdbcTemplate类似于精装房,使用JdbcTemplate会比原生JDBC更简单舒适一些。

(三)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项目

    • 加入如下依赖

      在这里插入图片描述

      ② 具体编码

    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进行别名定义。

在这里插入图片描述

1. RowMapper

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

语法:

  • ① 定义一个类
class Java{
  1. 类名与对应表名相关
  2. 一个属性对应一个字段
  3. 属性类型必须与字段类型一致
  4. 属性名必须与字段名相关
    - 字段名只由一部分组成,属性名保持一致  age--age
    - 字段名由多个部分组成,属性名采用小驼峰命名  person_id--personId
  5. 进行正常封装
  6. 提供有参无参的构造
  7. 数据类型声明为引用类型 
}
  • ② 映射查询结果
List<Java> personList = jdbcTemplate.query("查询的SQL语句", new RowMapper<Java>() {
    /**
      功能:作为JdbcTemplate,将查询结果的每个字段映射为一个ORM对象的属性的实现。
      执行时机:查询结果的每条数据的映射,都会调用一次mapRow方法。
      参数:
        ResultSet:结果集,封装了MySQL返回的查询结果。可以看作是之前MySQL客户端返回的行结果。
        rowNum:当前映射的行,在整体本次查询结果的行号。
    */
    @Override
    public JavamapRow(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<Person> list=jdbcTemplate.query(sql, new RowMapper<Person>() {
            /**
             * 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类的属性名要变成驼峰命名法

如图:
在这里插入图片描述

语法:

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<Person> list=jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Person.class));
        //查看集合数据
        System.out.println("查询结果为:");
        list.forEach(person -> System.out.println(person));

    }
}

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要使用JdbcTemplate连接MySQL数据库,您需要进行以下步骤: 1. 确保您的项目中已添加了相关的依赖。对于Spring Boot项目,可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 在您的应用程序配置文件中,配置数据库连接信息。例如,在application.properties文件中,添加以下内容: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 请将"your_database_name"替换为您要连接的数据库名称,"your_username"和"your_password"分别替换为您的数据库用户名和密码。 3. 创建一个JdbcTemplate bean。您可以在Spring Boot的配置类或任何其他适当的地方创建它。以下是一个示例: ```java @Configuration public class JdbcConfig { @Autowired private DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } } ``` 这将使用上述配置中的数据源创建一个JdbcTemplate实例。 现在,您可以在应用程序中使用JdbcTemplate来执行数据库操作了。例如,您可以使用它执行SQL查询、插入、更新等操作。 希望这能帮到您!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值