java之MP链表查询+MP代码生成器
针对与MP的基本操作CRUD已经在 SpringBoot整合swagger+MP+PageHelper 随笔中写完
现在操作MybatisPlass链表分页查询
1.1 entity实体类
student实体类:【student】
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("学生实体类")
public class student {
@ApiModelProperty(value = "学生编号")
private int id;
@ApiModelProperty(value = "学生姓名")
private String name;
@ApiModelProperty(value = "学生手机号")
private String phone;
@ApiModelProperty(value = "学生邮箱")
private String email;
@ApiModelProperty(value = "学生专业")
private String profession;
@ApiModelProperty(value = "学生年龄")
private int age;
@ApiModelProperty(value = "学生性别")
private int gender;
@ApiModelProperty(value = "学生班级")
private int status;
@ApiModelProperty(value = "入学时间")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date createtime;
@TableField(exist = false)
@ApiModelProperty("班级类")
private TblClass tblClass;
}
班级实体类:【TblClass】
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("班级名称实体类")
@TableName("tbl_class")
public class TblClass{
@TableId(value = "cid")
@ApiModelProperty("班级编号")
private int cid;
@ApiModelProperty("班级名称")
private String cname;
}
条件实体类:【studentvo】
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "学生搜索条件实体类")
public class StudentVo {
@ApiModelProperty(value = "以学生姓名为条件搜索")
private String name;
@ApiModelProperty(value = "学生入学开始时间")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date start;
@ApiModelProperty(value = "学生入学结束时间")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private Date ent;
}
1.2 dao层
可以继续使用上一篇创建的dao层,也可以新建dao层并创建dao层接口类且继承extends BaseMapper<student>
并在dao层中模拟MP<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
列:
public interface StudentDao extends BaseMapper<student> {
IPage<student> selectPageWithStudent(IPage<student> page, @Param("ew")Wrapper<student> queryWrapper);//这里的泛型根据自己的实体类变化
}
1.3 Mapper映射
新建Mapper映射文件,且地址指向dao层,并进行链表操作
<?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必须和dao接口的名称一模一样-->
<mapper namespace="com.aaa.dao.StudentDao">
<resultMap id="selectPageWithStudentMap" type="com.aaa.entity.student" autoMapping="true">
<id property="id" column="id"/>
<association property="tblClass" javaType="com.aaa.entity.TblClass" autoMapping="true">
<id property="cid" column="cid"/>
</association>
</resultMap>
<select id="selectPageWithStudent" resultMap="selectPageWithStudentMap">
SELECT * FROM `student`
JOIN tbl_class on student.status = tbl_class.cid
<if test="ew != null and ew.customSqlSegment != null">
${ew.customSqlSegment}
</if>
</select>
</mapper>
1.4 service层
Service接口:
Result seleAll(Integer page, Integer size,StudentVo studentVo);
Serviceim接口实现类:
@Override
public Result seleAll(Integer page, Integer size, StudentVo studentVo) {
IPage<student> ipage = new Page<>(page,size);
QueryWrapper<student> studentQueryWrapper = new QueryWrapper<>();
if(StringUtils.hasText(studentVo.getName())){
studentQueryWrapper.like("name",studentVo.getName());
}
if (Objects.nonNull(studentVo.getStart())){
studentQueryWrapper.ge("createtime",studentVo.getStart());
}
if(Objects.nonNull(studentVo.getEnt())){
studentQueryWrapper.le("createtime",studentVo.getEnt());
}
IPage<student> iPage = studentDao.selectPageWithStudent(ipage, studentQueryWrapper);
return iPage != null ? new Result(200,"查询学生成功",iPage): new Result(500,"查询学生失败",null);
}
【注:这里需要进行条件非空判断,如果有值就按照条件查询,如果无值就默认查询全部】
1.5 controller层
@ApiOperation(value = "查询学生全部信息")
@ApiImplicitParams(value = {@ApiImplicitParam(name = "page", value = "分页当前页数", required = true, dataType = "int"),
@ApiImplicitParam(name = "size", value = "分页当前条数", required = true, dataType = "int")})
@PostMapping("/seleall")
public Result seleAll(Integer page, Integer size,@RequestBody StudentVo studentVo) {
return service.seleAll(page, size,studentVo);
}
1.6 测试运行
打开浏览器地址栏输入http://localhost:8080/doc.html进行接口文档测试
1.6.1 无条件进行查询:
查询成功,链表查询成功,分页查询成功
1.6.2 有条件进行查询
条件查询成功,链表查询成功,分页查询成功
2.MP代码生成器
MP代码生成器依赖:
<!--mp的代码生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
创建一个配置类或者随便一个类都行
public class CodeGenerator02 {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/aaasql?serverTimezone=Asia/Shanghai", "root", "root")//连接数据库信息
.globalConfig(builder -> {
builder.author("xw") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("C:/Users/Acer/IdeaProjects/SpringBootHomeWork/src/main/java"); // 指定输出目录,将代码文件生成在哪个地方
})
.packageConfig(builder -> {
builder.parent("com.aaa") // 设置父包名
.moduleName("system") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.xml, "C:/Users/Acer/IdeaProjects/SpringBootHomeWork/src/main/resources/mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("student") // 设置需要生成的表名,生成多个表之间用逗号分隔
// .addTablePrefix("tbl_","t_"); // 设置过滤表前缀
builder.entityBuilder().enableLombok(); //是否开启lombok
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}
以上便是java之MP链表查询+MP代码生成器中的内容,如有漏缺请在下方留言告知,我会及时补充
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异