mybatis 和 mybatis plus 使用技巧汇总

1.分组统计:
SELECT user_id,company_name,count(*) FROM t_message GROUP BY user_id;
2.mybatis使用group by返回多个值,包含count数据,该怎么接返回值:
https://blog.csdn.net/weixin_43276786/article/details/94547839
3.mybaits plus 在满足条件的记录中,随机取20条,且只查指定字段
        List<Teacher> list = teacherService.list(
                new QueryWrapper<Teacher>()
                        .eq("status", "available")
                        .select("name", "gender", "avatar_url")
                        .last("ORDER BY RAND() LIMIT 0,"+number));
4.mybatis 时间判断
        <if test="signDateStart != null &amp; signDateStart !=''">
            AND unix_timestamp(sign_date) &gt;= unix_timestamp(#{signDateStart})
        </if>
        <if test= "signDateEnd != null  &amp; signDateEnd !=''">
            AND unix_timestamp(sign_date) &lt;= unix_timestamp(#{signDateEnd})
        </if>
5.MyBatis Plus中使用or和and问题
https://blog.csdn.net/qq_35401216/article/details/105438073
6.让字段支持更新时设置为null
	// 字段添加注解
    @TableField(strategy = FieldStrategy.IGNORED)
    private LocalDateTime vip;

mybatis plus:

一、常用注解

1、@TableName("表全名")

指定实体类对应的表名

2、@TableId

mp会按照雪花自增填充主键,默认实体类的主键为"id",当没有id时,它就不知道谁是主键,这时可以添加该注解

3、@TableField("字段名")

二、排除表字段的方法

1、用transient给属性做声明,该方式无序列化

eg:private transient int flag;

2、@TableField(exist=false)

给属性添加该注解,表示该字段在数据库中不存在。默认exist=true。

三、条件构造器 文档:https://www.bookstack.cn/read/mybatis-plus-3.x/bdd3a209a7eabb35.md

1.apply  拼接 sql
	例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08")—->date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")
	
2.insql 子查询
	inSql("id", "select id from table where id < 3")—->id in (select id from table where id < 3)
	
3.and AND 嵌套(括号)
	and(Function<Param, Param> func)
	例: and(i -> i.eq("name", "李白").ne("status", "活着"))—->and (name = '李白' and status <> '活着')

4.or  
	a. 拼接 OR (主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接))
		or()
		eq("id",1).or().eq("name","老王")—->id = 1 or name = '老王'
	b. OR 嵌套(括号)
		or(Function<Param, Param> func)
		or(i -> i.eq("name", "李白").ne("status", "活着"))—->or (name = '李白' and status <> '活着')

5.nested 正常嵌套 不带 AND 或者 OR
	nested(Function<Param, Param> func)
	例: nested(i -> i.eq("name", "李白").ne("status", "活着"))—->(name = '李白' and status <> '活着')

6.大部分条件构造器出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中,可以用此参数进行动态sql拼接
	eq(boolean condition, R column, Object val)
	eq(stringUtils.isNotEmpty(qo.getName()),"userName",qo.getName())

7.selectMaps
	根据 Wrapper 条件,查询全部记录
	这个可以和 条件构造器中的 select 一起用,因为他返回的是 字段映射对象 Map 集合 而不是 实体类型
	适用于 a.只查询 部分字段的情况下,这样其他那些不用查的字段不会作为 null 出现 
				b.统计查询,查询的字段并不是实体类的属性而是自定义的统计变量
	
8.selectCount
	根据 Wrapper 条件,查询总记录数
	这个可以和 selectPage(根据 entity 条件,查询全部记录(并翻页))  一起用 ,用作分页的total统计

9.UpdateWrapper   更具条件更新某些字段
	SQL SET 字段
	例: set("name", "老李头")
	例: set("name", "")—->数据库字段值变为空字符串
	例: set("name", null)—->数据库字段值变为null
	例子:
	UpdateWrapper   uw =  new UpdateWrapper  ().eq("name",“张三”).set("age",18);	
	xxxMapper.update(null,uw);

10.主键生成策略
	@TableId (IdType= xxxx)
	IdType
	值	描述
	AUTO	数据库自增 (常用)
	INPUT	自行输入
	ID_WORKER	分布式全局唯一ID 长整型类型
	UUID	32位UUID字符串
	NONE	无状态 (默认)
	ID_WORKER_STR	分布式全局唯一ID 字符串类型

11.db 配置
	tablePrefix
	类型:String
	默认值:null表名前缀
	使用这个在执行sql时,会自动为 entity 拼接 前缀,就不用在entity里改表名了

12.在serives使用lamda链式调用(如下图),作用:很秀

在这里插入图片描述

13.逻辑删除 
	a)数据库加字段 deleted char 1
	b)实体类加注解
		    @TableLogic
		    private String deleted;
	c)直接 crud mp即可自动完成 逻辑删除

14.设置某些字段不会被查询出来
		在实体类打注解
		@TableField(select=false)			
		 private String deleted;

15.自动填充
	a)实体上注解
	    @TableField(fill = FieldFill.INSERT)
    	private LocalDateTime createAt;
    	@TableField(fill = FieldFill.UPDATE)
    	private LocalDateTime updateAt;
	b)增加配置类 在配置类中设置自动填充的值
	
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        System.err.println("插入填充");
        setFieldValByName("createAt", LocalDateTime.now(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        System.err.println("更新填充");
        setFieldValByName("updateAt", LocalDateTime.now(),metaObject);
    }
}
}
	c) 在执行更新和插入操作时,就能自动设值了

16.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用mybatis-plus时,可以通过使用NOT关键字来排除某些条件。在前面的代码调用中,我们可以看到使用MybatisExtension.Not.INSTANCE来表示排除条件。 Mybatis-plus是一个能够生成各种SQL片段并最终组装成一个完整SQL语句的框架。它通过实现ISqlSegment接口来完成这个功能。 在配置mybatis-plus时,需要注意使用@MapperScan注解来扫描mapper接口,并使用mybatis.mapper-locations来指定mapper.xml文件所在的位置。这两者缺一不可。@MapperScan注解用于扫描dao类,而mybatis.mapper-locations配置用于扫描mapper.xml文件。可以使用不同的方法来配置mapper.xml文件的位置,比如只有一个路径、有多个路径或使用通配符来表示任意级的目录。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [让mybatis-plus支持NOT逻辑运算](https://blog.csdn.net/demon7552003/article/details/126649944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mybatis/mybatis plus报错:Invalid bound statement (not found) 解决方法汇总](https://blog.csdn.net/mashangzhifu/article/details/122808181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值