JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

JdbcTemplate提供的接口测试:

第一步:导入包

a)导入mysql驱动包

b)导入spring包

b)导入C3P0依赖包:

第二步:新建spring配置文件(applicationContext.xml):

<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 自动扫描的包 -->
<context:component-scan base-package="com.dx.jdbc"></context:component-scan> <!-- 配置C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.dirverClass}"></property> <property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
</bean> <!-- 配置Spring 的 JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>

db.properties资源配置文件:

jdbc.user=root
jdbc.password=123456
jdbc.jdbcUrl=jdbc:mysql://localhost/test_spring_jdbc
jdbc.dirverClass=com.mysql.jdbc.Driver jdbc.initialPoolSize=5
jdbc.maxPoolSize=50
jdbc.minPoolSize=3

第三步:新建测试类:

Department.java

package com.dx.jdbc;

public class Department {
private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Department [id=" + id + ", name=" + name + "]";
} }

Employee.java

package com.dx.jdbc;

public class Employee {
private Integer id;
private String username;
private Department department; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Department getDepartment() {
return department;
} public void setDepartment(Department department) {
this.department = department;
} @Override
public String toString() {
return "Employee [id=" + id + ", username=" + username + ", department=" + department + "]";
} }

JdbcTemplateTest.java测试类

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList; import javax.sql.DataSource; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; public class JdbcTemplateTest {
static ApplicationContext ctx = null;
static DataSource dataSource = null;
static JdbcTemplate jdbcTemplate = null; static {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
dataSource = (DataSource) ctx.getBean("dataSource"); try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
e.printStackTrace();
} jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
} public static void main(String[] args) throws SQLException {
// testCreate();
// testUpdate();
// getEntity();
// getList();
// testQueryForObject();
} private static void testQueryForObject() {
String sql = "select count(id) from employee";
long count = jdbcTemplate.queryForObject(sql, Long.class);
System.out.println(count);
} private static void getList() {
String sql = "select id,username,depart_id from employee where id>?";
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
List<Employee> employees = jdbcTemplate.query(sql, rowMapper, 1); System.out.println(employees);
} /**
* 注意dpartment不能级联查询,原因:jdbcTemplate是一个小工具,不是ORM框架。
*/
private static void getEntity() {
String sql = "select id,username,depart_id from employee where id=?";
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
Employee employee = jdbcTemplate.queryForObject(sql, rowMapper, 1); System.out.println(employee);
} private static void testCreate() {
String sql = "insert into department(id,name)values(?,?)";
List<Object[]> batchArgs = new ArrayList<Object[]>();
batchArgs.add(new Object[] { 1, "软件开发部" });
batchArgs.add(new Object[] { 2, "财务部" });
batchArgs.add(new Object[] { 3, "人力资源部" });
batchArgs.add(new Object[] { 4, "企业文化部" });
batchArgs.add(new Object[] { 5, "市场部" }); jdbcTemplate.batchUpdate(sql, batchArgs); sql = "insert into employee(id,username,depart_id)values(?,?,?)";
batchArgs = new ArrayList<Object[]>();
batchArgs.add(new Object[] { 1, "张三", 1 });
batchArgs.add(new Object[] { 2, "李四", 1 });
batchArgs.add(new Object[] { 3, "王五", 2 });
batchArgs.add(new Object[] { 4, "马六", 4 });
batchArgs.add(new Object[] { 5, "小七", 5 }); jdbcTemplate.batchUpdate(sql, batchArgs);
} /**
* 修改
*/
private static void testUpdate() {
String sql = "update department set name=? where id=? ";
jdbcTemplate.update(sql, "开发部", 1);
}
}

开发中应用:

应用一:Dao类注入jdbcTemplate

package com.dx.jdbc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; @Repository
public class EmployeeDao {
@Autowired
private JdbcTemplate jdbcTemplate; /**
* 根据id获取employee实体
*
* @param id
* employee id信息
*/
public Employee get(Integer id) {
String sql = "select id,username,depart_id from employee where id=?";
RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
Employee employee = jdbcTemplate.queryForObject(sql, rowMapper, id); return employee;
}
}

调用测试:

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList; import javax.sql.DataSource; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; public class JdbcTemplateTest {
static ApplicationContext ctx = null;
static EmployeeDao employeeDao = null; static {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
employeeDao = (EmployeeDao) ctx.getBean("employeeDao");
} public static void main(String[] args) throws SQLException {
testDao();
} private static void testDao() {
System.out.println(employeeDao.get(1));
}
}

应用二:Dao类依赖JdbcDaoSupport

package com.dx.jdbc;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository; @Repository
public class DepartmentDao extends JdbcDaoSupport {
@Autowired
public void setDataSource2(DataSource dataSource) {
setDataSource(dataSource);
} /**
* 根据id获取department实体
*
* @param id
* department id信息
*/
public Department get(Integer id) {
String sql = "select id,name from department where id=?";
RowMapper<Department> rowMapper = new BeanPropertyRowMapper<>(Department.class);
Department department = getJdbcTemplate().queryForObject(sql, rowMapper, id); return department;
}
}

