简介
JdbcTemplate是Spring框架中的一个模块,用于简化数据库操作。它提供了一种简单而强大的方式来执行SQL查询、更新和存储过程调用,并处理结果集。
-
常用方法
public int update(String sql, Object... args)
参数说明:
sql:要执行的SQL语句,可以是任何更新数据库的SQL语句,如INSERT、UPDATE、DELETE等。
args:可变参数,用于指定SQL语句中的参数值。即:指定占位符
返回值:
返回一个int类型的值,表示受影响的行数。
方法说明:
该方法用于执行SQL语句来进行 增删改操作
可以通过占位符(?)来指定SQL语句中的参数值,然后将实际的参数值作为args参数传入。
该方法会返回更新操作所影响的行数,可以用于判断更新操作是否成功。
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
参数说明:
rowMapper:用于将查询结果集中的每行数据映射到Java对象的接口。
返回值:
返回一个T类型的对象,表示查询结果。
方法说明:
该方法用于执行SQL查询语句,并返回单个结果对象。
rowMapper参数指定了如何将查询结果映射为Java对象,通常是通过实现RowMapper接口的自定义类
可以通过占位符(?)来指定SQL语句中的参数值,然后将实际的参数值作为args参数传入。
public <T> T queryForObject(String sql, Class<T> requiredType, Object... args)
参数说明:
requiredType:要返回的结果的类型。
返回值:
返回一个T类型的对象,表示查询结果。
方法说明:
该方法用于执行SQL查询语句,并返回单个结果对象。
requiredType参数指定了要返回的结果的类型,可以是基本数据类型、包装类、String、自定义的Java对象等。
可以通过占位符(?)来指定SQL语句中的参数值,然后将实际的参数值作为args参数传入。
public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
返回值:
返回一个包含T类型对象的List,表示查询结果集。
方法说明:
该方法用于执行SQL查询语句,并使用提供的RowMapper将结果集中的每行数据映射为Java对象。
rowMapper参数指定了如何将查询结果映射为Java对象,通常是通过实现RowMapper接口的自定义类。
可以通过占位符(?)来指定SQL语句中的参数值,然后将实际的参数值作为args参数传入。 -
RowMapper
RowMapper<T> 接口是Spring框架中用于将查询结果集中的每一行数据映射为一个对象的接口。它是JdbcTemplate类中query方法的参数之一,用于将查询结果集中的每一行数据映射为指定类型的对象。
RowMapper<T> 接口中只有一个方法:
T mapRow(ResultSet rs, int rowNum) throws SQLException;
rs代表查询结果集中的一行数据,以通过rs对象获取当前行中的各个列的数据,比如通过getInt、getString等方法获取对应列的数据。
rowNum代表当前行的行号。BeanPropertyRowMapper<T>是Spring框架中的一个用于将查询结果映射为JavaBean对象的类。它实现了RowMapper<T>接口,可以将查询结果中的每一行数据映射为指定类型的JavaBean对象。
BeanPropertyRowMapper<T>使用Java的反射机制来自动将查询结果的列与JavaBean对象的属性进行匹配,从而省去了手动设置属性的繁琐工作。
使用例子:jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
具体使用
1、搭建环境
引入依赖
<dependencies>
<!--spring jdbc Spring 持久化层支持jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.2</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>
配置数据库数据
database.driver = com.mysql.cj.jdbc.Driver
database.url = jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&useSSL=false
database.username = root
database.password = 1234
spring配置文件信息
<!-- 导入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置数据库连接池 -->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>
<!-- 配置 JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 配置数据源 -->
<property name="dataSource" ref="druidDataSource" />
</bean>
2、增删改查操作
//插入操作
@Test
public void insertEmp01(){
String sql = "insert into t_emp values(null,?,?,?)";
int result = jdbcTemplate.update(sql, "张三", "20", "男");
System.out.println("插入成功:" + result);
}
//更新数据
@Test
public void updateEmp01(){
String sql = "update t_emp set name=? where id=?";
int result = jdbcTemplate.update(sql, "zhangsan", 3);
System.out.println("插入成功:" + result);
}
//删除数据
@Test
public void deleteEmp01(){
String sql = "delete from t_emp where id=?";
int result = jdbcTemplate.update(sql, 3);
System.out.println("插入成功:" + result);
}
//查询一条数据
//使用 RowMapper<T> 接口
@Test
public void queryEmp01(){
String sql = "select * from t_emp where id=?";
Emp emp = jdbcTemplate.queryForObject(sql, (rs, rowNum) -> {
Emp emp01 = new Emp();
emp01.setId(rs.getInt("id"));
emp01.setAge(rs.getInt("age"));
emp01.setName(rs.getString("name"));
emp01.setSex(rs.getString("sex"));
return emp01;
}, 4);
System.out.println(emp);
}
//查询一条数据
//使用 BeanPropertyRowMapper<T> 类
@Test
public void queryEmp02(){
String sql = "select * from t_emp where id=?";
Emp emp = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Emp.class), 4);
System.out.println(emp);
}
//查询多条数据
@Test
public void queryEmp03(){
String sql = "select * from t_emp";
List<Emp> emps = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Emp.class));
System.out.println(emps);
}
//查询单个数据
@Test
public void queryCount01(){
String sql = "select count(1) from t_emp";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}
原文始发于微信公众号(代码之旅):JdbcTemplate基本使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/203672.html