JDBCTemplate
JDBC
JDBC(Java DataBase Connectivity)是Java用于连接数据库的规范,也就是用于执行数据库SQL语句的Java API。它是由一组用Java语言编写的类和接口组成,为大部分关系型数据库提供访问接口。
JDBC需要每次进行数据库连接,然后处理SQL语句、传值、关闭数据库。如果都由开发人员编写代码,则很容易出错,可能会出现使用完成之后,数据库连接忘记关闭的情况。这容易导致连接被占用而降低性能,为了减少这种可能的错误,减少开发人员的工作量,JDBCTemplate被设计出来。
JDBCTemplate
JDBCTemplate=JDBC+Template,是对JDBC的封装。它更便于程序实现,替我们完成所有的JDBC底层工作。因此,对于数据库的操作,再不需要每次都进行连接、打开、关闭了。
JDBC和JDBCTemplate就像仓库管理员,负责从仓库中存取物品。而后者不需要每次进入都开门,取完关门,因为有电动门自动控制。
用JDBCTemplate实现数据的增删改查
1.配置基础依赖
要使用JDBCTemplate,则需要添加其Starter依赖。因为要操作数据库,所有也需要配置数据库(以mysql为例)的连接依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.20</version>
</dependency>
添加完依赖之后,还需要配置数据库的连接信息。这样JDBC才能正常连接到数据库。在application.properties配置文件中配置数据库的地址和用户信息
//配置ip地址,编码,时区和SSL
spring.datasource.url=jdbc:mysql://127.0.0.1/book?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
//用户名
spring.datasource.username=root
//密码
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2 新建实体类
新建一个测试实体类User,实现RowMapper类,重写mapRow方法,以便实现字段和数据表字段映射。映射是指把Java中设置的实体字段和mysql数据库的字段对应起来,因为实体id可以对应数据库字段的u_id,也可以对应id、那么等。如果不重写,则程序不知道如何对应。
User.java
package com.example.demo.model;
import lombok.Data;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
@Data
public class User implements RowMapper<User> {
private int id;
private String username;
private String password;
//必须重写mapRow方法
@Override
public User mapRow(ResultSet resultSet,int i) throws SQLException{
User user=new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
return user;
}
}
3.操作数据
JDBCTemplate提供了以下操作数据的3个方法
方法 | 含义 |
---|---|
execute | 表示执行,用于直接执行sql语句 |
update | 表示更新,包括新增、修改、删除操作 |
query | 表示查询 |
1)创建数据表
在使用JDBCTemplate之前,需要在控制器中注入JDBCTemplate,然后可以通过execute方法执行sql语句
2)添加数据
通过update方法
3)查询修改删除数据
执行sql字符串里面的SQL语句,通过query,update方法
package com.example.demo.controller;
import com.example.demo.model.User;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserController {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
//创建数据表
public void createUserTable() throws Exception {
String sql = "CREATE TABLE `user` (\n" +
" `id` int(10) NOT NULL AUTO_INCREMENT,\n" +
" `username` varchar(100) DEFAULT NULL,\n" +
" `password` varchar(100) DEFAULT NULL,\n" +
" PRIMARY KEY (`id`)\n" +
") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;\n" +
"\n";
jdbcTemplate.execute(sql);
}
@Test
//saveUserTest
//添加一个测试数据
public void saveUserTest()throws Exception {
String sql = "INSERT INTO user (username,password) VALUES ('lsz','123456')";
int rows = jdbcTemplate.update(sql);
System.out.println(rows);
}
@Test
//updateUserPassword?id=1&passWord=999888
public void updateUserPassword() throws Exception {
Integer id=1;
String passWord="999888";
String sql = "UPDATE user SET PASSWORD = ? WHERE ID = ?";
int rows = jdbcTemplate.update(sql, passWord, id);
System.out.println(rows);
}
@Test
public void deleteUserById() throws Exception {
String sql = "DELETE FROM user WHERE ID = ?";
int rows = jdbcTemplate.update(sql, 1);
System.out.println(rows);
}
@Test
//getUserByName?userName=lsz
public void getUserByName()throws Exception {
String name="lsz";
String sql = "SELECT * FROM user WHERE USERNAME = ?";
List<User> list = jdbcTemplate.query(sql, new User(), new Object[]{name});
for(User user:list){
System.out.println(user);
}
}
@Test
//getAll
public void list() throws Exception {
String sql = "SELECT * FROM user limit 1000";
List<User> userList = jdbcTemplate.query(sql,
new BeanPropertyRowMapper(User.class));
for(User userLists:userList){
System.out.println(userLists);
}
}
}
本文地址:https://blog.csdn.net/shizheng_Li/article/details/107152977
上一篇: 生孩子居然有这样报喜
下一篇: 品牌推广营销 如何再造一个江小白
推荐阅读
-
使用jdbcTemplate查询返回自定义对象集合代码示例
-
Spring中的JDBCTemplate、Spring基于AOP的事务控制、Spring中的事务控制
-
SpringBoot jdbctemplate使用方法解析
-
Springboot jdbctemplate整合实现步骤解析
-
带着萌新看springboot源码10(springboot+JdbcTemplate+druid)
-
springboot之多数据源配置JdbcTemplate
-
JDBCTemplate
-
JdbcTemplate的一次爬坑记录
-
基于spring JdbcTemplate的扩展,结合velocity模板实现sql语句的可配置可动态添加
-
基于spring JdbcTemplate的扩展,结合velocity模板实现sql语句的可配置可动态添加