调用测试:

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList; import javax.sql.DataSource; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; public class JdbcTemplateTest {
static ApplicationContext ctx = null;
static DepartmentDao departmentDao = null; static {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); departmentDao = (DepartmentDao) ctx.getBean("departmentDao");
} public static void main(String[] args) throws SQLException {
testDaoSupport();
} private static void testDaoSupport() {
System.out.println(departmentDao.get(1));
}
}

NamedParameterJdbcTemplate具名参数操作对象:

使用如下:

package com.dx.jdbc;

import java.util.List;
import java.util.Map;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap; import javax.sql.DataSource; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource; public class JdbcTemplateTest {
static ApplicationContext ctx = null;
static NamedParameterJdbcTemplate namedParameterJdbcTemplate = null; static {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");
} public static void main(String[] args) throws SQLException {
testInsert();
testInsertModel();
} private static void testInsertModel() {
String sql = "insert into department(id,name)values(:id,:name)";
Department department = new Department();
department.setId(100);
department.setName("name100");
SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(department); namedParameterJdbcTemplate.update(sql, parameterSource);
} private static void testInsert() {
String sql = "insert into department(id,name)values(:id,:name)";
Map<String, String> paramMap = new HashMap<>();
paramMap.put("id", "99");
paramMap.put("name", "name99");
namedParameterJdbcTemplate.update(sql, paramMap);
}
}

Spring(二十一):Spring JdbcTemplate、NamedParameterJdbcTemplate具名参数的更多相关文章

  1. Java开发学习(二十一)----Spring事务简介与事务角色解析

    一.Spring事务简介 1.1 相关概念介绍 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 数据层有事务我们可以理解 ...

  2. Spring学习(十一)-----Spring使用@Required注解依赖检查

    Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...

  3. (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)

    在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...

  4. 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数

    在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...

  5. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. spring使用JdbcTemplate和jdbcDaosupport及具名参数使用

    关于jdbctemplate: 个人感觉比Java链接mysql那一套方便好维护多了,只需在配置文件维护即可 需要的包: com.springsource.net.sf.cglib-2.2.0.jar ...

  7. Spring 具名参数NamedParameterJdbcTemplate

    具名参数: 具名参数:SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代 我们之前一直是用JDBCTemplate  进行 ...

  8. Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装

    Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装 >>>>>> ...

  9. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

随机推荐

  1. j.u.c系列(06)---之锁条件:Condition

    写在前面 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait().notify()系列方法可以实现等待/通知模式.在Java SE5后,Java提供了Lock接 ...

  2. Google Reader明日关闭:14款替代品对比

    北京时间6月30日上午消息,谷歌将于7月1日关闭RSS阅读器服务Google Reader,目前许多用户已转向其他的RSS阅读器服务. 美国科技博客Marketing Land本周对市面上多个RSS阅 ...

  3. 在centos中安装jenkins master为service

    需要sudo或root权限.    翻译自: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+dis ...

  4. 项目内部IT/电商/信息化类简报,分享电子版

    除了一些国内不准发的内容,还有公司内部项目相关的.其他的大多数资料会在微信公众号推送,分享一下吧,希望大家也能推荐一些好文章. 微信公众号:WallinWind,原创IT类文章在CSDN博客也会同步更 ...

  5. Revit API画垂直于风管的风管

    start /// <summary> /// 选择风管与风管外一点,画与风管垂直的风管. /// </summary> [Transaction(TransactionMod ...

  6. 查看内核页表kernel_page_tables (aarch32)

    作者 彭东林 pengdonglin137@163.com   平台 Linux-4.10.17 Qemu + vexpress-ca9     概述 通过配置内核,会在/sys/kernel/deb ...

  7. 在ASP.NET MVC中通过勾选checkbox来更改select的内容

    遇到了这样的一个需求:通过勾选checkbox来更改select的内容. 在没有勾选checkbox之前是这样的: 在勾选checkbox之后是这样的: 想通过ajax异步来实现.所以,从控制器拿到的 ...

  8. AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等

    本篇AutoMapper使用场景: ※ 类型转换,源string类型分别转换成int, DateTime,Type ※ 源和目标都包含复杂类型属性 ※ 把源中的一个属性映射到目标中的多个属性 类型转换 ...

  9. lastlog

    [root@li739-39 ~]# lastlogUsername Port From Latestroot pts/1 183.15.253.245 Thu Oct 29 05:57:29 +00 ...

  10. 【linux】在linux上生成SSH-key 简单原理介绍+生成步骤

    1.首先什么是SSH Secure Shell (SSH) 是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议.通过加密保证了数据的保密性和完整性.SSH采用公钥加密技术来验证远程主机,以及( ...