SpringBoot入门 (四) 数据库访问之JdbcTemplate
本文记录在SpringBoot中使用JdbcTemplate访问数据库。
一 JDBC回顾
最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤:
1 加载驱动 Class.forName(Driver)
2 获取数据库连接 conn = DriverManager.getConnection(url, user,password)
3 创建一个statement对象来访问操作数据库 statement = conn.createStatement();
4 执行SQL,访问操作数据库 rs = statement.execute(sql)
5 得到结果集,业务处理
6 关闭连接,释放资源 statement.close(); conn.close();
使用jdbc访问并操作数据库时比较麻烦,后来也做了一定的封装,主要是对statement的创建前和sql执行后进行的封装。
二 JdbcTemplate使用示例
目前我们使用的主流的开源的数据库访问框架主要有Hibernate,Mybatis,SpringJdbc。SpringJdbc时spring对JDBC封装后的一个ORM框架,JdbcTemplate就是SpringJdbc对外提供的一个访问数据库的接口类,我们通过它可以很容易的实现数据库的访问操作。但是需要我们自己根据业务手写相关的SQl,然后执行。
在spring boot项目中引入依赖,本文练习中使用的时MySql数据库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在application.properties中配置数据库连接相关信息
#数据库配置
#连接
spring.datasource.url=jdbc:mysql://localhost:3306/test
#账号
spring.datasource.username=root
#密码
spring.datasource.password=123456
#驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
完成以上配后,在启动springboot项目时,会自动把数据源信息注入到JdbcTemplate中,我们只需要在使用的地方注入JdbcTemplate就可以了
定义要操作数据库的相关方法接口
public interface UserDao {
/**
* 添加用户
*/
int insert(UserInfo user);
/**
* 根据ID删除用户
*/
int delete(Long id);
/**
* 修改用户
*/
int update(UserInfo user);
/**
* 根据ID查询用户
*/
UserInfo queryById(Long id);
/**
* 查询所有用户
* @return
*/
List<UserInfo> queryAll();
/**
* 分页查询用户
* @param start 开始位置
* @param size 要查询的数据条数
* @return
*/
List<UserInfo> pagedQuery(int start, int size);
}
接口的实现
@Service
public class UserDaoImpl implements UserDao { @Autowired
private JdbcTemplate jdbcTemplate; @Override
public int insert(UserInfo user) {
String insertSql = "insert into t_user(name, age) values(?, ?)";
return jdbcTemplate.update(insertSql, user.getName(), user.getAge());
} @Override
public int delete(Long id) {
String deleteSql = "delete from t_user where id = ?";
return jdbcTemplate.update(deleteSql, id);
} @Override
public int update(UserInfo user) {
String updateSql = "update t_user set name = ?, age = ? where id = ?";
return jdbcTemplate.update(updateSql, user.getName(), user.getAge(), user.getId());
} @Override
public UserInfo queryById(Long id) {
String sql = "select * from t_user where id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<UserInfo>(UserInfo.class));
} @Override
public List<UserInfo> queryAll() {
String sql = "select * from t_user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper(UserInfo.class));
} @Override
public List<UserInfo> pagedQuery(int start, int size) {
String sql = "select * from t_user limit ?, ?";
return jdbcTemplate.query(sql, new Object[]{start, size}, new BeanPropertyRowMapper(UserInfo.class));
}
}
可以看到,使用JdbcTemplate时我们完全省去了使用JDBC时的创建连接,释放资源等操作。不同数据库的分页查询不一样,MySql中用的limit关键字,第一个参数代表获取数据的起点,第二个是要查询的数量,如:limit 5,5 我们查询出来的是第6行到10行 共5条数据
三 测试,使用Junit Test
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJdbctemplateApplicationTests { @Autowired
private UserDaoImpl userDaoImpl; @Test
public void testInsert(){
UserInfo user = new UserInfo("kg", 21);
userDaoImpl.insert(user);
} @Test
public void testDelete(){
long id = 2;
userDaoImpl.delete(id);
} @Test
public void testUpdate(){
long id = 1;
UserInfo user = new UserInfo();
user.setId(id);
user.setName("kobe");
user.setAge(3);
userDaoImpl.update(user);
} @Test
public void testQueryById(){
long id = 1;
UserInfo user = userDaoImpl.queryById(id);
} @Test
public void testQueryAll(){
List<UserInfo> list = userDaoImpl.queryAll();
} @Test
public void testPagedQuery(){
List<UserInfo> list = userDaoImpl.pagedQuery(1, 2);
}
}
在启动项目时,可以看到在控制台上输出的日志信息中有以下内容

