前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis-plus 下

Mybatis-plus 下

作者头像
张小驰出没
发布2021-04-19 16:21:46
3080
发布2021-04-19 16:21:46
举报

Mybatis-plus 下

查询操作

1.查询单个用户

代码语言:javascript
复制
@Test
public void testSelectById(){
    User user = userMapper.selectById(1L);
    System.out.println(user);
}
15
15

2.查询多个用户

代码语言:javascript
复制
@Test
public void testSelectById(){
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    users.forEach(System.out::println);
}
16
16

3.条件查询

代码语言:javascript
复制
@Test
public void testSelectById(){
    HashMap<String,Object> map = new HashMap<>();
    //自定义查询条件
    map.put("name","小张");
    map.put("age",18);
    List<User> users1 = userMapper.selectByMap(map);
    users1.forEach(System.out::println);
}
17
17

分页查询

1.配置拦截器

代码语言:javascript
复制
@EnableTransactionManagement
@Configuration
@MapperScan("com.zc.mapper")
public class MyBatisPlusConfig {
    //分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2.书写方法

代码语言:javascript
复制
@Test
public void Page(){
    //参数1: 第几页 ;  参数2    页面大小,几条数据
    Page<User> page = new Page<>(1,5);
    userMapper.selectPage(page,null);

    page.getRecords().forEach(System.out::println);
    //一共有多少条数据
    System.out.println(page.getTotal());

}

此时是 第1页,每页有5条数据

18
18

删除操作

1.删除单个用户

代码语言:javascript
复制
@Test
public void DeleteById(){
    userMapper.deleteById(1374350451559940099L);
}
19
19

2.删除多个用户

代码语言:javascript
复制
@Test
public void DeleteById(){
    userMapper.deleteBatchIds(Arrays.asList(4,5));
}
20
20

3.按条件删除用户

代码语言:javascript
复制
@Test
public void DeleteById(){
    HashMap<String,Object> map = new HashMap<>();
    map.put("name","小李");
    userMapper.deleteByMap(map);
}
21
21

逻辑删除

物理删除:从数据库中直接移除 逻辑删除:再数据库中没有被移除,而是通过一个变量来让他失效!deleted =0=> deleted =1

步骤:

1.数据表中增加一个 deleted 字段

注意,不要添加成delete字段,delete为关键字,会出错

22
22

2.实体类加入字段、注解

代码语言:javascript
复制
@TableLogic   //逻辑删除
private Integer deleted;

3.配置文件

代码语言:javascript
复制
## 全局逻辑删除的实体字段名(如果配置这个,可以不添加实体类中的逻辑删除注解)
mybatis-plus.global-config.db-config.logic-delete-field=deleted
# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0

4.测试

删除操作:

代码语言:javascript
复制
@Test
public void TableLogic(){
    userMapper.deleteById(1374350451559940101L);
}

虽然执行的是删除操作,但是实际上逻辑删除会更新deleted字段,而不是直接删除

23
23
24
24

查询操作:

既然没有删除该语句,那可以查询到吗?

代码语言:javascript
复制
@Test
public void TableLogic(){
    userMapper.selectById(1374350451559940101L);
}
25
25

上图可以看出,他会查询deleted字段为0为前提的数据,如果被逻辑删除过的数据,deleted字段为1,查询不到。

条件构造器

当前我的数据库数据为:

12
12
测试一

name不为空,邮箱不为空,年龄大于等于12 的用户

代码语言:javascript
复制
@Test
void test1() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.isNotNull("name")
        .isNotNull("email")
        .ge("age",12);
    userMapper.selectList(wrapper);
}
12
12
测试二

查询名字:小张

查询一个数据时,使用selectOne,查询多个数据,可以使用List或者Map

代码语言:javascript
复制
@Test
void test2() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("name","小张");
    User user = userMapper.selectOne(wrapper);
    System.out.println(user);
}
13
13
测试三

