乐趣区

关于java:springbootroute七整合jdbcTemplate操作数据库

在一部分内容中,咱们学习了 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 与 queryXXX
  • update 与 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 代码,不利于保护。

此是 spring-boot-route 系列的第七篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触 Spring Boot 的同学有一个零碎的意识。本文已收录至我的 github,欢送各位小伙伴star

github:https://github.com/binzh303/s…

点关注、不迷路

如果感觉文章不错,欢送 关注 点赞 珍藏,你们的反对是我创作的能源,感激大家。

如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。

如果你还想更加深刻的理解我,能够微信搜寻「Java 旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天 7:30 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!

退出移动版