没啥可说的
没啥可说的
@Configuration
@MapperScan("com.breez.vote.mapper")
public class MybatispluConfig {
/**
* 配置分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
@Data
@TableName("student")
public class Student implements Serializable {
private Integer id;
private String studentName;
private Integer studentAge;
}
@Data
@TableName("teacher")
public class Teacher implements Serializable {
private Integer id;
private String teacherName;
private Integer teacherAge;
}
这张表的数据来自老师和学生,用来保存来自多张表的数据。
/**
* 学生和老师
*/
@Data
public class QueryVo implements Serializable {
/**
* 学生名字
*/
private String studentName;
/**
* 学生年龄
*/
private Integer studentAge;
/**
* 老师姓名
*/
private String teacherName;
/**
* 老师年龄
*/
private Integer teacherAge;
}
这里需要注意:写完SQL语句后,需要在结尾加上
${ew.customSqlSegment}
,查询参数,由mybatis plus
自动拼装。
<?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">
<mapper namespace="com.breez.vote.mapper.StudentMapper">
<select id="findByPage" resultType="com.breez.vote.domain.vo.QueryVo">
select * from student,teacher ${ew.customSqlSegment}
</select>
</mapper>
public interface StudentMapper extends BaseMapper<Student> {
/**
*自定义分页条件查询
* @param page 分页参数
* @param wrapper 查询参数
* @return
*/
IPage<QueryVo> findByPage(IPage<QueryVo> page, @Param(Constants.WRAPPER) QueryWrapper<QueryVo> wrapper);
}
public interface StudentService extends IService<Student> {
/**
*
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 分页后的数据
*/
public IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper);
}
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
@Resource
private StudentMapper queryMapper;
/**
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 分页后的数据
*/
@Override
public IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper) {
return queryMapper.findByPage(page, queryWrapper);
}
}
@RestController
@RequestMapping("data")
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("query")
public Object query() {
Page<QueryVo> page = new Page<>(1, 2);
IPage<QueryVo> queryVoPage = studentService.findByPage(page, new QueryWrapper<>());
return queryVoPage;
}
}
这里出现这个结果原因(出现了
12
条数据【3*4=12
】)是我没有在SQL语句中写多表查询条件
,出现了笛卡尔积
,加上多表查询条件后就不会出现相同的了(李刚
)。
public interface UserMapper {//可以继承或者不继承BaseMapper
/**
*
* 查询 : 根据state状态查询用户列表,分页显示
*
*
* @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
* @param state 状态
* @return 分页对象
*/
IPage<User> selectPageVo(Page<?> page, Integer state);
}
<select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">
SELECT id,name FROM user WHERE state=#{state}
</select>
public IPage<User> selectUserPage(Page<User> page, Integer state) {
// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
// page.setOptimizeCountSql(false);
// 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询
// 要点!! 分页返回的对象与传入的对象是同一个
return userMapper.selectPageVo(page, state);
}
一个字: 巴适