查询年龄10-15之间的

selectCount直接返回Integer类型,统计查到了的数据条数

代码语言:javascript
复制
@Test
void test3() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.between("age",10,15);
    Integer integer = userMapper.selectCount(wrapper);
    System.out.println(integer);
}
15
15
测试四

模糊查询

  • notLike():不包含
  • likeRight():效果与 x% 相同
  • likeLeft():效果与 %x 相同
代码语言:javascript
复制
@Test
void test4() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.notLike("name","邦")  
        .likeRight("email","t");
    List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
    maps.forEach(System.out::println);
}
16
16
测试五

复杂查询

代码语言:javascript
复制
@Test
void test5() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.inSql("id","select id from user where id<3");
    List<Object> objects = userMapper.selectObjs(wrapper);
    objects.forEach(System.out::println);
}
17
17
测试六
  • orderBy() :正序排序
  • orderByDesc() :倒序排序
代码语言:javascript
复制
@Test
void test6() {
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.orderByDesc("id");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}
18
18

代码自动生成器

1.导入依赖

代码语言:javascript
复制
<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
dependency>

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.2.0version>
dependency>

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-generatorartifactId>
    <version>3.0-RC2version>
dependency>
<dependency>
    <groupId>org.apache.velocitygroupId>
    <artifactId>velocity-engine-coreartifactId>
    <version>2.3version>
dependency>

<dependency>
    <groupId>io.springfoxgroupId>
    <artifactId>springfox-swagger2artifactId>
    <version>2.9.2version>
dependency>

2.配置自动生成代码

在Test文件夹中,创建一个新类:cccc

代码语言:javascript
复制
public class ZcCode {
    public static void main(String[] args) {
        //代码生成器
        AutoGenerator mpg = new AutoGenerator();
        
        //.....其余代码
        
         //执行
        mpg.execute();   
    }
}
全局配置
代码语言:javascript
复制
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath+"/src/main/java");
gc.setAuthor("MoYu");               //作者名
gc.setOpen(false);                  //是否打开资源管理器
gc.setFileOverride(false);          //是否覆盖
gc.setServiceName("%sService");     //去Service的I前缀
gc.setIdType(IdType.ID_WORKER);     //ID类型,设置的为 全局唯一ID 
gc.setDateType(DateType.ONLY_DATE); //Date类型
gc.setSwagger2(true);               //开启Swagget2
mpg.setGlobalConfig(gc);
包的配置
代码语言:javascript
复制
PackageConfig pc = new PackageConfig();
// pc.setModuleName("");          //Controller路径  xxx/实体类名
pc.setParent("com.zc");           //父类文件夹路径
pc.setEntity("entity");           //实体类文件夹
pc.setMapper("mapper");           //mapper文件夹
pc.setService("service");         //service文件夹
pc.setController("controller");   //controller文件夹
mpg.setPackageInfo(pc);
设置数据源
代码语言:javascript
复制
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis-plus? useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("148729");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
策略配置
代码语言:javascript
复制
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user"); // 设置要映射的表名,可以多个表一直写  “xxxx”,"xxxx"
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true); // 自动lombok;
// 逻辑删除配置
strategy.setLogicDeleteFieldName("deleted");
// 自动填充配置
TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);
TableFill gmtModified = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
// 乐观锁
strategy.setVersionFieldName("version");strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
运行

这是生成的架构文件夹:

19
19

生成之后的代码以及架构都是很规范的,大家可以自己测试一下

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis-plus 下
    • 查询操作
      • 1.查询单个用户
      • 3.条件查询
    • 分页查询
      • 1.配置拦截器
      • 2.书写方法
    • 删除操作
      • 1.删除单个用户
      • 2.删除多个用户
      • 3.按条件删除用户
    • 逻辑删除
      • 条件构造器
        • 代码自动生成器
          • 1.导入依赖
        • 2.配置自动生成代码
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档