精通 Spring Boot 系列 12

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 精通 Spring Boot 系列 12

阅读全文,约 14 分钟

这是江帅帅的第014篇原创

Spring Boot 使用 JdbcTemplate

JdbcTemplate 主要为数据访问提供了模板方案,将数据库存取的工作进行简化。

案例:访问数据

1)编辑 pom.xml 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.nx</groupId>
    <artifactId>springbootdata</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/>
    </parent>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
 
    <dependencies>
 
        <!-- 添加spring-boot-starter-web模块依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!-- 添加spring-boot-starter-thymeleaf模块依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
 
        <!-- 添加MySQL依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
 
        <!-- 添加JDBC依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
 
    </dependencies>
</project>
2)编辑 application.properties 文件
####################
### 数据源信息配置 ###
####################
# 数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
# 用户名
spring.datasource.username=root
# 密码
spring.datasource.password=1234
# 数据库驱动
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# 指定连接池中最大的活跃连接数.
spring.datasource.max-active=20
# 指定连接池最大的空闲连接数量.
spring.datasource.max-idle=8
# 指定必须保持连接的最小值
spring.datasource.min-idle=8
# 指定启动连接池时,初始建立的连接数量
spring.datasource.initial-size=10
3)创建 User 持久类
public class User implements Serializable{
 
    private static final long serialVersionUID = 1L;
 
    private int id ;
    private String loginName ;
    private String username ;
    private String password;
 
    // setXxx 和 getXxx 方法
}
4)创建 UserRepository 数据访问接口
@Repository
public class UserRepository {
 
    // 注入JdbcTemplate模板对象
    @Resource
    private JdbcTemplate jdbcTemplate;
 
    // 插入数据
    public int insertUser(){
        String sql = "insert into tb_user(login_name ,username ,passWord) "
                + "values (?,?,?),(?,?,?),(?,?,?)";
        Object[] args = new Object[]{"s1","小黄","123456","s2","小绿","123456"
                ,"s3","小红","123456"};
        // 参数1:插入数据的sql语句 
        // 参数2: 对应sql语句中占位符?的参数
        return jdbcTemplate.update(sql, args);
    }
 
    // 根据userName查询数据
    public User selectByUsername(String username) {
        String sql = "select * from tb_user where username = ?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        User user = jdbcTemplate.queryForObject(sql, new Object[] { username }, rowMapper);
        return user;
    }
 
    // 根据id查询数据
    public User findUserById(int id) {
        String sql = "select * from tb_user where id=?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        return jdbcTemplate.queryForObject(sql, new Object[] { id }, rowMapper);
    }
 
    // 查询所有数据
    public List<User> findAll() {
        String sql = "select * from tb_user";
        // 申明结果集的映射rowMapper,将结果集的数据映射成User对象数据
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        return jdbcTemplate.query(sql, rowMapper);
    }
 
    // 根据id删除数据
    public void delete(final Integer id) {
        String sql = "delete from tb_user where id=?";
        jdbcTemplate.update(sql, new Object[] { id });
    }
 
    // 修改数据
    public void update(final User user) {
        String sql = "update tb_user set username=?, login_name=? where id=?";
        jdbcTemplate.update(sql,
            new Object[] { user.getUsername(), user.getLoginName(), user.getId()});
    }
 
    // 插入数据获取被插入数据的主键
    public User insertGetKey(User user) {
        String sql = "insert into tb_user(username,login_name,password) values(?,?,?)";
        // 定义插入数据后获取主键的对象
        KeyHolder holder = new GeneratedKeyHolder();
        jdbcTemplate.update(new PreparedStatementCreator() {
            @Override
            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                // 插入数据后,将被插入数据的主键返回回来
                PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
                ps.setString(1, user.getUsername());
                ps.setString(2, user.getLoginName());
                ps.setString(3, user.getPassword());
                return ps;
            }
        }, holder);
        // 获取被插入数据库的主键 然后注入到user对象中去
        int newUserId = holder.getKey().intValue();
        user.setId(newUserId);
        return user;
    }
}
5)创建 UserService 业务层类
@Service
public class UserService {
 
    // 注入UserRepository
    @Resource
    private UserRepository userRepository;
 
    public int insertUser(){
        return userRepository.insertUser();
    }
 
    public User selectByUsername(String username){
        return userRepository.selectByUsername(username);
    }
 
    public List<User> findAll(){
        return userRepository.findAll();
    }
 
    public User insertGetKey(User user) {
        return userRepository.insertGetKey(user);
    }
 
    public void update(User user) {
        userRepository.update(user);
    }
 
    public void delete(Integer id) {
        userRepository.delete(id);
    }
}
6)定义 UserController 控制器类
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;
 
    @RequestMapping("/insertUser")
    public String insertUser(){
        return "插入数据["+userService.insertUser()+"]条";
    }
 
    @RequestMapping("/insertGetKey")
    public User insertGetKey(User user) {
        return userService.insertGetKey(user);
    }
 
    @RequestMapping("/selectByUsername")
    public User selectByUserNm(String username){
        return userService.selectByUsername(username);
    }
 
    @RequestMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }
 
    @RequestMapping("/update")
    public void update(User user) {
        userService.update(user);
    }
 
    @RequestMapping("/delete")
    public void delete(Integer id) {
        userService.delete(id);
    }
}
7)测试

http://localhost:8080/user/insertUser

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java Spring 容器
什么是Spring Boot插件化开发?如何进行?
什么是Spring Boot插件化开发?如何进行?
565 0
|
4月前
|
Java Spring
spring boot 中WebMvcConfigurer相关使用总结
spring boot 中WebMvcConfigurer相关使用总结
69 3
|
4月前
|
存储 安全 Java
Spring Boot
【7月更文挑战第16天】Spring Boot
29 1
|
6月前
|
Java Spring
精通 Spring Boot 系列 08
精通 Spring Boot 系列 08
42 0
|
6月前
|
JSON Java fastjson
精通 Spring Boot 系列 05
精通 Spring Boot 系列 05
33 0
|
6月前
|
存储 安全 Java
精通 Spring Boot 系列 15
精通 Spring Boot 系列 15
43 0
|
Cloud Native Java Go
《Spring Boot前世今生》
《Spring Boot前世今生》
58 0
|
存储 缓存 算法
Spring Boot 中的 ConcurrentMapCacheManager
Spring Boot 中的 ConcurrentMapCacheManager
|
Java Spring
Spring Boot 3.0
Spring Boot 3.0
648 0
|
存储 JSON 安全
Spring Boot 安全
1.概述 在后端来说,安全主要就是控制用户访问,让对应权限的用户能访问到对应的资源,主要是两点: 认证 授权 认证,确定是谁。 授权,核实权限。 每个安全框架其实都是为了实现这两点。 目前常用的实现方式有如下几种: token JWT oauth spring security 前三种是理念,最后一种是开箱即食的框架。 2.token 2.1.理论 token ,也叫“令牌”,是验证用户身份的凭证。token的组成具有随意性,能标识用户身份即可。
127 0