Spring JDBC的使用方法详解
作者:幸福的小耗子 发布时间:2021-12-08 14:05:42
标签:sprin,jdbc,使用
1、为什么使用Spring提供的JDBC的封装?
因为Spring提供了完整的模板类以及基类可以简化开发,我们只需写少量的代码即可。
2、实例讲解
第一步:导入依赖mysql-connector spring-jdbc spring-tx spring-core spring-beans spring-context 等等
第二步:数据库的建立,配置xml
第三步:获取jdbcTemplate对象
可以这样获得
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource){
this.jdbcTemplate=new JdbcTemplate(dataSource);
}
<bean id="userDao" class="com.test.jdbc.dao.impl.UserDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
也可以继承JdbcDaoSupport,使用super.getJdbcTemplate()获得
第四步:使用jdbcTemplate对象进行增删改查
增删改使用update(),这个方法的参数,第一个为sql语句,之后为可变参数,传入sql语句中的占位符
查询使用queryForObject()方法的第一个参数为sql中需要的参数,第三个参数为实现RowMapper接口的对象,
用于处理结果集,该方法要求返回单一的对象
query()该方法返回对象集合
public class UserDaoImpl extends JdbcDaoSupport implements IUserDao {
public void save(User user) {
super.getJdbcTemplate().update("insert into user(id,username,password,date,salary) values(null,?,?,?,?)",
user.getUsername(),user.getPassword(),user.getDate(),user.getSalary());
}
public void update(User user) {
super.getJdbcTemplate().update("update user set username=?,password=?,date=?,salary=? where id=?",
user.getUsername(), user.getPassword(), user.getDate(), user.getSalary(), user.getId());
}
public void delete(Integer id) {
super.getJdbcTemplate().update("delete from user where id=?",id);
}
public User findById(Integer id) {
/* List<User> user = super.getJdbcTemplate().query("select * from user where id=?", new Object[]{id},
new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setDate(resultSet.getDate("date"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setSalary(resultSet.getBigDecimal("salary"));
return user;
}
//方法的返回值会直接封装到集合中
});
return user.size()>0?user.get(0):null;*/
User user = super.getJdbcTemplate().queryForObject("select * from user where id=?", new Object[]{id},
new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setDate(resultSet.getDate("date"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setSalary(resultSet.getBigDecimal("salary"));
return user;
}
});
return user;
}
public List<User> findAll() {
List<User> users = super.getJdbcTemplate().query("select * from user",
new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setDate(resultSet.getDate("date"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setSalary(resultSet.getBigDecimal("salary"));
return user;
}
//方法的返回值会直接封装到集合中
});
return users;
}
}
3、JdbcTemplate是JDBC核心包的中心类
知识点查询地址:
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/data-access.html#jdbc
来源:https://www.cnblogs.com/xfdhh/p/11488317.html
0
投稿
猜你喜欢
- 前言前面的篇幅里有提到通过InitializingBean和Disposable等接口可以对bean的初始化和销毁做一些自定义操作,那么有一
- 0、线程的本质线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入C
- 概述从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.字符串匹配字符串匹配 (String Matching)
- Java获取环境变量Java 获取环境变量的方式很简单: System.getEnv() 得到所有的环境变量Syste
- Spring AOP预处理Controller的参数实际编程中,可能会有这样一种情况,前台传过来的参数,我们需要一定的处理才能使用比如有这样
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCod
- ExpandoObject:表示一个对象,该对象包含可在运行时动态添加和移除的成员。 dynamic dynEO = new Expando
- SharedPreferences在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式。在Android
- 一、前言尽管Unity有一个像样的脚本编辑器(Mono),但很多人喜欢使用另一个编辑器。这篇短文解释了如何更改脚本编辑器,并介绍了Mono的
- springboot 多个filter的执行顺序以及配置当项目中有多个filter时,为了便于管理,可以创建一个配置文件,对所有的filte
- 1. 你可以讲下进程与线程的区别?为什么要用多线程?进程:进程是程序的一次执行过程,是系统运行程序的基本单位。线程:单个进程中执行中每个任务
- 1.监听(Listener)<!-- 配置监听 --><listener><listener-class>
- 本文实例讲述了WinForm实现的图片拖拽与缩放功能。分享给大家供大家参考,具体如下:最近做项目的时候遇到上传施工平面布置图,查看,因为图片
- 一、注解@PostConstruct使用注解@PostConstruct是最常见的一种方式,存在的问题是如果执行的方法耗时过长,会导致项目在
- 1.CAS1)CAS概念CAS时Compare And Swap缩写,即比较与交换是用于实现多线程同步的原子指令,它将内存位置的内容与给定值
- 一、题目描述题目实现:网络通信,实现信息的发送和接收。二、解题思路创建一个服务器类:ServerSocketFrame,继承JFrame类写
- 1、java.util.concurrent.atomic 的包里有AtomicBoolean, AtomicInteger,AtomicL
- 执行如下的jni调用:package jni;public class JNITransObject { public nativ
- java 打造阻塞式线程池的实例详解原来以为tiger已经自带了这种线程池,就是在任务数量超出时能够阻塞住投放任务的线程,主要想用在JMS消
- 开发环境win10Android Studio效果用于多级菜单展示,或选择。如 每个省,市,县;如 树木的病虫害;关键代码 @overrid