spring-boot-route(七)整合jdbcTemplate操作数据库

    科技2024-04-19  6

    在一部分内容中,我们学习了Restful接口的编写,及接口文档的生成。我们需要将接口数据进行持久化存储,这一部分我们主要学习几种持久化框架将数据进行存储。本部分内容中,我们都将使用mysql为例来做为演示数据库。

    在刚开始接触数据库操作的时候我们都会使用JDBC来进行数据库操作,但是每次都要创建连接,关闭连接非常麻烦,Spring将JDBC进行了简易的封装成了一个新的框架——JdbcTemplate。

    项目搭建

    1 添加mysql依赖

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

    2. 添加jdbcTemplate依赖

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

    3. 配置mysql

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/simple_fast?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&useAffectedRows=true&allowPublicKeyRetrieval=true username: root password: root

    简单操作数据库

    新建一张表student用来测试JdbcTemplate的常用功能。建表语句如下:

    CREATE TABLE `student` ( `student_id` int(30) NOT NULL, `age` int(1) DEFAULT NULL COMMENT '年龄', `name` varchar(45) DEFAULT NULL COMMENT '姓名', `sex` int(1) DEFAULT NULL COMMENT '性别:1:男,2:女,0:未知', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `status` int(1) DEFAULT NULL COMMENT '状态:1:正常,-1:删除', PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='学生表'

    对应的实体类如下:

    @Data @NoArgsConstructor @AllArgsConstructor public class StudentBean implements Serializable { private static final long serialVersionUID = 4618004018169112427L; private Integer studentId; private Integer age; private String name; private Integer sex; private Date createTime; private Integer status; }

    JdbcTemplate提供了比较完善的数据库操作API,日常开发中比较常用的API主要为两类,分别是

    query与queryXXXupdate与batchUpdate

    JdbcTemplate的使用也非常简单,哪儿需要使用注入即可

    @Autowired private JdbcTemplate jdbcTemplate;

    1 查询单个实体

    public StudentBean getStudent(int status){ String sql = "select * from student where status = ? limit 1"; return jdbcTemplate.queryForObject(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class)); }

    2 查询List集合

    public List<StudentBean> studentBeanList(int status){ String sql = "select * from student where status = ?"; return jdbcTemplate.query(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class)); }

    3. 删除操作

    public int deleteStudent(int status){ String sql = "delete from student where status = 0"; return jdbcTemplate.update(sql); }

    4. 更新操作

    public int updateStudent(int studentId,String name){ String sql = "update student set name = ? where student_id = ?"; return jdbcTemplate.update(sql,new Object[]{name,studentId}); }

    5. 插入操作

    public int addStudent(){ String sql = "insert into student(student_id,age,name,status) values(?,?,?,?)"; return jdbcTemplate.update(sql,new Object[]{30,18,"Java旅途",0}); }

    6. 批量插入

    JdbcTemplate提供了批量插入的API,为了减少与数据库的操作,提高插入效率,将待插入的数据批量放在缓冲区,一次批量插入多条数据。

    public int batchAddStudent(){ // 构造list集合 List<StudentBean> studentBeanList = new ArrayList<>(); StudentBean studentBean = new StudentBean(31, 31, "Java旅途", 1, new Date(), 1); StudentBean studentBean1 = new StudentBean(32, 32, "javatrip", 1, new Date(), 1); studentBeanList.add(studentBean); studentBeanList.add(studentBean1); String sql = "insert into student values(?,?,?,?,?,?)"; int[] ints = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { StudentBean student = studentBeanList.get(i); ps.setInt(1, student.getStudentId()); ps.setInt(2, student.getAge()); ps.setString(3, student.getName()); ps.setInt(4, student.getSex()); ps.setDate(5,new java.sql.Date(System.currentTimeMillis())); ps.setInt(6, student.getStatus()); } @Override public int getBatchSize() { return studentBeanList.size(); } }); return ints.length; }

    上面只是演示了几个简单的例子,如果需要更详细的用法可以参考官方提供的JdbcTemplate API。JdbcTemplate对于初学者来说是比较容易上手的一个框架,使用起来也非常方便。但是也存在一些缺点,它是将sql硬编码到java代码中,如果需要修改sql,就需要重新编译java代码,不利于维护。


    本文示例代码已上传至github,点个star支持一下!

    Spring Boot系列教程目录

    spring-boot-route(一)Controller接收参数的几种方式

    spring-boot-route(二)读取配置文件的几种方式

    spring-boot-route(三)实现多文件上传

    spring-boot-route(四)全局异常处理

    spring-boot-route(五)整合swagger生成接口文档

    spring-boot-route(六)整合JApiDocs生成接口文档

    spring-boot-route(七)整合jdbcTemplate操作数据库

    spring-boot-route(八)整合mybatis操作数据库

    spring-boot-route(九)整合JPA操作数据库

    spring-boot-route(十)多数据源切换

    spring-boot-route(十一)数据库配置信息加密

    spring-boot-route(十二)整合redis做为缓存

    spring-boot-route(十三)整合RabbitMQ

    spring-boot-route(十四)整合Kafka

    spring-boot-route(十五)整合RocketMQ

    spring-boot-route(十六)使用logback生产日志文件

    spring-boot-route(十七)使用aop记录操作日志

    spring-boot-route(十八)spring-boot-adtuator监控应用

    spring-boot-route(十九)spring-boot-admin监控服务

    spring-boot-route(二十)Spring Task实现简单定时任务

    spring-boot-route(二十一)quartz实现动态定时任务

    spring-boot-route(二十二)实现邮件发送功能

    spring-boot-route(二十三)开发微信公众号

    这个系列的文章都是工作中频繁用到的知识,学完这个系列,应付日常开发绰绰有余。如果还想了解其他内容,扫面下方二维码告诉我,我会进一步完善这个系列的文章!

    Processed: 0.040, SQL: 9