`

JdbcTemplate的使用

 
阅读更多

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使用.doc

    JdbcTemplate使用就是JdbcTemplate的使用 再说两遍JdbcTemplate使用就JdbcTemplate的使用 20字够了

    配制Spring事务和JdbcTemplate使用

    配制Spring事务和JdbcTemplate使用 配制Spring事务和JdbcTemplate使用

    Spring:JdbcTemplate使用指南

    **Spring JdbcTemplate 使用指南** Spring框架中的JdbcTemplate是数据库操作的核心组件之一,它提供了一种简单、安全的方式来执行SQL查询和更新,而无需手动管理数据库连接。本指南将深入探讨JdbcTemplate的用法,...

    pring中的jdbc访问类JdbcTemplate使用共

    pring中的jdbc访问类JdbcTemplate使用共1页.pdf.zip

    jdbcTemplate分页彻底解决,使用游标滚动

    总结起来,使用JdbcTemplate的游标滚动技术,我们可以实现高效、低内存消耗的分页,这对于处理大量数据的系统来说至关重要。同时,这种方式也使得代码更加灵活,能够适应各种数据库的差异,提高了程序的可移植性。

    使用Spring的JdbcTemplate实现分页功能

    使用Spring的JdbcTemplate实现分页功能

    spring内置jdbctemplate使用demo

    在 Spring 中使用 `JdbcTemplate` 需要以下几个步骤: 1. **配置数据源**:Spring 通过数据源(DataSource)与数据库建立连接。在这个例子中,我们将使用 c3p0 数据源。c3p0 是一个开源的 JDBC 连接池,它可以提供...

    Spring框架中jdbcTemplate 的使用.doc

    Spring框架中jdbcTemplate 的使用

    jdbcTemplate使用方法实例解析

    jdbcTemplate使用方法实例解析 jdbcTemplate是一个基于Spring JDBC抽象框架的核心类,提供了大量实用的方法来简化数据库操作。在本文中,我们将详细介绍jdbcTemplate的使用方法实例解析,以及其在实际开发中的应用...

    Spring JdbcTemplate 常用方法整理

    `JdbcUtils.java`可能是提供了一些数据库连接和JdbcTemplate使用的辅助方法,如数据库连接池的配置,或者封装了JdbcTemplate的执行方法,以提高代码复用性。例如: ```java public class JdbcUtils { private ...

    使用Spring JDBCTemplate进行增删改查curd操作

    JdbcTemplate使用PreparedStatement来执行SQL,自动防止SQL注入攻击,因为它会正确地转义参数值。 7. 错误处理 如果数据库操作失败,JdbcTemplate会抛出异常,如`DataAccessException`,使得我们可以快速定位并处理...

    spring-jdbc-4.2.4.RELEASE.jar,spring-tx-4.2.4.RELEASE.jar,jdbcTemplate使用的jar包

    通过使用`JdbcTemplate`,开发者可以编写出更简洁、更健壮的数据库访问代码,因为它会自动处理资源关闭、异常转换等细节。 `SimpleJdbcTemplate`是`JdbcTemplate`的一个简化版本,提供了一种更方便的构造函数来初始...

    spring自带的jdbcTemplate查询、插入预编译使用

    本篇文章将详细讲解`jdbcTemplate`的预编译使用,以及如何通过回调方法进行定制化的数据处理。 首先,`jdbcTemplate`的核心功能是通过预编译的SQL语句(PreparedStatement)来执行数据库操作。预编译SQL可以有效...

    打印JdbcTemplate执行sql

    这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试和性能分析非常有帮助。接下来,我们将深入探讨`JdbcTemplate`的工作原理以及如何实现SQL...

    SpringBoot&nbsp;&nbsp;jdbctemplate使用方法解析

    首先,要使用JdbcTemplate,我们需要在SpringBoot项目中引入相关的依赖。这里使用了阿里巴巴的Druid数据源(com.alibaba.druid-spring-boot-starter)以及MySQL的驱动(mysql-connector-java)。Druid是一个优秀的...

    SpringJdbcTemplate封装工具类

    例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...

    使用Spring的JdbcTemplate调用Oracle的存储过程

    使用Spring的JdbcTemplate调用Oracle的存储过程

    spring-jdbcTemplate实例工程

    在这个实例工程中,我们将深入探讨Spring JdbcTemplate的基本使用、优势以及常见操作。 一、Spring JdbcTemplate简介 Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行...

    spring JdbcTemplate query方法使用示例

    spring JdbcTemplate query方法使用示例,欢迎下载借鉴

Global site tag (gtag.js) - Google Analytics