小白做毕设---后台管理系统
任务四 后端数据增删改查(@Mapper注解)
任务五 .xml配置方式动态实现数据增删查改
在任务四我们实现了后端数据增删改查,大家熟练使用@Mapper注解及Mybatis注解方式实现数据CRUD;并且学会使用Postman做运行测试。
本次任务我们作为拓展训练,主要给大家介绍spring boot集成mybatis时使用xml配置的方式。
通常来说,使用注解方式还是xml配置方式,没有绝对要求。对于如毕业设计之类的小型管理系统,不用考虑维护、分层等强制规范要求,写起来快,代码内嵌也很直接,注解可以是不错的选择。
当然,从学习的角度来说,肯定要熟悉xml配置方式。通常一个团队一个中长期项目来说,同一规范做法很有必要。用注解对于涉及到多表、多字段的复杂sql来说就很不方便,也很不友好,这是最重要考虑的,所以商业项目一般统一用xml。特别是有个几百上千的sql之后,xml的好处,就是sql有哪些是明明白白的,而且比较容易做统计,对于复杂sql也好控制。
通过本次任务,大家能够:
(1)掌握配置文件的使用方法;
(2)了解mybatisx插件的使用方法;
(3).xml配置方式实现数据CRUD。
一、数据更新
在任务四中,我们提到过一个问题,关于插入和更新我们用了一个save方法,通过判断id是否存在,如果id已经存在,就是更新,如果id不存在就是添加。这种逻辑存在一个很大的问题,就是,由于一些字段可以是非空,所以插入的时候没有问题,但是一旦,有些字段没有值,可是ID已经存在,这时候如果使用同样的代码就会把原来有值的数据更新成空值了。
当然我们也可以新编写一个的注解update,但这个时候的SQL语句就会比较复杂,我们就最好使用.xml配置方式动态实现数据更新。
1. 新建User.xml文件
在resource文件夹下新建mapper文件夹,然后新建User.xml.
User.xml 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace指向mapper.xml所对应的Mapper接口-->
<mapper namespace="com.example.demo.mapper.UserMapper">
</mapper>
注意:必须修改namespace是自己的项目, 这里的namespace已经改好了。为了保证自己的项目不会写错,告诉大家一个小技巧:
可以到对应的UserMapper这个文件中鼠标右键单击Copy Path…,找到命名空间。并修改上面的命名空间。
2.安装mybatisx插件
安装一个mybatisx插件,方便xml文件与数据层切换。
安装好这个插件,在.xml文件前面 会有一个忍者小鸟的图标出现,就说明已经建立的对应关系。
3. 在User.xml文件中添加update标签
在User.xml文件中添加更新update标签。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace指向mapper.xml所对应的Mapper接口-->
<mapper namespace="com.example.demo.mapper.UserMapper">
<update id="update">
update sys_user
<set><!--这里我们做这样的判断,主要是为了实现不将原有的数据置空,当然,也可以不判断,就写最基本的SQL语句-->
<if test="username !=null ">
username=#{username},
</if>
<if test="password !=null ">
password=#{password},
</if><!--一般情况password不能修改,修改密码我们通常再做一个单独的业务-->
<if test="nickname !=null ">
nickname=#{nickname},
</if>
<if test="email !=null ">
email=#{email},
</if>
<if test="phone !=null ">
phone=#{phone},
</if>
<if test="address !=null ">
address=#{address}
</if>
</set>
<where>
id=#{id}
</where>
</update>
</mapper>
4. 删除Usermapper中的@update注解。
二选一,要嘛在.xml文件中添加SQL标签,要嘛在Usermapper中添加@update注解。
Usermapper代码为:可以看到update方法前没有任何注解了,而且由于有了.xml配置文件,在这个方法前面出现了忍者小鸟图标。
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("select * from sys_user")
List<User> findAll();
@Insert("insert into sys_user(username,password,email,phone,nickname,address) " +
"VALUES(#{username},#{password},#{email},#{phone},#{nickname},#{address});")
int insert(User user);
int update(User user);
}
5.修改或者添加路由
@PostMapping
//这里做了一个单纯的添加的示例,使用的是UserService中的saveorupdate方法,实现添加和更新
public Integer save(@RequestBody User user){
return userService.saveorupdate(user);
}
6.运行项目
使用postman作为测试接口,进行数据更新测试。
{
"id":"8",
"username":"测试88test",
"password":"123",
"nickname":"孙悟空"
}
此时可能会提示500错误。
IDEA编译提示的错误为:
这是因为我们没有在application.yml进行Mybatis配置,导致找到xml文件以及update接口。
7.application.yml进行Mybatis配置
server:
port: 8084
spring:
datasource:
username: root
password: root
#url中database为对应的数据库名称
url: jdbc:mysql://localhost:3306/qing?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml #扫描所有mapper文件夹
8.再次运行项目
使用postman作为测试接口,进行数据更新测试。
数据更新成功,数据表中数据同样更新成功,
说明xml配置文件正常工作。
使用同样的方法,可以完成数据增删改查,由于这里的项目比较简单,这里就略过,因为后面数据的CRUD,我们还会给大家介绍mybatis-plus。
任务总结
本次任务主要做了一个关于动态SQL的拓展训练,目的是希望同学们能对mybatis操作和读取数据库有更深的了解,任务四采用注解方式,任务五采用.xml文件方式。