Spring(二十一):Spring JdbcTemplate、NamedParameterJdbcTemplate具名参数
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具名参数的更多相关文章
- Java开发学习(二十一)----Spring事务简介与事务角色解析
一.Spring事务简介 1.1 相关概念介绍 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 数据层有事务我们可以理解 ...
- Spring学习(十一)-----Spring使用@Required注解依赖检查
Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...
- (转) Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数(转)
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- spring使用JdbcTemplate和jdbcDaosupport及具名参数使用
关于jdbctemplate: 个人感觉比Java链接mysql那一套方便好维护多了,只需在配置文件维护即可 需要的包: com.springsource.net.sf.cglib-2.2.0.jar ...
- Spring 具名参数NamedParameterJdbcTemplate
具名参数: 具名参数:SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代 我们之前一直是用JDBCTemplate 进行 ...
- Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装
Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装 >>>>>> ...
- Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!
前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...
随机推荐
- 区别ES3ES5和ES6this的指向问题。区分普通函数和箭头函数中this的指向问题
ES3 ES5this的指向问题 this指的是该函数被调用的对象 var foo = function () { this.a = 'a', this.b = 'b', this.c = { a: ...
- CentOS 7设置KVM硬盘模式为SCSI
找到一下节点,把target节点的dev改成s开头,bus改成scsi即可,并删除address节点: 以此内推,如果要修改为ide需要修改dev为h开头,bus改成ide. 参考: https:// ...
- c# 实现获取汉字十六进制Unicode编码字符串
1. 汉字转十六进制UNICODE编码字符串 /// <summary> /// //// /// </summary> /// & ...
- 开源 java CMS - FreeCMS2.2 菜单管理
项目地址:http://www.freeteam.cn/ 菜单管理 FreeCMS在设计时定位于面向二次开发友好,所以FreeCMS提供了菜单管理功能.二次开发者能够自由添加新的功能菜单到FreeCM ...
- 【Go命令教程】7. go run
Go 源码文件包括:命令源码文件.库源码文件 和 测试源码文件.其中,命令源码文件 总应该属于 main 代码包,且在其中有无参数声明.无结果声明的 main 函数.单个命令源码文件可以被单独编译,也 ...
- The Win32 Rundll and Rundll32 Interface Related Topics
The Win32 Rundll and Rundll32 Interface Related Topics Microsoft Knowledge Base Article Q164787 Appl ...
- springboot之异步调用@Async
原文:http://www.cnblogs.com/xuwenjin/p/8858050.html 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交 ...
- iOS App与iTunes文件传输的方法和对iOS App文件结构的说明
转:http://www.xiaoyaoli.com/?p=368 就像很多iOS上面的播放器App一样,本文编写一个程序可以通过iTunes往里面放文件,比如编写一个音乐播放器程序,通过itune往 ...
- 【C++】拷贝构造函数和赋值符函数
在C++中,调用拷贝构造函数有三种情况: 1.一个对象作为函数参数,以值传递的方式传入函数体. 2.一个对象作为函数返回值,以值传递的方式从函数返回. 3.一个对象用于给另外一个对象进行初始化(复制初 ...
- WordPress主题开发实例:查询单篇文章
xxx/?page_id=5 想在首页调用以上页面的内容怎么做呢? 完整: <?php //查询 $my_query = new WP_Query( 'page_id=5' ); if($my_ ...