java之MP链表查询+MP代码生成器

1. 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代码生成器中的内容,如有漏缺请在下方留言告知,我会及时补充 

posted @ 2023-08-22 10:37  九极致之术  阅读(117)  评论(1编辑  收藏  举报