hutool包下的BeanUtil工具使用、SQL中的and和OR的优先级

news2024/9/20 6:30:58

SQL中的and和OR的优先级

首先and的优先级大于or,通俗理解其实or查询其实会把条件分为左右两边来查。
如select * from user where id = 1 and status = 2 or status = 3,本来想查询user表中id为1的状态为2或者3的数据,其实只会这样执行,and比or优先,结果是查询id为1和状态为2,或者状态为3的数据。
解决办法,如果是同字段,如上例子,可Select * from user where id=1 and status in (2,3),或者select * from user where id = 1 and (status = 2 or status = 3),就可以了

hutool包下的BeanUtil工具使用

链接:https://doc.hutool.cn/pages/index/
BeanUtil:用于Map与JavaBean对象的互相转换以及对象属性的拷贝。
1、新建实体类对象

package com.heima.item.test.hutool;
import lombok.Data;
@Data
public class User {
  private String name;
  private Integer age;
}
package com.heima.item.test.hutool;
import cn.hutool.core.bean.BeanUtil;
import java.util.Map;
public class TestBeanUtil {
  public static void main(String[] args) {
    User user = new User();
    user.setAge(1);
    user.setName("张三");

    // 对象转化为map
    Map<String, Object> map = BeanUtil.beanToMap(user);
    System.out.println(map);
    // map转化为对象
    User user1 = BeanUtil.toBean(map, User.class);
    System.out.println(user1);
    // 对象拷贝
    User user2 = new User();
    BeanUtil.copyProperties(user,user2);
    System.out.println(user2);
  }
}

在这里插入图片描述
beanToMap
将对象映射为map
实现有以下几种方式:
实现一:

//最简单的一种,直接将bean对象转换为map(若为null则对应的map的value为null) 
public static Map beanToMap(Object bean);

实现二:

/*
isToUnderlineCase:对于驼峰的属性名称,其对应的key是否用'_'分割开
ignoreNullValue:对于空的属性值,是否忽略
这两个值默认都为false
*/
public static Map<String, Object> beanToMap(Object bean, boolean isToUnderlineCase, 
                                            boolean ignoreNullValue)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/e010e0e680be458dbc508d12c7964cb3.png#pic_center)

User user = new User();
user.setAge(1);
user.setUserName("张三");

Map<String, Object> map = BeanUtil.beanToMap(user, true, false);
System.out.println(map);

``
运行结果:
{user_name=张三, age=1}

    User user = new User();
//    user.setAge(1);
    user.setUserName("张三");

    Map<String, Object> map = BeanUtil.beanToMap(user, true, true);
    System.out.println(map);

运行结果:{user_name=张三}
实现三:

/*
targetMap:表示要添加到的map,也就是可以自己传输一个map。
          然后再将封装后的map键值对一一封装到里面返回。
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,
                           boolean isToUnderlineCase, boolean ignoreNullValue);
    User user = new User();
    user.setAge(1);
    user.setUserName("张三");

    Map<String, Object> map = new HashMap<>();
    map.put("MyKey", 100);
    Map<String, Object> map1 = BeanUtil.beanToMap(user, map, false, true);
    System.out.println(map1);

运行结果: {MyKey=100, userName=张三, age=1}
实现四:

/*
keyEditor:对key自定义编辑。也就是可以对map中的key进行改变。
是一个接口,要自定义实现类(内部实现类)
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,
                           boolean ignoreNullValue, Editor<String> keyEditor);
    User user = new User();
    user.setAge(1);
    user.setUserName("张三");

    HashMap<String,Object> map = new HashMap<>();
    Map<String, Object> map1 = BeanUtil.beanToMap(user, map, false, new Editor<String>() {
      @Override
      public String edit(String s) {
        return s.toLowerCase() + s.length();
      }
    });
    System.out.println(map1);

运行结果: {username8=张三, age3=1}
实现五:

/*
copyOptions:通过这个参数可以自定义任何转换规则,如“忽略某字段”、“设置editor等”
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,
                           CopyOptions copyOptions);  
    User user = new User();
    user.setAge(1);
    user.setUserName("张三");
    
    // 假设不将user对象中的age属性映射到map,可以这样实现
    HashMap<String,Object> map = new HashMap<>();
    CopyOptions copyOptions = new CopyOptions();
    copyOptions.setIgnoreProperties("age");
    Map<String, Object> map1 = BeanUtil.beanToMap(user, map, copyOptions);
    System.out.println(map1);

运行结果: {userName=张三}

    User user = new User();
    user.setAge(1);
    user.setUserName("张三");

    HashMap<String,Object> map = new HashMap<>();
    CopyOptions copyOptions = new CopyOptions();
    // 设置editor改变map中的key名称
    copyOptions.setFieldNameEditor(s -> s.toUpperCase());
    Map<String, Object> map1 = BeanUtil.beanToMap(user, map, copyOptions);
    System.out.println(map1);

运行结果: {USERNAME=张三, AGE=1}

toBean

toBean是将map中的某一些字段转换为user中的某个属性。
实现一:

public static <T> T toBean(Object source, Class<T> clazz);
    User user = new User();
    user.setAge(1);
    user.setUserName("张三");

    HashMap<String,Object> map = new HashMap<>();
    map.put("age",1);
    map.put("userName","张三");

    User user1 = BeanUtil.toBean(map, User.class);
    System.out.println(user1);

运行结果:
User(userName=张三, age=1)
这里map中的key一定要跟User中完全相同。比如:user中的属性名称为“userName”,如果写成“UserName”。那么注入就会为null。
实现二:

public static <T> T toBean(Object source, Class<T> clazz, CopyOptions options)
    HashMap<String,Object> map = new HashMap<>();
    map.put("age",1);
    map.put("userName","张三");
    // map中age不转化为user中的age属性
    CopyOptions copyOptions = new CopyOptions();
    copyOptions.setIgnoreProperties("age");
    User user = BeanUtil.toBean(map, User.class, copyOptions);
    System.out.println(user);

运行结果: User(userName=张三, age=null)

copyProperties

将一个变量属性拷贝到另一个对象上
实现一:

/*
source:源变量
targer:目标变量
ignoreProperties:需要忽略的字段名称
*/
public static void copyProperties(Object source, Object target, String... ignoreProperties);

