• SpringBoot中使用JDBC


    目录

    一、SpringBoot使用JDBC,依赖

    二、在springboot 配置文件application.yml中,配置数据库信息

    三、JdbcTemplate

    3.1 数据库中已经存在Student表

    3.2 创建与Student表对应的类

    3.3  编写DAO层

    3.4 调用

    四、什么是rowmapper


    JDBC基础使用:

    JDBC基础使用_做测试的喵酱的博客-CSDN博客

    一、SpringBoot使用JDBC,依赖

    依赖:

    1. org.springframework.boot
    2. spring-boot-starter-jdbc
    1. mysql
    2. mysql-connector-java
    3. 8.0.20

    二、在springboot 配置文件application.yml中,配置数据库信息

    1. spring:
    2. datasource:
    3. url: jdbc:mysql://124.70.7.16:3306/chen?useUnicode=true&characterEncoding=UTF-8
    4. username: root
    5. password: 123456
    6. driver-class-name: com.mysql.cj.jdbc.Driver

    三、JdbcTemplate

    这里演示一下spring boot jdbc的使用。对Student表进行增删改查的操作。

    3.1 数据库中已经存在Student表

    mysql数据库,chen库下,存在Student表。

     创建Student表的SQL

    1. CREATE TABLE `Student` (
    2. `Sno` char(10) DEFAULT NULL,
    3. `Sname` varchar(20) DEFAULT NULL,
    4. `Ssex` char(2) DEFAULT NULL,
    5. `Sage` tinyint(4) DEFAULT NULL,
    6. `Sdept` varchar(20) DEFAULT NULL
    7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    3.2 创建与Student表对应的类

    创建BTStudent类

    1. package com.example.com_chenshuai.entity;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @AllArgsConstructor
    7. @NoArgsConstructor
    8. public class BTStudent {
    9. private String Sno;
    10. private String Sname;
    11. private String Ssex;
    12. private int Sage;
    13. private String Sdept;
    14. }

    3.3  编写DAO层

    接口StudentDao,有3个抽象方法。分别为

    增加addStudent(BTStudent btStudent);

    查询全部findAll()

    根据学生ID进行查询 findById(String id)

    1. package com.example.com_chenshuai.dao;
    2. import com.example.com_chenshuai.entity.BTStudent;
    3. import java.util.List;
    4. public interface StudentDao {
    5. boolean addStudent(BTStudent btStudent);
    6. List findAll();
    7. BTStudent findById(String id);
    8. }

    实现类StudentDaoImpl

    1. package com.example.com_chenshuai.dao.Impl;
    2. import com.example.com_chenshuai.dao.StudentDao;
    3. import com.example.com_chenshuai.entity.BTStudent;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.jdbc.core.BeanPropertyRowMapper;
    6. import org.springframework.jdbc.core.JdbcTemplate;
    7. import org.springframework.jdbc.core.RowMapper;
    8. import org.springframework.stereotype.Component;
    9. import org.springframework.stereotype.Repository;
    10. import java.util.List;
    11. @Repository
    12. public class StudentDaoImpl implements StudentDao {
    13. @Autowired
    14. private JdbcTemplate jdbcTemplate;
    15. @Override
    16. public boolean addStudent(BTStudent btStudent) {
    17. String sql = "insert into Student values (?,?,?,?,?)";
    18. int n= jdbcTemplate.update(sql,btStudent.getSno(), btStudent.getSname(), btStudent.getSsex(), btStudent.getSage(), btStudent.getSdept());
    19. return 1==n;
    20. }
    21. @Override
    22. public List findAll() {
    23. String sql = "select * from Student";
    24. RowMapper rowMapper = new BeanPropertyRowMapper<>(BTStudent.class);
    25. List list = jdbcTemplate.query(sql, rowMapper);
    26. return list;
    27. }
    28. @Override
    29. public BTStudent findById(String id) {
    30. String sql = "select * from Student where Sno = ?";
    31. RowMapper rowMapper = new BeanPropertyRowMapper<>(BTStudent.class);
    32. BTStudent btStudent=jdbcTemplate.queryForObject(sql,new Object[]{id},rowMapper);
    33. return btStudent;
    34. }
    35. }

    3.4 调用

    这里使用单元测试调用一下

    1. package com.example.com_chenshuai;
    2. import com.example.com_chenshuai.Controller.HiController;
    3. import com.example.com_chenshuai.dao.StudentDao;
    4. import com.example.com_chenshuai.entity.BTStudent;
    5. import org.junit.jupiter.api.Test;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import java.util.List;
    9. @SpringBootTest
    10. class ComChenshuaiApplicationTests {
    11. @Autowired
    12. private HiController hiController;
    13. @Autowired
    14. private StudentDao studentDao;
    15. @Test
    16. void test1() {
    17. String hi = hiController.hi();
    18. System.out.println("hi===="+hi);
    19. }
    20. @Test
    21. void tes2(){
    22. BTStudent btStudent = new BTStudent("201215128","王五","女",20,"LOVE");
    23. boolean b = studentDao.addStudent(btStudent);
    24. System.out.println("b = " + b);
    25. }
    26. @Test
    27. void tes3(){
    28. List list = studentDao.findAll();
    29. System.out.println("list = " + list);
    30. }
    31. @Test
    32. void tes4(){
    33. BTStudent byId = studentDao.findById("201215125");
    34. System.out.println("byId = " + byId);
    35. }
    36. }

    四、什么是rowmapper

    row,行。数据库的中一行数据,也就是一条数据。

    mapper,映射。将一条数据,组装成一个实体类。

    我们在执行查询sql的时候,返回结果是以什么形式存在的呢?我们将返回结果组装成了我们自定义类的实例。

    rowmapper里面,就是写的我们具体组装的逻辑。如下

    1. List tbUsers1 = testRowMapper(sql, null, new RowMapper() {
    2. // 重写map
    3. @Override
    4. public TbUser map(ResultSet rs) throws SQLException {
    5. TbUser tbUser = new TbUser();
    6. // 给tbUser赋值
    7. tbUser.setId(rs.getLong(1));
    8. tbUser.setName(rs.getString(2));
    9. return tbUser;
    10. }
    11. });

    传参中,需要传一个rowmapper,mapper就是我们具体将一条数据封装到我们自定义类里的详细逻辑。(我们将返回结果/一条数据,)组装到了我们自定义类里。

    return的时候,不是return的一大堆字符串,而是一个对象。

  • 相关阅读:
    SQL 转置查询
    避开大坑:win10-CPU版(64位)环境下安装Anaconoda和tensorflow,亲测成功
    侯捷C++复现 :explicit在构造函数中
    运维网关系列1:开发网关的初衷
    【Vue基础】常用指令、事件处理、计算属性的介绍及应用
    Java扫描区块链的工具包|Java扫块|监听token转账
    Windows下pm2调用npm和nuxt的办法
    基于华为超融合的方案设计实践
    phantomjs-prebuilt: Running install script, failed in 32s
    开发常用的 Linux 命令知识积累
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/128014452