当前位置: 首页 > news >正文

JdbcTemplate常用方法解析

文章目录

  • 1.JdbcTemplate简介
  • 2.JdbcTemplate主要方法:
  • 3.常用方法介绍
    • update()方法增删改
    • query()查询方法

1.JdbcTemplate简介

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

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

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

2.JdbcTemplate主要方法:

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

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

xml中的配置:

<!-- 扫描 -->
<context:component-scan base-package="com.xxx.*"></context:component-scan><!-- 不属于自己工程的对象用bean来配置 -->
<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" p:username="root" p:password="123456"><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>

3.常用方法介绍

数据库user_info表:
在这里插入图片描述
先创建一个实体对象,对应数据库表中的信息,方便之后的查询操作

package com.xxx.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;}@Overridepublic String toString() {return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + "]";}}

update()方法增删改

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

UserInfoDao.java代码:

@Repository
public class UserInfoDao {@Autowired//从容器中自动扫描获取jdbcTemplateprivate 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);}
}

测试结果:在这里插入图片描述

query()查询方法

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

查询单个值

//查询单个值
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>{@Overridepublic 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>{@Overridepublic 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>{@Overridepublic 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>>{@Overridepublic 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;});}
http://www.lryc.cn/news/13907.html

相关文章:

  • 生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC
  • CS224W课程学习笔记(三):DeepWalk算法原理与说明
  • rk3568 开发板Ubuntu系统说明
  • Windows和Linux常用HASH算法使用命令
  • 货仓选址 AcWing(JAVA)
  • SPI+DMA传输性能比较
  • Centos7系统编译Hadoop3.3.4
  • pb并发控制
  • 登录拦截器
  • STM32 - HAL库UART串口
  • Vue3 的状态管理库(Pinia)
  • 信息系统项目管理师知识点汇总(2023最新)
  • 标题标题标题
  • OKR学习总结二
  • MAC中docker搭建fastdfs
  • JavaScript 变量
  • 【前端验证】环境仿真中对于寄存器配置的随机策略讨论
  • Servlet如何读取Web资源文件?【操作演示】
  • [ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2019-6339)
  • flex-shrink和felx-grow
  • 将HTTP接口配置成HTTPS
  • YOLOV5报错解决办法
  • java final关键字 详解
  • Vbs_To_Exe制作简易exe程序
  • AI制药 - TMScore(US-align)、RMSD、Sequence 源码
  • 关于个人的经历
  • 设计在单链表中删除值相同的多余结点的算法(包括指针的引用的知识点)
  • 100份简历才找一个合适的,2023,软件测试岗位饱和了吗?
  • (三十七)vue 项目中常用的2个Ajax库
  • Python打包调试问题解决