四 连接池配置
在我们没有配置数据库连接池时,springboot默认给我们提供的Hikari连接池。如果我们像使用其他的,我们可以自己配置,比如我们想使用阿里的Druid连接池,我们需要引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
为了测试方便,我这里直接用@Value注解来获取配置信息
@SpringBootConfiguration
public class DataSourceConfig { @Value("${spring.datasource.driver-class-name}")
private String DRIVER;
@Value("${spring.datasource.url}")
private String URL;
@Value("${spring.datasource.username}")
private String USER;
@Value("${spring.datasource.password}")
private String PASSWORD; @Bean
public JdbcTemplate jdbcTemplate(){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource());
return jdbcTemplate;
} @Bean
public DataSource dataSource(){
System.out.println("初始化数据源start。。。");
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(DRIVER);
dataSource.setUrl(URL);
dataSource.setUsername(USER);
dataSource.setPassword(PASSWORD);
//连接池的其他的属性。。。
dataSource.setMaxActive(5);
//...
System.out.println("初始化数据源end。。。");
return dataSource;
} }
@SpringBootConfiguration 这个注解说明当前类是一个配置类,需要被特殊处理,在扫描时发现有@Bean 注解,会把当前方法返回的类Bean注入的容器中,方法名会别标记为注入的Bean的别名,如上JdbcTemplate使用的DataSource就从默认的Hikari修改为Druid了,启动项目可以看到控制台日志信息

SpringBoot入门 (四) 数据库访问之JdbcTemplate的更多相关文章
- SpringBoot入门 (六) 数据库访问之Mybatis
本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...
- SpringBoot入门 (五) 数据库访问之spring data jpa
本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java ...
- SpringBoot第四集:整合JdbcTemplate和JPA(2020最新最易懂)
SpringBoot第四集:整合JdbcTemplate和JPA(2020最新最易懂) 当前环境说明: Windows10_64 Maven3.x JDK1.8 MySQL5.6 SpringTool ...
- SpringBoot第四篇:整合JDBCTemplate
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10868954.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前面几篇文 ...
- SpringBoot入门 (七) Redis访问操作
本文记录学习在SpringBoot中使用Redis. 一 什么是Redis Redis 是一个速度非常快的非关系数据库(Non-Relational Database),它可以存储键(Key)与 多种 ...
- springboot 入门四-时间类型处理
springboot 自带了jackson来处理时间,但不支持jdk8 LocalDate.LocalDateTime的转换. 对于Calendar.Date二种日期,转换方式有二种: 一.统一app ...
- SpringBoot入门基础
目录 SpringBoot入门 (一) HelloWorld. 2 一 什么是springboot 1 二 入门实例... 1 SpringBoot入门 (二) 属性文件读取... 16 一 自定义属 ...
- SpringBoot实战(四)之使用JDBC和Spring访问数据库
这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库. H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提 ...
- SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)
关系型数据库访问(RDBMS) 采用JdbcTemplate.MyBatis.JPA.Hibernate等技术. 一.JdbcTemplate工具 在pom.xml添加boot-starter-jdb ...
随机推荐
- Delphi for iOS开发指南(5):在iOS应用程序中使用Calendar组件来选择日期
http://blog.csdn.net/delphiteacher/article/details/8923519 在FireMonkey iOS应用程序中的Calendar FireMonkey使 ...
- TFS Java SDK使用指南
[2018.3.6 更新] 最新版本的TFS Java SDK(14.123.1)支持Java SDK 1.6版本,可以从Oracle的官方网站(http://www.oracle.com/techn ...
- Flash(as3) 调整显示对象颜色
在游戏开发中改变显示对象的颜色是比较常见的操作,那么除了在FlashCS中调整,AS3又提供了怎样的方式呢? ColorTransform 这个类是轻量级的应用,其构造参数如下: ColorTrans ...
- PHP/ThinkPHP5 框架集成微博登录入库流程示意
PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...
- 在Asp.Net MVC中实现上传图片并显示
实现思路大概分为两步: 1. 通过上传接口,将图片上传到服务器,返回文件路径给客户端: 2. 点击保存上传,将文件路径保存到数据库,如果是多张图片,路径用逗号分隔. 核心上传代码: /// <s ...
- Python常用第三方模块(长期更新)
1.keyboard #监控键盘 2.PIL#处理图片 3.operator #操作列表 4.shelve #数据存储方案 保存dat文件 5.optparse #处理命令行参数 6.configpa ...
- 第六章 ReentrantLock源码解析2--释放锁unlock()
最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...
- pageadmin CMS网站建设教程:如何修改用户密码?
pageadmin CMS网站建设教程: 当我们想修改密码,该如何修改呢? 1. 首先,登录会员中心,会员中心的地址是在网址后面加上/member/login: 2. 例:我的网站地址是localho ...
- Vue 进阶之路(十)
之前的文章介绍了 vue 的组件化,本章我们来看一下 vue 中组件的原生事件. <!DOCTYPE html> <html lang="en"> < ...
- Flask系列01--flask认识, 启动, 响应
一. 四款python web框架简单总结 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 浪费资源,请求的时候需要的资源较高 Flask : 优势 ...