Spring 全家桶之 Spring Framework 5.3(六)- JdbcTemplate(下)

简介: Spring 全家桶之 Spring Framework 5.3(六)- JdbcTemplate

批量插入数据

增加测试方法

@Test
public void testBatchInsert(){
    String batchInsertSql = "insert  into `porsche`(`name`,`price`) values (?,?)";
    // List的长度就是sql要执行的次数,每一个数组表示每一次执行用到的参数
    List<Object[]> batchData = new ArrayList<>();
    batchData.add(new Object[]{"918 Spyder",13380000});
    batchData.add(new Object[]{"Cayman",720000});
    batchData.add(new Object[]{"Boxster",670000});
    batchData.add(new Object[]{"Carrera GT",6450000});
    int[] countList = jdbcTemplate.batchUpdate(batchInsertSql, batchData);
    System.out.println("Affected rows:" + Arrays.toString(countList));
}
复制代码

执行测试方法,四条SQL插入语句全部执行成功

a615785dbf004a6283fff864a6e31646_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

将查询到的单条记录转换成Java对象

首先新建一个entity包,并增加一个实体类Porsche,属性与数据库字段一致,如果字段名不一致可以使用别名来保持一致

public class Porsche {
    private Integer id;
    private String name;
    private Double price;
    // 此处省略getter/setter/toString方法
}
复制代码

增加测试方法

@Test
public void testFindOneTransfer2JavaBean(){
    String findOneSql = "SELECT porsche_id id, name, price FROM porsche WHERE porsche_id=?";
    // RowMapper,定义每一行记录和Java Bean如何映射
    RowMapper rowMapper = new BeanPropertyRowMapper(Porsche.class);
    Porsche taycan = (Porsche) jdbcTemplate.queryForObject(findOneSql, rowMapper, 4);
    System.out.println(taycan);
}
复制代码

要注意的点:

image.png

执行测试,成功输出JavaBean

image.png

如果查询不到记录就会报错,可以使用try catch来包裹

将查询到的多条记录封装成List

增加测试方法

@Test
public void testFindListTransfer2ArrayList(){
    String findListSql = "SELECT porsche_id id, name, price FROM porsche WHERE price >=?";
    // 要使用List形式的rowMapper
    RowMapper rowMapper = new BeanPropertyRowMapper<>(Porsche.class);
    List<Porsche> porsches = jdbcTemplate.query(findListSql, rowMapper, 500000);
    System.out.println(porsches);
}
复制代码

执行测试

image.png

查询price最大的一条记录

增加测试方法

@Test
public void testFindMaxPrice(){
    String findMaxPriceSql = "SELECT MAX(price) FROM porsche";
    // 基本数据类型的包装类可以直接使用包装类的class,自定义的类需要new BeanPropertyRowMapper
    Double maxPrice = jdbcTemplate.queryForObject(findMaxPriceSql, Double.class);
    System.out.println(maxPrice);
}
复制代码

执行测试方法

image.png

具名参数的SQL语句插入数据,多个参数以Map传递

由于使用❓作为占位符必须要保持参数的顺序,因此可以使用变量名代替SQL语句参数中的占位符,使用具名参数要使用到NamedParameterJdbcTemplate

xml中配置一个NamedParameterJdbcTemplate

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
</bean>
复制代码

增加测试方法

@Test
public void insertByNamedParameter(){
    String insertSqlNamedParameter = "INSERT INTO porsche(name,price) VALUES(:name,:price)";
    Map namedParameter = new HashMap<>();
    namedParameter.put("name","Taycan Tubo S");
    namedParameter.put("price",880000);
    int count = namedParameterJdbcTemplate.update(insertSqlNamedParameter, namedParameter);
    System.out.println("Affected rows:" + count);
}
复制代码

执行测试

image.png

以sqlParameter形式传递参数插入数据

增加测试方法

@Test
public void insertByJavaBeanParameter(){
    String insertSqlByJavaBeanParameter = "INSERT INTO porsche(name,price) VALUES(:name,:price)";
    Porsche porsche = new Porsche();
    porsche.setName("Taycan 2023");
    porsche.setPrice(880000.0);
    BeanPropertySqlParameterSource beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(porsche);
    int count = namedParameterJdbcTemplate.update(insertSqlByJavaBeanParameter, beanPropertySqlParameterSource);
    System.out.println("Affected rows:" + count);
}
复制代码

执行测试

image.png

至此,Spring JdbcTemplate模块完结🎉


相关文章
|
6月前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
670 6
|
3月前
|
SQL 数据库
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
这篇文章是Spring5框架的实战教程,深入讲解了如何使用JdbcTemplate进行数据库的批量操作,包括批量添加、批量修改和批量删除的具体代码实现和测试过程,并通过完整的项目案例展示了如何在实际开发中应用这些技术。
Spring5入门到实战------13、使用JdbcTemplate操作数据库(批量增删改)。具体代码+讲解 【下篇】
|
3月前
|
XML 数据库 数据格式
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
这篇文章是Spring5框架的实战教程的终结篇,介绍了如何使用注解而非XML配置文件来实现JdbcTemplate的数据库操作,包括增删改查和批量操作,通过创建配置类来注入数据库连接池和JdbcTemplate对象,并展示了完全注解开发形式的项目结构和代码实现。
Spring5入门到实战------14、完全注解开发形式 ----JdbcTemplate操作数据库(增删改查、批量增删改)。具体代码+讲解 【终结篇】
|
3月前
|
SQL XML Java
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
这篇文章是Spring5框架的实战教程,详细讲解了如何使用JdbcTemplate进行数据库的增删改查操作,包括在项目中引入依赖、配置数据库连接池、创建实体类、定义DAO接口及其实现,并提供了具体的代码示例和测试结果,最后还提供了完整的XML配置文件和测试代码。
Spring5入门到实战------12、使用JdbcTemplate操作数据库(增删改查)。具体代码+讲解 【上篇】
|
3月前
|
安全 Java 网络安全
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
|
5月前
|
前端开发 Java 调度
Spring Webflux 是 Spring Framework 提供的响应式编程支持
Spring Webflux 是 Spring Framework 提供的响应式编程支持
79 2
|
4月前
|
Cloud Native Java 开发者
深入解析Spring Framework的核心设计原理
深入解析Spring Framework的核心设计原理
|
4月前
|
安全 Java Apache
如何安装与使用Spring Boot 2.2.x、Spring Framework 5.2.x与Apache Shiro 1.7进行高效开发
【7月更文第1天】在现代Java Web开发领域,Spring Boot以其简化配置、快速开发的特点备受青睐。结合Spring Framework的成熟与Apache Shiro的强大权限控制能力,我们可以轻松构建安全且高效的Web应用。本篇文章将指导你如何安装并使用Spring Boot 2.2.x、Spring Framework 5.2.x以及Apache Shiro 1.7来构建一个具备基础权限管理功能的项目。
79 0
|
5月前
|
SQL Java 数据库连接
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
35 0
|
6月前
|
设计模式 Java 数据库连接
Spring Framework 6 中的设计模式
Spring Framework 6 中的设计模式
43 1
下一篇
无影云桌面