> 文章列表 > 一文看懂SpringBoot操纵数据库

一文看懂SpringBoot操纵数据库

一文看懂SpringBoot操纵数据库

1.前言

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

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

2.Spring架构

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

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

 <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId></dependency>

3.SpringBoot操纵数据库

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

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

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

 <dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>3.4.2</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.4.RELEASE</version><scope>compile</scope></dependency>

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

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

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

@RestController
public class StudentController {@AutowiredJdbcTemplate jdbcTemplate;@GetMapping("/students")public List<Map<String,Object>> userList(){String sql = "select * from student";List<Map<String, Object>> 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依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version>
</dependency>

在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依赖:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version>
</dependency>

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

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

在mapper.xml文件里写:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.dao.StudentDao"><select id="getAll" resultType="com.example.entity.Student">select * from student</select>
</mapper>

最后在controller里写:

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

总结

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

邮箱百科网