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项目

    • 加入如下依赖

      ② 具体编码

    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 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<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));
​
    }
}

                
  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot可以通过JdbcTemplate或者Spring Data JPA来查询MySQL数据库。 1. 使用JdbcTemplate JdbcTemplate是Spring框架提供的一个用于简化JDBC操作的工具类。使用JdbcTemplate查询MySQL数据库的步骤如下: 1)在pom.xml文件中添加MySQL驱动依赖: ``` <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8..23</version> </dependency> ``` 2)在application.properties文件中配置MySQL数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3)在Java代码中使用JdbcTemplate查询MySQL数据库: ``` @Autowired private JdbcTemplate jdbcTemplate; public List<User> getUsers() { String sql = "SELECT * FROM user"; List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); return users; } ``` 2. 使用Spring Data JPA Spring Data JPA是Spring框架提供的一个用于简化JPA操作的工具类。使用Spring Data JPA查询MySQL数据库的步骤如下: 1)在pom.xml文件中添加Spring Data JPA和MySQL驱动依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8..23</version> </dependency> ``` 2)在application.properties文件中配置MySQL数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true ``` 3)定义实体类和Repository接口: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; @Column(name = "age") private Integer age; // 省略getter和setter方法 } @Repository public interface UserRepository extends JpaRepository<User, Long> { } ``` 4)在Java代码中使用Repository查询MySQL数据库: ``` @Autowired private UserRepository userRepository; public List<User> getUsers() { List<User> users = userRepository.findAll(); return users; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值