JdbcTemplate的使用
JdbcTemplate和NamedParameterJdbcTemplate
package com.hous.test; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.junit.Ignore; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import com.alibaba.fastjson.JSON; import com.hous.bean.UserInfo; import com.hous.respository.UserInfoDao; public class JdbcTest { private ClassPathXmlApplicationContext ctx; private JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; private UserInfoDao userInfoDao; { ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate"); namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate"); userInfoDao = (UserInfoDao) ctx.getBean("userInfoDao"); } @Test public void testUserInfoDao() { UserInfo userInfo = userInfoDao.get("105005"); System.out.println(userInfo); } /** * 执行INSET,UPDATE,DELETE */ @Test @Ignore public void testUpdate() throws SQLException { String sql = "UPDATE userinfo SET email=? WHERE userid=?"; jdbcTemplate.update(sql, "abc@125.com", "105002"); } /** * 执行INSET,UPDATE,DELETE,使用具名参数 */ @Test public void testNamedParameterJdbcTemplate() throws SQLException { String sql = "INSERT INTO userinfo(userid, NAME, PASSWORD, email) VALUES(:userid,:name,:password,:email)"; Map<String, Object> params = new HashMap<>(); params.put("userid", "105055"); params.put("name", "王五"); params.put("password", "555"); params.put("email", "555@126.com"); int result = namedParameterJdbcTemplate.update(sql, params); System.out.println(result); } /** * 执行INSET,UPDATE,DELETE,使用具名参数,传入对象 * 1)sql参数名和对象属性一直 */ @Test public void testNamedParameterJdbcTemplate2() throws SQLException { String sql = "INSERT INTO userinfo(userid, NAME, PASSWORD, email) VALUES(:userid,:name,:password,:email)"; UserInfo userInfo = new UserInfo(); userInfo.setUserid("105066"); userInfo.setName("赵六"); userInfo.setPassword("666"); userInfo.setEmail("666@126.com"); SqlParameterSource paramSource = new BeanPropertySqlParameterSource(userInfo); int result = namedParameterJdbcTemplate.update(sql, paramSource); System.out.println(result); } /** * 执行批量更新:批量的INSET,UPDATE,DELETE * 修改一条记录需要一个Object数组,多天记录就需要多个Object数组 */ @Test public void testBatchUpdate() { String sql = "INSERT INTO userinfo(userid, NAME, PASSWORD, email) VALUES(?,?,?,?)"; List<Object[]> batchArgs = new ArrayList<>(); batchArgs.add(new Object[]{"105077", "小七", "777", "777@126.com"}); batchArgs.add(new Object[]{"105088", "小七", "888", "888@126.com"}); batchArgs.add(new Object[]{"105099", "小七", "999", "999@126.com"}); jdbcTemplate.batchUpdate(sql, batchArgs); } /** * 从数据库中查询一条记录,返回bean对象 * 1)rowMapper为映射的结果行 * 2)sql中列名要和属性名映射如user_id * 3)不支持级联的属性查询 */ @Test@Ignore public void testQueryForObject(){ String sql = "SELECT userid, NAME, PASSWORD, email, role FROM userinfo WHERE userid=?"; RowMapper<UserInfo> rowMapper = new BeanPropertyRowMapper<>(UserInfo.class); UserInfo userInfo = jdbcTemplate.queryForObject(sql, rowMapper, "105002"); System.out.println(userInfo.toString()); } /** * 获取单个列的值或统计方法 */ @Test@Ignore public void testQueryForObject2(){ String sql = "SELECT count(*) FROM userinfo"; Long count = jdbcTemplate.queryForObject(sql, Long.class); System.out.println(count); } /** * 查询实体类的集合 */ @Test@Ignore public void testQueryForList(){ String sql = "SELECT userid, NAME, PASSWORD, email, role FROM userinfo WHERE userid like '%11'"; RowMapper<UserInfo> rowMapper = new BeanPropertyRowMapper<>(UserInfo.class); List<UserInfo> userInfos = jdbcTemplate.query(sql, rowMapper); System.out.println(userInfos.toString()); } @Test@Ignore public void testDataSource() throws SQLException { DataSource dataSource = ctx.getBean(DataSource.class); System.out.println(dataSource.getConnection()); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <context:property-placeholder location="db.properties" /> <context:component-scan base-package="com.hous" /> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 配置spring的jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置namedParemeterJdbcTemplate,该对象可以使用具名构造参数,其没有无参构造器,必须为构造器指定参数 --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource"></constructor-arg> </bean> </beans>
相关推荐
首先,要使用`JdbcTemplate`,我们需要添加Spring的支持。这通常意味着在项目中引入Spring的相关库,比如`spring-jdbc.jar`,并且在项目配置中声明Spring的依赖管理。这可以通过Maven或Gradle等构建工具完成。 接...
配制Spring事务和JdbcTemplate使用 配制Spring事务和JdbcTemplate使用
**Spring JdbcTemplate 使用指南** Spring框架中的JdbcTemplate是数据库操作的核心组件之一,它提供了一种简单、安全的方式来执行SQL查询和更新,而无需手动管理数据库连接。本指南将深入探讨JdbcTemplate的用法,...
以下是对JdbcTemplate使用的一些详细说明: 1. **创建表和执行SQL语句**: JdbcTemplate的`execute()`方法可以用来执行任意的SQL语句,包括DDL(数据定义语言)如创建表。在示例中,`execute()`方法被用来创建名为...
本文将深入探讨如何使用`JdbcTemplate`配合游标滚动来解决分页问题,并结合提供的两个文件`JdbcTemplateExtend.java`和`SplitPageResultSetExtractor.java`进行讲解。 首先,我们需要理解什么是游标滚动。在数据库...
使用Spring的JdbcTemplate实现分页功能
在 Spring 中使用 `JdbcTemplate` 需要以下几个步骤: 1. **配置数据源**:Spring 通过数据源(DataSource)与数据库建立连接。在这个例子中,我们将使用 c3p0 数据源。c3p0 是一个开源的 JDBC 连接池,它可以提供...
使用JdbcTemplate可以使得代码更加简洁,更易于测试和维护。 2. **JdbcTemplate的依赖注入** 在Spring配置文件中,我们需要定义一个JdbcTemplate bean,并注入DataSource。DataSource是数据库连接池的实例,负责...
jdbcTemplate使用方法实例解析 jdbcTemplate是一个基于Spring JDBC抽象框架的核心类,提供了大量实用的方法来简化数据库操作。在本文中,我们将详细介绍jdbcTemplate的使用方法实例解析,以及其在实际开发中的应用...
`JdbcUtils.java`可能是提供了一些数据库连接和JdbcTemplate使用的辅助方法,如数据库连接池的配置,或者封装了JdbcTemplate的执行方法,以提高代码复用性。例如: ```java public class JdbcUtils { private ...
在这个场景中,我们将详细探讨如何使用`JdbcTemplate`进行批量插入和删除操作。 批量插入操作在数据库处理大量数据时非常常见,它可以显著提高性能,因为数据库通常会优化批量处理,而不是单独处理每一项。在提供的...
JdbcTemplate使用PreparedStatement来执行SQL,自动防止SQL注入攻击,因为它会正确地转义参数值。 7. 错误处理 如果数据库操作失败,JdbcTemplate会抛出异常,如`DataAccessException`,使得我们可以快速定位并处理...
通过使用`JdbcTemplate`,开发者可以编写出更简洁、更健壮的数据库访问代码,因为它会自动处理资源关闭、异常转换等细节。 `SimpleJdbcTemplate`是`JdbcTemplate`的一个简化版本,提供了一种更方便的构造函数来初始...
本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 首先,`jdbcTemplate`的核心功能是通过预编译的SQL语句(PreparedStatement)来执行数据库操作。预编译SQL可以有效...
在本教程中,我们将深入探讨如何在Spring Boot项目中配置和使用多数据源以及JdbcTemplate。 首先,让我们了解什么是`JdbcTemplate`。它是Spring提供的一种模板类,用于执行SQL语句,通过回调机制将结果转换为Java...
使用JdbcTemplate的基本步骤如下: 1. **配置数据源(DataSource)**:通常我们会使用连接池如DruidDataSource来管理数据库连接。这需要引入相关依赖并配置数据源的相关属性。 2. **创建JdbcTemplate实例**:通过...
这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试和性能分析非常有帮助。接下来,我们将深入探讨`JdbcTemplate`的工作原理以及如何实现SQL...
首先,要使用JdbcTemplate,我们需要在SpringBoot项目中引入相关的依赖。这里使用了阿里巴巴的Druid数据源(com.alibaba.druid-spring-boot-starter)以及MySQL的驱动(mysql-connector-java)。Druid是一个优秀的...
例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...