mybatis-plus跨表条件查询
1、建表
#新建一个user表
CREATE TABLE `user`(
`id` INT(10) NOT NULL auto_increment,
`name` VARCHAR(64) NOT NULL,
`password` VARCHAR(64) NOT NULL,
department_id INT(10),
PRIMARY KEY(id)
),
#新建一个department表
CREATE TABLE department(
`id` INT(10) NOT NULL auto_increment,
dept_name VARCHAR(64) NOT NULL,
PRIMARY KEY(id)
)
2、创建工程,导入mybatis-plus即其他依赖
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.7</version>
</dependency>
3.1、创User实体类
/**
* @author sfybxs
*/
3.2、创department实体类
/**
* @author sfybxs
*/
4、编写mapper也是最重要的一部分
在resource下面创建一个mapper文件夹下面创建UserMapper.xml文件
导入依赖
sql语句
<select id="findUserPage" resultType="User">
SELECT u.id,u.`name`,u.`password`,u.department_id,
d.dept_name AS `deptName`
FROM `user` u
INNER JOIN department d
ON u.department_id = d.id
${ew.customSqlSegment}
</select>
</mapper>
<select id="findUserPage">
SELECT u.id,u.`name`,u.`password`,u.department_id,
d.dept_name AS `deptName`
FROM `user` u
INNER JOIN department d
ON u.department_id = d.id
${ew.customSqlSegment}
</select>
mapper接口
/**
* <p>
* 用户表 Mapper 接口
* </p>
*
* @author mjy
* @since 2021-01-20
*/
public interface UserMapper extends BaseMapper<User> {
/**
* 自定义多表查询
* @param page
* @param wrapper
* @return
*/
IPage<User> findUserPage(Page<User> page,
配置yml文件
server
5、编写service层代码
service接口层代码
/**
* @author sfybxs
*/
public interface UserService extends IService<User> {
/**
*
* @param userVo
* @param wrapper 用来传入参数到sql语句中
* @return
*/
List<User> findUserPage(UserVo userVo ,
因为真正的业务的时候许需要通过多个字段进行查询,是需要封装一个vo(view object)来进行数据库的查询,因为没设置这么多字段,所以,我的vo就三个字段,就通过账号和密码以及部门编号进行查询,可以通过业务来修改vo中的属性
/**
* @author sfybxs
*/
编写一个utils类来判断字段是否为空
/**
* @author sfybxs
*/
public class UserUtils {
public static QueryWrapper<User> getQueryWrapper(UserVo userVo){
QueryWrapper queryWrapper = new QueryWrapper();
if (userVo!=null){
if (!StringUtils.isEmpty(userVo.getDepartmentId())){
queryWrapper.eq("department_id",userVo.getDepartmentId());
}
if (!StringUtils.isEmpty(userVo.getName())){
queryWrapper.eq("name",userVo.getName());
}
if (!StringUtils.isEmpty(userVo.getPassword())){
queryWrapper.eq("password",userVo.getPassword());
}
}
return queryWrapper;
}
}
编写service实现类
6、controller根据自己的需求进行书写
1.先要创建一个返回状态吗码的接口
/**
* @author sfybxs
*/
public interface CustomizeResultCode {
/**
* 获取错误状态码
* @return 错误状态码
*/
Integer getCode();
/**
* 获取错误信息
* @return 错误信息
*/
String getMessage();
}
2.编写实现类
/**
* @author sfybxs
*/
public enum ResultCode implements CustomizeResultCode{
/**
* 20000:"成功"
*/
SUCCESS(20000,"成功"),
/**
* 20001:"失败"
*/
ERROR(20001,"失败"),
/**
* 3005:"密码不正确!"
*/
PASS_NOT_CORRECT(3005, "密码不正确!请重新尝试!"),
/**
* 3006:"算数异常"
*/
ARITHMETIC_EXCEPTION(3006, "算数异常"),
/**
* 3007:"用户不存在"
*/
USER_NOT_FOUND_EXCEPTION(3007, "用户不存在"),
/**
* 3007:"用户不存在"
*/
DEPT_NOT_FOUND_EXCEPTION(3008, "没有查询到部门信息"),
/**
* 3006:"尚未登录!"
*/
NOT_LOGIN(3006, "尚未登录!"),
/**
* 2005:"没有找到这一条历史信息!有人侵入数据库强制删除了!"
*/
INTRODUCTION_NOT_FOUND(2005, "没有找到这一条历史信息!有人侵入数据库强制删除了!"),
/**
* 404:没有找到对应的请求路径
*/
PAGE_NOT_FOUND(404, "你要请求的页面好像暂时飘走了...要不试试请求其它页面?"),
/**
* 500:服务端异常
*/
INTERNAL_SERVER_ERROR(500, "服务器冒烟了...要不等它降降温后再来访问?"),
/**
* 2001:未知异常
*/
UNKNOW_SERVER_ERROR(2001, "未知异常,请联系管理员!");
;
private Integer code;
private String message;
ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
}
3.编写一个公共返回的接口
/**
* 公共返回结果
*
* @author sfybxs
*/