在一部份內容中,咱們學習了Restful接口的編寫,及接口文檔的生成。咱們須要將接口數據進行持久化存儲,這一部分咱們主要學習幾種持久化框架將數據進行存儲。本部份內容中,咱們都將使用mysql爲例來作爲演示數據庫。java
在剛開始接觸數據庫操做的時候咱們都會使用JDBC來進行數據庫操做,可是每次都要建立鏈接,關閉鏈接很是麻煩,Spring將JDBC進行了簡易的封裝成了一個新的框架——JdbcTemplate。mysql
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
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的經常使用功能。建表語句以下:git
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='學生表'
對應的實體類以下:github
@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主要爲兩類,分別是redis
JdbcTemplate的使用也很是簡單,哪兒須要使用注入便可spring
@Autowired private JdbcTemplate jdbcTemplate;
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)); }
public List<StudentBean> studentBeanList(int status){ String sql = "select * from student where status = ?"; return jdbcTemplate.query(sql,new Object[]{status},new BeanPropertyRowMapper<>(StudentBean.class)); }
public int deleteStudent(int status){ String sql = "delete from student where status = 0"; return jdbcTemplate.update(sql); }
public int updateStudent(int studentId,String name){ String sql = "update student set name = ? where student_id = ?"; return jdbcTemplate.update(sql,new Object[]{name,studentId}); }
public int addStudent(){ String sql = "insert into student(student_id,age,name,status) values(?,?,?,?)"; return jdbcTemplate.update(sql,new Object[]{30,18,"Java旅途",0}); }
JdbcTemplate提供了批量插入的API,爲了減小與數據庫的操做,提升插入效率,將待插入的數據批量放在緩衝區,一次批量插入多條數據。sql
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代碼,不利於維護。數據庫
star
支持一下!spring-boot-route(一)Controller接收參數的幾種方式segmentfault
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(十二)整合redis作爲緩存
spring-boot-route(十三)整合RabbitMQ
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(二十二)實現郵件發送功能
這個系列的文章都是工做中頻繁用到的知識,學完這個系列,應付平常開發綽綽有餘。若是還想了解其餘內容,掃面下方二維碼告訴我,我會進一步完善這個系列的文章!