Spring Boot + JdbcTemplate

Spring Boot 版本:2.2.2.RELEASE

数据库:MySQL

数据表准备

MySQL 数据表定义:

mysql> show create table t_user \G
*************************** 1. row ***************************
       Table: t_user
Create Table: CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) DEFAULT NULL,
  `password` varchar(12) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> desc t_user;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| name     | varchar(12) | YES  |     | NULL    |                |
| password | varchar(12) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

引入依赖

在 Spring Boot 中开启 JdbcTemplate 很简单,只需要引入 JdbcTemplate 和数据库驱动,见第 23 ~ 26、34 ~ 39 行。

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mk</groupId>
    <artifactId>spring-boot-jdbc-template</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-jdbc-template</name>
    <description>JdbcTemplate</description>

    <properties>
        <java.version>1.8</java.version>
        <mysql-connector-java.version>5.1.40</mysql-connector-java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

实现代码

实体类,我使用了 Lombok 提供的注解,免去使用 IDE 生成构造方法、Getter、Setter、toString 等方法的工作。

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class User {
    
    private Integer id;
    private String name;
    private String password;
}

数据源配置,为了方便起见,我直接使用了 Spring 自带的数据源,application.yml 文件的内容如下。

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?useSSL=true&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root

测试类

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import com.mk.domain.User;

@SpringBootTest
class SpringBootJdbcTemplateApplicationTests {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    void contextLoads() {
//	    System.out.println(this.jdbcTemplate);

        // 根据 ID 查询
        User user = this.selectBy(1);
        System.out.println(user);

        // 新增
        this.add(new User(2, "zhangsan", "123"));
        this.add(new User(3, "lisi", "123"));

        // 修改
        this.update(new User(1, "admin", "123"));

        // 删除
        this.delete(3);

        // 查询所有
        List<Map<String, Object>> users = this.selectAll();
        for (Map<String, Object> u : users) {
            System.out.println(u.values().toString());
        }
    }

    public int add(User record) {
        String sql = "insert into t_user(id,name,password) values(:id,:name,:password)";
        NamedParameterJdbcTemplate npjt = new NamedParameterJdbcTemplate(this.jdbcTemplate.getDataSource());

        return npjt.update(sql, new BeanPropertySqlParameterSource(record));
    }

    public int update(User record) {
        String sql = "update t_user set name = ?,password = ? where id = ?";
        Object[] args = { record.getName(), record.getPassword(), record.getId() };
        int[] argTypes = { Types.VARCHAR, Types.VARCHAR, Types.INTEGER };

        return this.jdbcTemplate.update(sql, args, argTypes);
    }

    public int delete(Integer id) {
        String sql = "delete from t_user where id = ?";
        Object[] args = { id };
        int[] argTypes = { Types.INTEGER };

        return this.jdbcTemplate.update(sql, args, argTypes);
    }

    public List<Map<String, Object>> selectAll() {
        String sql = "select * from t_user";

        return this.jdbcTemplate.queryForList(sql);
    }

    public User selectBy(Integer id) {
        String sql = "select * from t_user where id = ?";
        Object[] args = { id };
        int[] argTypes = { Types.INTEGER };

        List<User> records = this.jdbcTemplate.query(sql, args, argTypes, new RowMapper<User>() {

            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                Integer id = rs.getInt("id");
                String name = rs.getString("name");
                String password = rs.getString("password");
                User user = new User(id, name, password);
                return user;
            }
        });

        if ((records != null) && (records.size() > 0)) {
            return records.get(0);
        } else {
            return null;
        }
    }
}

运行测试类,控制台输出

User(id=1, name=root, password=123456)
[1, admin, 123]
[2, zhangsan, 123]

项目结构
在这里插入图片描述

发布了36 篇原创文章 · 获赞 0 · 访问量 1857

猜你喜欢

转载自blog.csdn.net/qq_29761395/article/details/103996603