后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
目录
- 后端数据增删改查
- Springboot 实体(entity)类引进
- 添加UserMapper接口
- 创建对用的UserController
- 注意
- 数据库查询不一致
- 新增
- 数据更新
- 删除
- postman测试
后端数据增删改查
基于之前构建系统,实现用户数据的CRUD。
- 打开navicat16,新建表
sys_user·
,表内字段如下图所示,注意创建之后应设置为主键自增。
- 设置create_time为当前时间自动填充。
- 添加信息
Springboot 实体(entity)类引进
在IDEA中创建一个包entity,并新建一个实体类UserEntity。
代码如下
public class UserEntity {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private String nickname;
private String address;
private String create_time;
private String avatar;
private String role;
public UserEntity() {
}
public UserEntity(Integer id, String username, String password, String email, String phone, String nickname, String address, String create_time, String avatar, String role) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.phone = phone;
this.nickname = nickname;
this.address = address;
this.create_time = create_time;
this.avatar = avatar;
this.role = role;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCreate_time() {
return create_time;
}
public void setCreate_time(String create_time) {
this.create_time = create_time;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
也可使用lombok
提供的插件,使用@Date
实现上述功能,代码如下:
import lombok.Data;
@Data
public class UserEntity {
private Integer id;
private String username;
private String password;
private String email;
private String phone;
private String nickname;
private String address;
private String create_time;
private String avatar;
private String role;
}
添加UserMapper接口
在项目目录下建一个mapper包,在此包下建立UserMapper接口,UserMapper接口中代码如下:
@Mapper
public interface UserMapper {
@Select("select * from sys_user")
List<UserEntity> findAll();
}
@Mapper
:为注入接口注解。
@Select
:查询语句注解。
创建对用的UserController
@Autowired
private UserMapper userMapper;
@GetMapping("/")
public List<UserEntity> index(){
return userMapper.findAll();
}
注意
这里我们已经开始不使用html文件了,也就不需要插件了,请大家务必记得将这个依赖删除,否则运行的时候就会报错。
在pom文件中删除这个thymeleaf依赖。
运行前检查连接数据库
数据库查询不一致
与表内数据不一致,分析原因:
数据库未引入:
在注解@select
上alt+enter
弹出如下界面:
第一次使用这个会自动下载包等待片刻后出现:
连接成功!
点击Idea右侧与navicat 16 一致说明连接成功
这个地方全局与全项目都设置为Mysql
但是修改后还是有问题,冥思苦想Controller更改代码为:
@Controller
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/user")
@ResponseBody
public List<UserEntity> index(){
return userMapper.findAll();
}
成功:
其实也可修改为:
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/")
public List<UserEntity> index(){
return userMapper.findAll();
}
}
效果与上诉一致,注意 @RestController
相当于@Controller + @ResponseBody
但前者无法返回界面只能返回数据。
仔细搜索资料@RequestMapping("/user")
不好用原因找到,既应改成@RequestMapping("user")
输入连接为:http://localhost:8080/user/
修改后代码为:
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/")
public List<UserEntity> index(){
return userMapper.findAll();
}
}
新增
- 在mapper中新增方法代码如下:
@Insert("insert into sys_user(username,password,email,phone,nickname,address,avatar,role) " +
"VALUES(#{username},#{password},#{email},#{phone},#{nickname},#{address},#{avatar},#{role});")
//这里只是做测试使用
int insert(UserEntity userEntity);
特别说明: 不管是新增还是更新,这样写是最简单的方式,没有表关联,也还不能实现对个别字段的新增。这时候就需要动态SQL语句,后面会讲xml文件。
- 新建UserService类
新建一个service包,并新建一个UserService类,进行数据业务逻辑。
注意注解位置。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public int save(UserEntity userEntity){
return userMapper.insert(userEntity);
}
}
- UserController类添加save接口
注意添加或者修改使用post,查询一般为get,代码如下:
@Autowired
public UserService userService;
@PostMapping
//这里做了一个单纯的添加的示例,使用的是mapper中的insert方法,修改也用这个方法
public Integer save(@RequestBody UserEntity userEntity){
return userService.save(userEntity);
}
数据更新
@Update("update sys_user set username=#{username},password=#{password}," +
"nickname=#{nickname},email=#{email},phone=#{phone},address=#{address} where id=#{id}")
int update(UserEntity userEntity);
private UserMapper userMapper;
public int save(UserEntity userEntity){
//如果user没有id则表明是新增
if(userEntity.getId()==null){
return userMapper.insert(userEntity);
}
//否则就是更新
else {
return userMapper.update(userEntity);
}
}
使用postman作为测试接口,进行更新测试。这时候就会发现,更新的时候虽然可以实现对ID的判断,但是如果只是更新某一个字段,就会发现,其他的字段值变为空了,这时候就需要动态SQL了,后面XML需要登场了。
删除
@Delete("delete from sys_user where id=#{id}")
int deleteById(@Param("id") Integer id);
public Integer deleteById(Integer id) {
return userMapper.deleteById(id);
}
@DeleteMapping("/{id}")
public Integer deleteById(@PathVariable Integer id){
return userService.deleteById(id);
}
postman测试
查
增
改
id 为1的数据发生了改变。
删
id 为一数据被删除。