JdbcTemplate常用方法
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常用方法的更多相关文章
- 8.spring:事务管理(上):Spring的数据库编程、编程式事务管理
Spring的数据库编程 Spring框架提供了JDBC模板模式------>JdbcTemplate 简化了开发,在开发中并不经常是使用 实际开发更多使用的是Hibernate和MyBatis ...
- Spring - 数据库开发概述
Spring 数据库开发 Spring 的 JDBC 模块负责数据库资源管理和镨误处理,大大简化了开发人员对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业 ...
- 【Spring】Spring的数据库开发 - 2、Spring JdbcTemplate的常用方法(execute、update、query)
Spring JdbcTemplate的常用方法 文章目录 Spring JdbcTemplate的常用方法 execute() update() query() 简单记录-Java EE企业级应用开 ...
- jdbcTemplate的一些常用方法
前言 最近的项目中由于只进行查询,所以使用了jdbcTemplate来直接操作sql进行持久层的操作,初次接触jdbcTemplate,从最开始的什么都不知道到现在基本方法都大致知道什么意思,特此记录 ...
- Spring JDBC常用方法详细示例
Spring JDBC使用简单,代码简洁明了,非常适合快速开发的小型项目.下面对开发中常用的增删改查等方法逐一示例说明使用方法 1 环境准备 启动MySQL, 创建一个名为test的数据库 创建Mav ...
- 编写DAO,通过JdbcTemplate操作数据库的实践
目的:编写DAO,通过Spring中的JdbcTemplate,对数据库中的学生数据进行增删改查操作. 要操作的数据库表结构为: 一.大体框架 1.要利用JdbcTemplate,首先要添加Sprin ...
- spring的JdbcTemplate
一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象. 第一种方式:我们可以在自己定 ...
- spring的jdbcTemplate的使用
转载:http://1358440610-qq-com.iteye.com/blog/1826816 一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作. ...
- Spring中jdbcTemplate的用法实例
一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象. 第一种方式:我们可以在自己定 ...
随机推荐
- 获取天气预报java代码
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; imp ...
- 实际中可能遇到的NAT问题(IPsec)
一.背景介绍:一般我们在实际网络中不是IPSec VPN的时候,都是边界设备连接Internet,然后两个边界设备通过Internet去实现互通,建立VPN,但是,有的运营商在分配IP地址的时候,给我 ...
- ElasticSearch学习记录 - 命令示例
GET /searchfilmcomments/searchfilmcomments/_search { "query": { "match_all": {} ...
- 【转】网关协议学习:CGI、FastCGI、WSGI、uWSGI
一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...
- hive内表和外表的创建、载入数据、区别
创建表 创建内表 create table customer( customerId int, firstName string, lastName STRING, birstDay timestam ...
- Educational Codeforces Round 68 (Rated for Div. 2)D(SG函数打表,找规律)
#include<bits/stdc++.h>using namespace std;int sg[1007];int main(){ int t; cin>>t; while ...
- GitHub vs. Bitbucket 不只是功能不同
https://www.oschina.net/translate/bitbucket-vs-github-its-more-than-just-features 让我们回到2005年,Bitkeep ...
- jquery中 $(xxx).each() 和 $.each()的区别,以及enter键一键登录
1.$().each 在dom处理上面用的较多.如果页面有多个input标签类型为text,对于这时用$().each来处理多个text,例如: $("input[type=’text’]& ...
- vue 和 jquery混合使用
有时候只要想到要用的 vue.js 的时候就会惯性的想起用vue-cli手脚架搭建一个项目,但是有时候的业务场景并不适合用vue-cli手脚架,这个时候使用vue+jquery混合使用,把他们的优点结 ...
- Java入门笔记 03-面向对象(上)
介绍:Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成是一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量.也就是说,所有类都是引用类型.Java也支持面向对象的 ...