新增copy对象

@Data
@ToString
public class TestUser {
  private String userName;
  private Integer age;
  private Integer id;
}
 User user = new User();
    user.setAge(100);
    user.setUserName("张三");

    TestUser testUser = new TestUser();
    BeanUtil.copyProperties(user,testUser);
    System.out.println(testUser);

运行结果: TestUser(userName=张三, age=100, id=null)
spring中的BeanUtils不同。 在这里的BeanUtil拷贝对象,source和target各自可以为不同的类,各自的属性字段都可以随意。 但拷贝的时候只会拷贝属性名称相同的属性(上述中TestUser包含了User不存在的id字段,还是可以拷贝的)
它还有的其他实现:

public static void copyProperties(Object source, Object target, boolean ignoreCase);
public static void copyProperties(Object source, Object target, CopyOptions copyOptions);
    User user = new User();
    user.setAge(100);
    user.setUserName("张三");
// 方式一
    TestUser testUser = new TestUser();
    BeanUtil.copyProperties(user,testUser,"age");
    System.out.println("testUser"+testUser);
// 方式二
    TestUser copyUser = new TestUser();
    CopyOptions copyOptions = new CopyOptions();
    copyOptions.setIgnoreProperties("age");
    BeanUtil.copyProperties(user,copyUser,copyOptions);
    System.out.println("copyUser" + copyUser);

运行结果:
testUserTestUser(userName=张三, age=null, id=null)
copyUserTestUser(userName=张三, age=null, id=null)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

DOD Digital Engineering Vision 数字工程策略与实施

DOD Digital Engineering Vision DOD的数字工程策略与实施&#xff0c;仅供个人学习使用&#xff0c;不代表个人意见和观点&#xff01;&#xff01;&#xff01; Digital Engineering Strategy and Implementation Ms. Philomena Zimmerman Office of the Under Secretary …

day1

在linux内核中&#xff0c;当用户打开设备文件时&#xff0c;内核中的VFS层会调用设备驱动中的sys_open()函数&#xff0c;在sys_open()函数中&#xff0c;内核会根据文件的inode号判断文件是否存在于文件系统中&#xff0c;如果存在&#xff0c;内核会找到这个文件的文件信息结…

Python:使用钉钉dingtalk发送通知消息

通过钉钉的开放API接口&#xff0c;可以很容易的将消息发送到钉钉dingtalk&#xff0c;比起邮件发送更稳定&#xff0c;及时 文档 官网&#xff1a;https://www.dingtalk.com/API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 目录 方式一&#xff1a;webhook方式…

Search space set group switching(一)

欢迎关注同名微信公众号“modem协议笔记”。 根据R17 38.300的描述&#xff0c;UE可以通过PDCCH monitoring adaptation机制实现power saving的目的&#xff0c;这其中就包括PDCCH monitoring skipping和search space set group (SSSG) switching两种机制。PDCCH monitoring s…

dom4j 解析 mybatis mapper xml 文件

01: CarMapper.xml : <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"car"…

代码随想录 回溯算法 Java

文章目录 组合&#xff08;*中等&#xff09;77. 组合&#xff08;*中等&#xff09;17. 电话号码的字母组合&#xff08;中等&#xff09;39. 组合总和&#xff08;中等&#xff09;40. 组合总和II&#xff08;中等&#xff09;216. 组合总和||| 分割&#xff08;*中等&#x…

