JdbcTemplate简介

  JdbcTemplate是Spring JDBC的核心类,借助该类提供的方法可以很方便的实现数据的增删改查。

  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

  JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了事务和异常控制

  

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

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

  • query方法及queryForXXX方法:用于执行查询相关语句;

  • call方法:用于执行存储过程、函数相关语句。

xml中的配置:

<!-- 扫描 -->
<context:component-scan base-package="com.zzj.*"></context:component-scan> <!-- 不属于自己工程的对象用bean来配置 -->
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" p:username="root" p:password="qw13579wq">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"></property>
</bean> <!-- 配置jdbcTemplate -->
<bean class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"></bean>

常用方法:

数据库user_info表:

我们先创建一个实体对象,对应数据库表中的信息,方便之后的查询操作

package com.zzj.vo;

public class UserInfo {

    private int id;
private String userName;
private String password; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + "]";
} }

修改(包含增、删、改):update()方法,另有批量插入方法batchUpdate()

update()方法增删改:

UserInfoDao.java代码:

@Repository
public class UserInfoDao { @Autowired
//从容器中自动扫描获取jdbcTemplate
private JdbcTemplate jdbcTemplate; //update()实现增加数据
public boolean insert(int id,String userName,String password){
String sql = "insert into user_info values (?,?,?)";
return jdbcTemplate.update(sql,id,userName,password)>0;
} //update()实现修改
public boolean update(int id,String userName,String password){
String sql = "update user_info set user_name=?,password=? where id=?";
return jdbcTemplate.update(sql,userName,password,id)>0;
} //update()实现删除
public boolean delete(int id){
String sql = "delete from user_info where id=?";
return jdbcTemplate.update(sql,id)>0;
} }

测试类代码:

public class Test {

    public static void main(String[] args) {

        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
UserInfoDao userDao = applicationContext.getBean(UserInfoDao.class); boolean insert = userDao.insert(1,"Jim", "123");
boolean update = userDao.update(1,"Tom","123456");
boolean delete = userDao.delete(1);
     System.out.println("插入:"+insert+",修改:"+update+",删除:"+delete); } }

测试结果:

查询:查询单个值、查询一个对象、查询多个对象

查询单个值

//查询单个值
public boolean login(String userName,String password){
try {
String sql = "select id from user_info where user_name=? and password=?";
jdbcTemplate.queryForObject(sql,String.class,userName,password);
return true;
} catch (DataAccessException e) {
return false;
}
}

查询一个对象:RowMapper方法和ResultSetExtractor方法

//查询单个对象
public UserInfo getById(int id){
String sql = "select id,user_name,password from user_info where id=?"; //RowMapper方法
class UserInfoRowMapper implements RowMapper<UserInfo>{ @Override
public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
return userInfo;
} } return jdbcTemplate.queryForObject(sql,new UserInfoRowMapper(),id); //RowMapper方法的Lambda表达式
return jdbcTemplate.queryForObject(sql,(ResultSet rs,int rowNum)->{
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
return userInfo;
},id); //ResultSetExtractor方法
class UserInfoResultSet implements ResultSetExtractor<UserInfo>{ @Override
public UserInfo extractData(ResultSet rs) throws SQLException, DataAccessException {
UserInfo userInfo = null;
if(rs.next()){
userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
}
return userInfo;
}
}
return jdbcTemplate.query(sql,new UserInfoResultSet(),id); //ResultSetExtractor方法的lambda表达式
return jdbcTemplate.query(sql,(ResultSet rs)->{
UserInfo userInfo = null;
if(rs.next()){
userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
}
return userInfo;
},id); }

查询多个对象:RowMapper方法和ResultSetExtractor方法

//查询多个对象
public List<UserInfo> selectAll(){
String sql = "select id,user_name,password from user_info"; //RowMapper方法
class UserInfoRowMapper implements RowMapper<UserInfo>{ @Override
public UserInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
return userInfo;
} }
return jdbcTemplate.query(sql,new UserInfoRowMapper()); //RowMapper方法的Lambda表达式
return jdbcTemplate.query(sql,(ResultSet rs,int rowNum)->{
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
return userInfo;
}); //ResultSetExtractor方法
class UserInfoResultSet implements ResultSetExtractor<List<UserInfo>>{ @Override
public List<UserInfo> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<UserInfo> list = new ArrayList<>();
while(rs.next()){
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
list.add(userInfo);
}
return list;
} }
return jdbcTemplate.query(sql, new UserInfoResultSet()); //ResultSetExtractor方法的lambda表达式
return jdbcTemplate.query(sql,(ResultSet rs)->{
List<UserInfo> list = new ArrayList<>();
while(rs.next()){
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt("id"));
userInfo.setUserName(rs.getString("user_name"));
userInfo.setPassword(rs.getString("password"));
list.add(userInfo);
}
return list;
}); }

