JdbcTemplate 是 Spring 框架提供的一个用于简化 JDBC 操作的类。它处理了资源的创建和释放,使得开发者能够更专注于 SQL 语句本身和结果的处理。JdbcTemplate 提供了大量的方法,用于执行各种类型的 SQL 语句,包括查询、更新、批处理、调用存储过程等。
- 导入jar包
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>-->
如果导入了mybatis-plus-boot-starter,在该包内也包括spring-boot-starter-jdbc,所以我可以注释.
2. 查询
@Test
void testJdbcTemplate(@Autowired JdbcTemplate jdbcTemplate) {
String sql = "select * from tbl_book where id =3";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
System.out.println("哈哈" + maps);
}
- 实体类
package com.atheima.domain;
import lombok.Data;
@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}
- 查询方法2
@Test
void testJdbcTemplate(@Autowired JdbcTemplate jdbcTemplate) {
String sql = "select * from tbl_book where id =3";
/* List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
System.out.println("哈哈" + maps);*/
RowMapper<Book> rm = new RowMapper<Book>() {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book = new Book();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setType(rs.getString("type"));
book.setDescription(rs.getString("description"));
return book;
}
};
List<Book> queryList = jdbcTemplate.query(sql, rm);
System.out.println(queryList);
}
RowMapper是Spring JDBC模板中用于将数据库查询结果集的每一行数据映射到用户自定义的Java对象的一个接口。它大大简化了JDBC操作,使得开发者可以将更多的精力放在业务逻辑上,而不是繁琐的数据转换上。
RowMapper是一个接口,它包含一个mapRow方法,该方法的签名如下:
Object mapRow(ResultSet rs, int rowNum) throws SQLException;
ResultSet rs:当前行的数据。
int rowNum:当前行的行号(从1开始)。
返回值:一个Java对象,表示当前行的数据。
使用JdbcTemplate的query方法执行SQL查询,并将查询结果集传递给UserRowMapper进行处理。最终,方法返回一个包含所有用户信息的List
- 注意事项
1.确保Java对象的属性名与数据库表的列名相匹配,或者提供自定义的映射规则。
如果数据库列名和Java对象属性名之间存在不匹配的情况,可以使用SQL查询中的别名来解决。
- 确保Java对象具有无参构造函数,因为RowMapper会使用它来创建对象实例。
- 确保Java对象的属性具有公共的getter和setter方法,因为RowMapper会使用它们来访问和设置属性值。