【王道操作系统】内存管理

内存管理概念 1.C 2.D 存储保护的作用&#xff1a;保证各道作业在各自的存储空间内运行&#xff0c;互不干扰 实现虚拟内存管理需要请求分页&#xff08;请求分段、请求段页&#xff09;等技术的支持&#xff0c;故需要硬件支持&#xff0c;比如页表机制、中断机构、地址变换…

【五子棋实战】第1章 项目架构与开发思路

【五子棋实战】第1章 项目总览 前言 ## 项目技术栈 ## 项目可配置性 博客目录 项目预览 项目代码获取 项目架构 ## 架构&#xff1a;前端页面 算法接口 ## 前端页面 ## 算法接口 开发思路 前言 五子棋是一种古老而受欢迎的棋类游戏&#xff0c;本博客将介绍如何使用…

Matplotlib-直方图、箱型图

1. 直方图 hist函数来创建一个直方图。下面是对各个参数的解释&#xff1a; x&#xff1a;要绘制直方图的数据序列。bins&#xff1a;指定直方图的边界范围和间隔。这里使用range(40, 110, 6)表示边界从40到110&#xff0c;间隔为6。facecolor&#xff1a;直方图的填充颜色。…

unity UGUI源码分析(4)Text与TextMeshPro

这一篇博客用于分析Text的内容的更新机制&#xff0c;并分析text mesh pro。 首先我们分析Text的文字是如何渲染出来的。 PupulateWithErrors方法会根据字符串生成顶点数据。其实Text会根据所给定的字符串生成相关的图集&#xff0c;然后对图集进行采样就可以渲染出文字了。由…

【五子棋实战】第3章 算法包装成第三方接口

【五子棋实战】第3章 算法包装成第三方接口 使用Flask开放接口 ## 定义接口输入 ## 开放接口、跨域配置、数据解析 数据预处理 ## 数据检查与异常捕获 ## 预处理数据 ## 定义接口输出 开启接口 继续学习下一篇实战&#xff01; 我们在上一章实现了博弈树负值极大alpha…

最适合入门的100个深度学习实战项目

&#x1f6a8;注意&#x1f6a8;&#xff1a;最近经粉丝反馈&#xff0c;发现有些订阅者将此专栏内容进行二次售卖&#xff0c;特在此声明&#xff0c;本专栏内容仅供学习&#xff0c;不得以任何方式进行售卖&#xff0c;未经作者许可不得对本专栏内容行使发表权、署名权、修改…

Linux系统安装nginx+入门笔记

安装过程 1.加载wget命令 yum install wget 2.拉取安装包 wget https://nginx.org/download/nginx-1.16.1.tar.gz 3.解压安装包 tar -zxvf nginx-1.16.1.tar.gz 4.执行这个命令自动配置一下 5.编译安装 make make install 6.查看nginx安装的位置 whereis nginx 7.…

基于Python的反爬虫技术的研究设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

链表刷题(4~8)

目录 反转链表 返回中间节点 倒数k个节点 链表分割 判断回文 反转链表 单链表刷题时我们遇到过一个反转链表&#xff0c;那时我们采用的是头插的方式达到反转的效果&#xff0c;那能不能把指针反过来呢&#xff1f;答案是可以的。 这里用三个指针是为了记录后面节点的数据&…

SpringBoot+Vue 的智慧养老系统(Java 项目,附源码,数据库)

作者&#xff1a;程序员徐师兄 个人简介&#xff1a;7 年大厂程序员经历&#xff0c;擅长Java、微信小程序、Python、Android等&#xff0c;大家有这一块的问题可以一起交流&#xff01; 各类成品java毕设 。javaweb&#xff0c;ssh&#xff0c;ssm&#xff0c;springboot等等项…

Jira 8.4.1在Windows环境下的安装和配置

一. Jira安装的环境准备 1.JDK1.8的下载和安装 Jira的运行是依赖java环境的&#xff0c;也就是说需要安装JDK并且要是1.8以上版本。(网上搜一下教程) 2.MySQL数据库的下载和安装(网上搜一下教程) 数据库版本&#xff1a;MySQL5.6&#xff0c;版本太高有时会出现连接不到的…

从双目标定到立体匹配:pyton实践指南

文章目录 前言标定立体匹配文章已经同步更新在3D视觉工坊啦&#xff0c;原文链接如下&#xff1a; 前言 立体匹配是计算机视觉中的一个重要领域&#xff0c;旨在将从不同角度拍摄的图像匹配起来&#xff0c;以创建类似人类视觉的3D效果。实现立体匹配的过程需要涉及许多步骤&a…

华为OD机试真题B卷 Java 实现【统计每个月兔子的总数】,附详细解题思路

一、题目描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例如&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子都…