JdbcTemplate常用方法的更多相关文章

  1. 8.spring:事务管理(上):Spring的数据库编程、编程式事务管理

    Spring的数据库编程 Spring框架提供了JDBC模板模式------>JdbcTemplate 简化了开发,在开发中并不经常是使用 实际开发更多使用的是Hibernate和MyBatis ...

  2. Spring - 数据库开发概述

      Spring 数据库开发 Spring 的 JDBC 模块负责数据库资源管理和镨误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业 ...

  3. 【Spring】Spring的数据库开发 - 2、Spring JdbcTemplate的常用方法(execute、update、query)

    Spring JdbcTemplate的常用方法 文章目录 Spring JdbcTemplate的常用方法 execute() update() query() 简单记录-Java EE企业级应用开 ...

  4. jdbcTemplate的一些常用方法

    前言 最近的项目中由于只进行查询,所以使用了jdbcTemplate来直接操作sql进行持久层的操作,初次接触jdbcTemplate,从最开始的什么都不知道到现在基本方法都大致知道什么意思,特此记录 ...

  5. Spring JDBC常用方法详细示例

    Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...

  6. 编写DAO,通过JdbcTemplate操作数据库的实践

    目的:编写DAO,通过Spring中的JdbcTemplate,对数据库中的学生数据进行增删改查操作. 要操作的数据库表结构为: 一.大体框架 1.要利用JdbcTemplate,首先要添加Sprin ...

  7. spring的JdbcTemplate

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.       第一种方式:我们可以在自己定 ...

  8. spring的jdbcTemplate的使用

    转载:http://1358440610-qq-com.iteye.com/blog/1826816 一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作. ...

  9. Spring中jdbcTemplate的用法实例

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.       第一种方式:我们可以在自己定 ...

随机推荐

  1. 在VS2017配置OpenGL开发环境

    这个方法适合初学者使用,较为简单方便.第一,你的VS2017一定要安装了C/C++开发组件可以打开Visual Studio Installer来查看另外,确定你有安装NuGet包管理器,在单个组件中 ...

  2. express session 实现登录

    https://www.cnblogs.com/mingjiatang/p/7495321.html Express + Session 实现登录验证   1. 写在前面 当我们登录了一个网站,在没有 ...

  3. 基于FPM制作RPM软件包!

    工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 以前打包rpm是一个非常复杂的一 ...

  4. Live2d技术

    保存一些关于Live2d技术的博文或模型资源,有空研究研究. 什么是 live2d?:https://baike.baidu.com/item/Live2D/8496493 1.https://www ...

  5. php 高级 多台web服务器共享session的方法

    解决多台web服务器共享session的问题,至少有以下三种方法:   一.将本该保存在web服务器磁盘上的session数据保存到cookie中 即用cookie会话机制替代session会话机制, ...

  6. 解Bug之路-记一次调用外网服务概率性失败问题的排查

    前言 和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题.笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题.在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手. ...

  7. Linux centos7 rsync工具介绍、rsync常用选项、rsync通过ssh同步

    一.rsync工具介绍 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync ...

  8. json 常用的方法

    JSON 是用于存储和传输数据的格式. JSON 通常用于服务端向网页传递数据 . -------  菜鸟网 1.  JSON.parse() :用于将一个 JSON 字符串转换为 JavaScrip ...

  9. (转)js实现倒计时效果(年月日时分秒)

    原文链接:http://mengqing.org/archives/js-countdown.html 之前做的活动页面很多都用到了倒计时功能,所以整理下下次直接用.(用的是张鑫旭写的一个倒计时,稍作 ...

  10. express框架安装及中间件原理

    本文主要介绍express中间件的原理,来应对面试. 1.安装express及初始化: npm install express-generator -g   =>   express expre ...