一文看懂SpringBoot操纵数据库

1.前言

        很多同学进入公司就开始参与项目开发,大多数情况是对某个项目进行维护或者需求迭代,能够从0到1参与到项目中的机会很少,因此并没有多少机会了解某些技术的运行机制。换句话说,有的面试官在面试的时候就会探讨深层的技术问题,而不是关心你知道什么业务,怎么用技术去实现业务。

        今天要讲的就是SpringBoot操纵数据库,这个大家做得比较多的就是去写一个Dao的类,然后在mapper.xml文件里面写SQL,最后封装成Service供Controller调。如果让你去搭建好这个项目的基础框架,你该怎么做呢,我们今天就来看看。

2.Spring架构

        下面这张图是我最喜欢看的一张图,也是对Spring体系结构描述最准确的一张图,大家学习Spring了解最多的可能是IOC、DI、AOP这些名词,其实Spring还有一个很强大的组件就是Spring Data。

一文看懂SpringBoot操纵数据库_第1张图片

         如果是只用Spring,则需要采用下面依赖,就可以进行数据库的访问了:

 
    org.springframework.data
    spring-data-jpa
  

3.SpringBoot操纵数据库

        现在的项目一般都是基于SpringBoot的,我们只需通过下面的依赖即可访问数据源:

 
     org.springframework.boot
     spring-boot-starter-jdbc

        点进这个依赖进去看,会发现它又依赖于:

 
      com.zaxxer
      HikariCP
      3.4.2
      compile
 
 
      org.springframework
      spring-jdbc
      5.2.4.RELEASE
      compile
 

        我们知道了SpringBoot的默认连接池用的HikariCP。因为我们连接的是mysql数据库,因此除了依赖spring-boot-starter-jdbc,还需要依赖:


     mysql
     mysql-connector-java
 

        下面在数据库建一张student的表(这个不需要讲如何建吧,如果需要欢迎留言),然后写一个controller类如下:

@RestController
public class StudentController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/students")
    public List> userList(){
        String sql = "select * from student";
        List> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }
}

        启动SpringBoot,如何建一个SpringBoot项目如果不会可以参考我的文章:

        在浏览器中输入:http://localhost:8080/students

        结果就来了,如何结果没出来的欢迎留言,我会及时解答。这个时候看控制台的输出,会发现是使用的HikariPool

2023-04-13 22:47:56.526  INFO 22916 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-04-13 22:47:58.365  INFO 22916 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

4.配置数据库连接池Druid

不用SpringBoot自带的连接池,使用阿里巴巴的Druid连接池,添加pom依赖:


    com.alibaba
    druid
    1.1.12

在application.yml里面增加数据源类型:

 type: com.alibaba.druid.pool.DruidDataSource

重新启动服务,调用上面的接口:

2023-04-13 22:57:26.563  INFO 18764 --- [nio-8080-exec-1] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited

5.使用MyBatis

好的数据访问离不开优秀的持久层框架,这时就要用MyBatis,用了它不仅可以将SQL和Java代码分离,还能非常方便的讲Java实体与数据库数据做映射。添加pom依赖:


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.2

写一个实体类接收数据,字段和数据库里一致即可,这里就不贴代码了。再写一个接口:

@Mapper
public interface StudentDao {
    List getAll();
}

在mapper.xml文件里写:



    

最后在controller里写:

   @GetMapping("/studentList")
    public List studentList(){
        List list = studentDao.getAll();
        return list;
    }

总结

        今天一步步从架构谈起,讲到如何去使用更优秀的连接池以及持久层框架去做数据存储,希望能让大家更清楚这里面的原理。

你可能感兴趣的:(Spring,Boot,数据库,spring,boot,java,Druid,MyBatis)