4.0.0 org.example boot-plus 1.0-SNAPSHOT spring-boot-starter-parent org.springframework.boot 2.7.2 org.springframework.boot spring-boot-starter-web mysql mysql-connector-java org.projectlombok lombok com.baomidou mybatis-plus-boot-starter 3.5.1 org.springframework.boot spring-boot-starter-test com.baomidou mybatis-plus-generator 3.5.3 org.apache.velocity velocity-engine-core 2.3
package com.zlz;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class PlusStart {public static void main(String[] args) {SpringApplication.run(PlusStart.class);}
}
package com.zlz;import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;import java.util.Collections;public class MyGenerator {public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3305/db0618", "root", "root").globalConfig(builder -> {builder.author("zlz") // 设置作者.dateType(DateType.ONLY_DATE) // 时间策略,日期以什么样子的类型去生成.outputDir("F:\\boot\\boot-plus\\src\\main\\java"); // 指定输出目录}).packageConfig(builder -> {builder.parent("com.zlz") // 设置父包名.pathInfo(Collections.singletonMap(OutputFile.xml, "F:\\boot\\boot-plus\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径,// 注意:这个mapper文件夹是可以不存在的,运行该main方法会自动创建的}).strategyConfig(builder -> {//开启lombokbuilder.entityBuilder().enableLombok();//覆盖现有文件builder.entityBuilder().fileOverride();builder.addInclude("songs"); // 设置需要生成的表名,想一次性生成多张表,就用逗号隔开,如:addInclude("songs","music")}).execute();}
}
package com.zlz.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;import lombok.*;/*** * *
** @author zlz* @since 2023-01-02*/
//①改动地方1
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Songs implements Serializable {private static final long serialVersionUID = 1L;@TableId(value = "id", type = IdType.AUTO)private Integer id;private String singerName;private String album;private String albumImg;private String name;//②改动地方2,调成日期形式,就不用转型了private String releaseDate;
}
spring:datasourceurl: jdbc:mysql://127.0.0.1:3305/db0618driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootmybatis-plus:type-aliases-package: com.zlz.entity #实体别名扫描
#配置日志 查看具体的sql执行语句
logging:level:com.zlz.mapper: debug
package com.zlz.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.zlz.mapper")//mapper接口扫描,@MapperScan也可以放在启动类PlusStart上面(启动类也算配置类)
public class PlusConfig {
}
import com.zlz.PlusStart;
import com.zlz.service.ISongsService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(classes = PlusStart.class,webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MyTest {@AutowiredISongsService songsService;
}
@Test
public void findOne(){Songs byId = songsService.getById(666);System.out.println(byId);
}
@Testpublic void findAll(){List list = songsService.list();for (Songs songs : list) {System.out.println(songs);}}
//带上条件的查询(使用场景:商城商品的关键字搜索)
@Test
public void findByCondition(){//查询条件构造器String search="张学友";QueryWrapper qw = new QueryWrapper<>();//第一个参数是条件,如果条件为真就带上第三个参数,为假就不带上,第二个参数是表的字段名qw.eq(search!=null, "singer_name",search);List list = songsService.list(qw);for (Songs songs : list) {System.out.println(songs);}
}
@Testpublic void findByCondition(){//范围查找betweenQueryWrapper qw = new QueryWrapper<>();qw.between("release_date", "2000-1-1","2020-1-1");List list = songsService.list(qsw);for (Songs songs : list) {System.out.println(songs);}}
@Testpublic void findByCondition(){//查询条件构造器QueryWrapper qw = new QueryWrapper<>();//查询歌曲表中歌手名字以张开头的所有歌手信息qw.likeRight("singer_name", "张");List list = songsService.list(qw);for (Songs songs : list) {System.out.println(songs);}}
public void findByCondition(){//查询条件构造器QueryWrapper qw = new QueryWrapper<>();//查询某些列是用逗号去进行分开,然后查到了的数据才有值,没有查到的数据就都是null值qw.select("id,name");List list = songsService.list(qw);for (Songs songs : list) {System.out.println(songs);}}
@Testpublic void findByGroup(){//统计歌曲表中每个歌手唱了多少首歌//① 创建QueryWrapper对象QueryWrapper qw = new QueryWrapper<>();//② 指定分组字段qw.groupBy("singer_name");//下面的select方法相当于的sql语句是 select singer_name,count(*) num from songs group by singer_name;//③指定要查询出来的列qw.select("singer_name,count(*) num");//因为是多条数据,一条数据就相当于一个map,所以需要用List
g 排序查询
g.1 示例代码
//排序的使用
@Test
public void findByOrder(){//把歌曲表按照日期降序排列QueryWrapper qw = new QueryWrapper<>();//如果想要指定多个字段排序,那么可以使用逗号隔开,如orderByDesc("字段1,字段2...")qw.orderByDesc("release_date");songsService.list(qw).forEach(System.out::println);
}
9.2 运行截图
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//设置分页插件,别的拦截器也是addInnerInterceptor加入进去PaginationInnerInterceptor pi = new PaginationInnerInterceptor();pi.setDbType(DbType.MYSQL);//设置数据库类型为MySQLpi.setOverflow(true);//溢出分页处理,默认是false不处理,需要设置成true,保证分页合理化interceptor.addInnerInterceptor(pi);return interceptor;
}
package com.zlz.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.zlz.mapper")//mapper接口扫描,@MapperScan也可以放在启动类PlusStart上面(启动类也算配置类)
public class PlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//设置分页插件,别的拦截器也是addInnerInterceptor加入进去PaginationInnerInterceptor pi = new PaginationInnerInterceptor();pi.setDbType(DbType.MYSQL);//设置数据库类型为MySQLpi.setOverflow(true);//溢出分页处理,默认是false不处理,需要设置成true,保证分页合理化interceptor.addInnerInterceptor(pi);return interceptor;}
}
@Test
public void findByPage(){//创建分页对象IPage page = new Page<>(1, 5);//条件构造器QueryWrapper qw = new QueryWrapper<>();qw.like("name", "天");//如果有条件的话,就把条件构造器对象丢到它的第二个形参就是的songsService.page(page,qw);//输出List records = page.getRecords();for (Songs record : records) {System.out.println(record);}//页码相关System.out.println("当前页码:"+page.getCurrent());System.out.println("总条数:"+page.getTotal());System.out.println("总页数:"+page.getPages());
}
List find(IPage page, String album);
d.3 测试代码
//自定义分页,要注入自己的mapper
@Autowired
SongsMapper songsMapper;
@Test
public void findByCustomPage(){//创建分页对象IPage page = new Page<>(1, 5);String search="年";List songs = songsMapper.find(page, "%" + search + "%");System.out.println(songs);//页码相关System.out.println("当前页码:"+page.getCurrent());System.out.println("总条数:"+page.getTotal());System.out.println("总页数:"+page.getPages());
}
d.4 运行截图