距离上一次成长记录已经过去了3周了,罪过罪过。
话不多说,作为一个标准的增删改查工程师,那么mysql的使用无疑是重中之重了。
JdbcTemplate是Spring提供的访问数据库的方式之一,是Spring中最基本、最底层的访问数据库的实现方式。
今天的目标就是使用JdbcTemplate实现增删改查功能咯。
1.首先是要确保安装好mysql了。
2.建一个test的数据库
3.新增个简单的user表:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 复制代码
在pom.xml将加入下面内容
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
复制代码
配置properties文件,将数据库信息填写好:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 复制代码
实体类对应数据库中的表结构
package com.example.demo.controller;
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '/'' +
", age=" + age +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
复制代码
新建MysqlController.java
package com.example.demo.controller;
import com.alibaba.fastjson.JSONObject;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@RestController
public class MysqlController {
@Resource
private JdbcTemplate jdbcTemplate;
@RequestMapping("/getAllData")
public Object getAllData() {
String sql = "select * from user";
List<User> Users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>() {
//这边使用了匿名类
//原生JDBC会把从数据库查询出来的记录全都被保存在ResultSet结果集中,使用RowMapper来处理返回数据到User的实体类上
//目前有两个主要的RowMapper实现SingleColumnRowMapper和BeanPropertyRowMapper,分别对应单列和多列数据。
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User User = new User();
User.setId(resultSet.getInt("id"));
User.setName(resultSet.getString("name"));
User.setAge(resultSet.getInt("age"));
return User;
}
});
for (User s : Users) {
System.out.println(s);
}
return Users;
}
//更新、插入、删除的操作都是使用jdbcTemplate的update
@RequestMapping("/updateNameById")
public String updateNameById(@RequestParam(value = "name") String name, Integer id) {
String sql = "update user set name=? where id=?";
int flag = jdbcTemplate.update(sql, new Object[]{name, id});
String returnStr;
if (flag > 0) {
returnStr = "更新成功";
} else {
returnStr = "更新失败";
}
System.out.println(flag);
return returnStr;
}
@RequestMapping("/insertData")
public String insertData(@RequestParam(value = "name") String name, Integer age) {
String sql = "insert into user(name,age) values (?,?)";
int flag = jdbcTemplate.update(sql, new Object[]{name, age});
String returnStr;
if (flag > 0) {
returnStr = "插入成功";
} else {
returnStr = "插入失败";
}
System.out.println(flag);
return returnStr;
}
@RequestMapping("/deleteData")
public String deleteData(@RequestParam(value = "id") Integer id) {
String sql = "delete from user where id=?";
int flag = jdbcTemplate.update(sql, new Object[]{id});
String returnStr;
if (flag > 0) {
returnStr = "删除成功";
} else {
returnStr = "删除失败";
}
System.out.println(flag);
return returnStr;
}
}
复制代码
初始情况-->http://localhost:8080/getAllData
[{"id":1,"name":"caohaoyu","age":3},{"id":3,"name":"chy","age":20}]
______________________________________________________________________________
新增一条数据,http://localhost:8080/insertData?name=chy2&age=21
[{"id":1,"name":"caohaoyu","age":3},{"id":3,"name":"chy","age":20},{"id":5,"name":"chy2","age":21}]
______________________________________________________________________________
修改id为5的name,http://localhost:8080/updateNameById?id=5&name=caohaoyu2
[{"id":1,"name":"caohaoyu","age":3},{"id":3,"name":"chy","age":20},{"id":5,"name":"caohaoyu2","age":21}]
______________________________________________________________________________
删除id为1的记录,http://localhost:8080/deleteData?id=1
[{"id":3,"name":"chy","age":20},{"id":5,"name":"caohaoyu2","age":21}]
复制代码
基本的增删改查完成!
1.Dao层:全称Data Access Object。Dao层比较底层,负责与数据库打交道具体到对某个表、某个实体的增删改查。
2.Service层:又叫服务层或业务层,封装Dao层的操作,使一个方法对外表现为实现一种功能。
3.Controller层:业务控制层,负责接收数据和请求,并且调用Service层实现这个业务逻辑。
在学习过程中,了解到层的内容,但是仅是简单的实现所以就在Controller层完成所有功能,后续再对层这个概念进行深入的实践。