python做网站入门,图片在线编辑网站,做搜狗网站优化排名软,淘客手机网站源码#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学… 欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ 博客目录 一.基本介绍1.常见操作2.条件构造器 二.常见查询1.根据主键查询2.通过多个 id 查询3.通过 map 查询4.时间格式化5.allEq6.指定查询列 三.普通查询1.链式条件查询2.selectOne3.selectList4.selectPage 分页5.排序6.模糊查询 四.高阶查询1.复杂多条件2.and 条件3.or 条件4.优先级连接5.随机排序6.日期处理7.notIn8.inSql 五.update 和 remove1.update2.remove3.set 和 setSql 六.常见配置1.实现类写法2.注解3.只打印 SQL 语句4.驼峰设置5.创建时间6.数据库不存在字段7.更新字段8.TableField 一.基本介绍
1.常见操作
ge、gt、le、lt、isNull、isNotNulleq、nebetween、notBetweenallEqlike、notLike、likeLeft、likeRightin、notIn、inSql、notinSql、exists、notExistsor、and嵌套 or、嵌套 andorderBy、orderByDesc、orderByAsclast指定要查询的列set、setSql
2.条件构造器
Wrapper 条件构造抽象类最顶端父类AbstractWrapper 用于查询条件封装生成 sql 的 where 条件QueryWrapper Entity 对象封装操作类不是用 lambda 语法UpdateWrapper Update 条件封装用于 Entity 对象更新操作AbstractLambdaWrapper Lambda 语法使用 Wrapper 统一处理解析 lambda 获取 column。LambdaQueryWrapper 看名称也能明白就是用于 Lambda 语法使用的查询 WrapperLambdaUpdateWrapper Lambda 更新封装 Wrapper 二.常见查询
1.根据主键查询
User user userMapper.selectById(1094592041087729666L);2.通过多个 id 查询
ListLong longs Arrays.asList(1094592041087729666L, 1094590409767661570L);
ListUser users userMapper.selectBatchIds(longs);
users.forEach(System.out::println);3.通过 map 查询
MapString, Object params new HashMap();
params.put(name, 张雨琪);
ListUser users userMapper.selectByMap(params);4.时间格式化
wrapper.apply(date_format(create_time,%Y-%m-%d) {0}, 2019-02-14)5.allEq
QueryWrapperUser queryWrapper new QueryWrapper();MapString, Object map new HashMap();map.put(id, 2);map.put(name, Jack);map.put(age, 20);9queryWrapper.allEq(map);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println);6.指定查询列
QueryWrapperUser queryWrapper new QueryWrapper();
queryWrapper.select(id, name, age);ListUser users userMapper.selectList(queryWrapper);
users.forEach(System.out::println);三.普通查询
1.链式条件查询
//条件查询-等于-like-小于-大于-排序
private WrapperTaskRecordDO getTaskRecordWrapper(ListTaskRecordRequestDTO query) {Date startExecuteTime query.getStartExecuteTime();Date endExecuteTime query.getEndExecuteTime();Calendar calendar new GregorianCalendar();if (endExecuteTime ! null) {calendar.setTime(endExecuteTime);calendar.add(Calendar.DATE, 1);}return new QueryWrapperTaskRecordDO().lambda().eq(StringUtils.isNotBlank(query.getExecuteStatus()), TaskRecordDO::getExecStatus, query.getExecuteStatus()).like(StringUtils.isNotBlank(query.getKeyword()), TaskRecordDO::getOutNodeName, query.getKeyword()).lt(endExecuteTime ! null, TaskRecordDO::getStartRunTime, calendar.getTime()).ge(startExecuteTime ! null, TaskRecordDO::getStartRunTime, startExecuteTime).eq(query.getTaskId() ! null, TaskRecordDO::getTaskId, query.getTaskId()).orderByDesc(TaskRecordDO::getId);
}2.selectOne
UserRelateCar userRelateCar userRelateCarMapper.selectOne(Wrappers.UserRelateCarlambdaQuery().eq(UserRelateCar::getXcxUserId, driverXcxUserId).eq(UserRelateCar::getNumber, number));3.selectList ListShipmentOrderDetailGoodsInfo shipmentOrderDetailGoodsInfos shipmentOrderDetailGoodsInfoMapper.selectList(Wrappers.ShipmentOrderDetailGoodsInfolambdaQuery()
.eq(ShipmentOrderDetailGoodsInfo::getShipmentOrderDetailId, shipmentDetailId));4.selectPage 分页
GetMapping(value /selectAllInPage)public ListTeacher selectAllInPage(int pageNumber,int pageSize){PageTeacher page new Page(pageNumber,pageSize);EntityWrapperTeacher entityWrapper new EntityWrapper();entityWrapper.ge(id, 1);return teacherMapper.selectPage(page,entityWrapper);}LambdaUpdateWrapperAdsDayCityOrrCalendarDo wrapper Wrappers.lambdaUpdate(AdsDayCityOrrCalendarDo.class).eq(AdsDayCityOrrCalendarDo::getBrandDetailNo, query.getBrandDetailNo());
final PageAdsDayCityOrrCalendarDo citys adsDayCityOrrCalendarMapper.selectPage(new Page(query.getPage(), query.getSize()), wrapper);5.排序
可以使用 QueryWrapper 的 orderByDesc 方法来指定字段降序查询示例代码如下:
//其中age 是需要降序排列的字段名。
QueryWrapperUser wrapper new QueryWrapper();
wrapper.orderByDesc(age); // 按照 age 字段降序排列
ListUser userList userMapper.selectList(wrapper);6.模糊查询
//条件查询-左边模糊匹配-右边模糊匹配
Override
public boolean checkExist(String tableName) {WrapperDagConfDO queryWrapper Wrappers.DagConfDOquery().lambda().likeLeft(DagConfDO::getConf, tableName).likeRight(DagConfDO::getConf, tableName).orderByDesc(DagConfDO::getId).groupBy(DagConfDO::getTaskId);dagConfMapper.selectList(queryWrapper);return false;
}四.高阶查询
1.复杂多条件
GetMapping(value /selectAllByWrapper4)public ListTeacher selectAllByWrapper4(){EntityWrapper entitynew EntityWrapper();entity.gt(id,0);entity.le(id,11);entity.ne(teacher_name,null_name);entity.like(teacher_name,tt);entity.notLike(teacher_pwd,sadas);entity.orderBy(id);return teacherMapper.selectList(entity);}2.and 条件
QueryWrapperAttrEntity queryWrapper new QueryWrapperAttrEntity().
eq(attr_id,key).
eq(catelog_id,catelogId);或者
QueryWrapperAttrEntity queryWrapper new QueryWrapperAttrEntity().
eq(attr_id,key);queryWrapper.and(qr - qr.eq(catelog_id, catelogId));3.or 条件
QueryWrapperAttrEntity queryWrapper new QueryWrapperAttrEntity().
eq(attr_id,key).
or().
eq(catelog_id,catelogId);4.优先级连接
QueryWrapperAttrEntity queryWrapper new QueryWrapperAttrEntity().eq(attr_type, base.equalsIgnoreCase(type) ? 1 : 0);queryWrapper.and(qr -qr.eq(attr_id, key).or().like(attr_name, key)
);
queryWrapper.and(qr - qr.eq(catelog_id, catelogId));select ...
WHERE (attr_type ? AND ( (attr_id ? OR attr_name LIKE ?) ) AND ( (catelog_id ?) ))
...;由此还可见 or(Consumer consumer),and(Consumer consumer)这两个方法参数为 Consumer 时,会在连接处生成 2 对括号,以此提高优先级。
or带括号练习: LambdaQueryWrapperCsdnRedPackage wrapper new LambdaQueryWrapper();wrapper.and(QueryWrapper -QueryWrapper.notIn(CsdnRedPackage::getMsg, CommonConstant.RedPackageResponse.COMPLETED, CommonConstant.RedPackageResponse.RECEIVED).or(query - query.eq(CsdnRedPackage::getMsg, received).eq(CsdnRedPackage::getMyAmount, 0)));wrapper.eq(CsdnRedPackage::getIsDelete, 0);5.随机排序
希望返回的数据是随机的,而不是根据某一个字段进行排序,我们可以使用 rand()函数进行排序。
QueryWrapperCsdnUserInfo wrapper new QueryWrapper();wrapper.eq(is_delete, 0);wrapper.orderByAsc(rand());final ListCsdnUserInfo list csdnUserInfoService.list(wrapper);6.日期处理
QueryWrapperCsdnRedPackage wrapper new QueryWrapper();wrapper.eq(is_delete, 0);String today DateUtil.today();String formattedDate DateUtil.format(DateUtil.parse(today), yyyy-MM-dd);wrapper.apply(DATE(create_time) {0}, formattedDate);final ListCsdnRedPackage list csdnRedPackageService.list(wrapper);7.notIn
多个不等于的值使用 notIn
if (StringUtils.isNotEmpty(msg)) {if (StringUtils.equals(msg, 其它)) {wrapper.notIn(msg, completed, received);} else {wrapper.eq(msg, msg);}
}8.inSql
in、notIn、inSql、notinSql、exists、notExists 也都是支持的
查询创建时间为 2019 年 2 月 14并且上级领导姓王
wrapper.apply(date_format(create_time,%Y-%m-%d) {0}, 2019-02-14).inSql(manager_id, select id from user where name like 王%);五.update 和 remove
1.update userRelateCarMapper.update(new UserRelateCar(), Wrappers.UserRelateCarlambdaUpdate().set(UserRelateCar::getIsDefault, DefaultCarEnum.YES.getType()).eq(UserRelateCar::getNumber, carNumber).eq(UserRelateCar::getXcxUserId, xcxUserId));2.remove shipmentOrderRelateUserService.remove(Wrappers.ShipmentOrderRelateUserlambdaQuery().eq(ShipmentOrderRelateUser::getRoleId, RoleEnum.DRIVER.getType()).eq(ShipmentOrderRelateUser::getShipmentOrderId, id));3.set 和 setSql
//修改值
User user new User();
user.setAge(99);//修改条件
UpdateWrapperUser userUpdateWrapper new UpdateWrapper();
userUpdateWrapper
.like(name, h)
.set(name, 老李头)//除了可以查询还可以使用set设置修改的字段
.setSql( email 123qq.com);//可以有子查询
int result userMapper.update(user, userUpdateWrapper);六.常见配置
1.实现类写法
Service
public class StoreBaseServiceImpl extends ServiceImplStoreBaseMapper, StoreBase implements IStoreBaseService {}public interface IStoreBaseService extends IServiceStoreBase {}2.注解
Api(tags 外部系统(供应链)交互API) //controllerApiOperation(信息软删除) //方法ApiModelProperty(value 对接系统) //属性ApiModel(value 任务统计) //返回的对象3.只打印 SQL 语句
Mybatis 配置
mybatis:configuration:### 开启打印sql配置log-impl: org.apache.ibatis.logging.stdout.StdOutImpl### 开启驼峰配置map-underscore-to-camel-casetrueMybatisPlus 配置
mybatis-plus:configuration:### 开启打印sql配置log-impl: org.apache.ibatis.logging.stdout.StdOutImpl### 开启驼峰配置map-underscore-to-camel-casetrue生产关闭日志
mybatis-plus:configuration:#关闭sql日志log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl其他配置
### mybatis 相关配置
mybatis:config-location: classpath:mybatis.cfg.xml # mybatis主配置文件所在路径type-aliases-package: com.example.entity # 定义所有操作类的别名所在包mapper-locations: classpath:mapper/*.xml # 所有的mapper映射文件configuration:# 开启驼峰uName自动映射到u_namemap-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl### mybatis-plus 相关配置
mybatis-plus:type‐aliases‐package: com.example.entity # 定义所有操作类的别名所在包# xml扫描多个目录用逗号或者分号分隔告诉 Mapper 所对应的 XML 文件位置mapper-locations: classpath:mapper/*.xml# 以下配置均有默认值,可以不设置global-config:banner: false # 是否 mybatis-plus 在控制台输出的logodb-config:#主键类型 AUTO:数据库ID自增 INPUT:用户输入ID,ID_WORKER:全局唯一ID (数字类型唯一ID), UUID:全局唯一ID UUID;id-type: auto#字段策略 IGNORED:忽略判断 NOT_NULL:非 NULL 判断) NOT_EMPTY:非空判断field-strategy: NOT_EMPTY#数据库类型db-type: MYSQLlogic-delete-field: deleted # 全局逻辑删除的实体字段名logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)configuration:# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射map-underscore-to-camel-case: true# 如果查询结果中包含空值的列则 MyBatis 在映射的时候不会映射这个字段call-setters-on-nulls: true# 这个配置会将执行的sql打印出来在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl4.驼峰设置
mybatis 默认是属性名和数据库字段名一一对应的即
数据库表列user_name实体类属性user_name
但是 java 中一般使用驼峰命名
数据库表列user_name实体类属性userName
在 Springboot 中可以通过设置 map-underscore-to-camel-case 属性为 true 来开启驼峰功能。 application.yml 中
mybatis:configuration:map-underscore-to-camel-case: trueapplication.properties 中
mybatis.configuration.map-underscore-to-camel-case:true5.创建时间
/*** 创建时间*/TableField(value create_time, fill FieldFill.INSERT)private Date createTime;/*** 修改时间*/TableField(value edit_time, fill FieldFill.INSERT_UPDATE)private Date editTime;6.数据库不存在字段
TableField(exist false)7.更新字段
如果您是在使用 MyBatis-Plus 进行数据库操作可以使用以下代码将 id 为 1 的数据的 is_delete 字段改为 1
QueryWrapperChatbot wrapper new QueryWrapper();
wrapper.eq(id, 1);
Chatbot chatbot new Chatbot();
chatbot.setIsDelete(1);
return Result.ok(this.chatbotService.update(chatbot, wrapper));在上述代码中我们先创建了一个 QueryWrapper 对象通过 eq 方法指定查询条件为 id 1 和 is_delete 1。然后我们创建了一个 Chatbot 对象设置其 is_delete 字段为 1。最后我们调用 update 方法将修改后的 Chatbot 对象和查询条件 QueryWrapper 对象传递给 update 方法完成数据更新操作。 需要注意的是如果您要更新的数据不存在update 方法会返回 false否则会返回 true。如果您需要返回更新后的数据可以使用 updateById 方法该方法会返回更新后的完整实体对象。
8.TableField
如果您在使用 MyBatis-Plus 进行数据库操作可以使用 TableField 注解来标记实体类中的字段指定该字段不在数据库中对应的列。以下是一个示例代码
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;TableName(chatbot)
public class Chatbot {private Long id;private String name;private Integer age;TableField(exist false)private String otherField;// 省略 getter 和 setter 方法
}在上述代码中我们使用 TableField 注解来标记 otherField 字段指定该字段不在数据库中对应的列。其中exist 属性指定该字段是否在数据库表中存在。如果 exist 属性设置为 false则表示该字段不在数据库表中存在否则表示该字段在数据库表中存在。在本例中我们将 exist 属性设置为 false表示 otherField 字段不在数据库表中存在。
需要注意的是如果您在实体类中使用了 TableField 注解那么在进行查询、更新、删除等操作时MyBatis-Plus 会忽略该字段。如果您需要在查询中使用该字段可以使用 select 方法指定查询的字段列表。 觉得有用的话点个赞 呗。 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正 如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