| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 学习记录tips -> 正文阅读 |
|
[Java知识库]学习记录tips |
记录
1、Lombok 的 @Builder 注解@Builder 注释为类生成相对略微复杂的构建器API。@Builder 可以让你以下面显示的那样调用你的代码,来初始化实例对象:
我们在对实体对象进行操作时,往往会存在对某些实体对象的某个字段进行二次赋值。@Builder 注解里有个 toBuilder() 方法,使用 toBuilder() 可以实现以一个实例为基础继续创建一个对象,也就是重用原来对象的值。但是,这会创建一个新的对象,而不是原来的对象,原来的对象属性是不可变的,除非你自己想要给这个实体类再添加上 @Data 或者 @Setter 方法。 2、Lombok 的 @Accessors 注解(1)该注解主要作用是:当属性字段在生成 getter 和 setter 方法时,做一些相关的设置。 (2)当它可作用于类上时,修饰类中所有字段,当作用于具体字段时,只对该字段有效。 该字段共有三个属性,分别是 fluent,chain,prefix。 2.1 fluent 属性
2.2 chain 属性
2.3 prefix 属性
比如现在有 xxName 字段和 yyAge 字段,xx 和 yy 分别是 name 字段和 age 字段的前缀。 那么,我们在生成的 getter 和 setter 方法如下,它也是带有 xx 和 yy 前缀的。 如果,我们把它的前缀加到 @Accessors 的属性值中,则可以像没有前缀那样,去调用字段的 getter和 setter 方法。
3、CharSequenceCharSequence 在 java.lang 包下,是一个描述字符串结构的接口,表示 char 值的一个可读序列。此接口对许多不同种类的 char 序列提供统一的自读访问。此接口不修改 equals 和 hashCode 方法的常规协定,因此,通常未定义比较实现 CharSequence 的两个对象的结果。他有几个实现类:CharBuffer、String、StringBuffer、StringBuilder。
参考自:CharSequence详情介绍 4、springboot 参数校验实际业务开发中,为了避免入参错误对业务系统有影响,一般会都会在Controller层进行参数校验,常见的方式主要包含了两种: get、delete等请求,参数形式为RequestParam/PathVariable 必须在Controller类上标注@Validated注解;
转载自:springboot 参数校验 5、Mybatis 方法单个参数正常情况下,mybatis 在进行参数判断的时候,直接用就可以了,使用 entity 实体或者 Map 的时候,下面的代码是正确的: 我们需要使用 if 参数判断 引入参数,会抛异常 nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘deptId’ in ‘class java.lang.String’
原因就是对于这类单个入参然后用 if 判断的,mybatis 有自己的内置对象,Mybatis 默认采用 OGNL 解析参数,所以会自动采用对象树的形式取 string.xxx 值,如果没在方法中定义,则会抛异常报错。 解决方案: 方案一:把 #{xxx} 修改为 #{_parameter}
方案二:在方法中提前定义
转载自:【Mybatis异常】nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter 6、@Configuration 注解@Configuration,功能:将想要的组件添加到容器中。使用注解 @Configuration,告诉Spring Boot这是一个配置类。 在Spring Boot 5.2之后的@Configuration注解多了一个属性proxyBeanMethods,默认为true(翻译:代理bean的方法) 也就是说,虽然写的配置类是在容器中注册组件用的,但是在注册组件之前会在容器中查找有没有该组件。如果有,则取该组件用于保证单实例,如果没有再注册一个新的组件。 如果将@Configuration(proxyBeanMethods = true)改为false,每一个方法都会新注册一个组件,改为false后久不会再保存代理对象了。 proxyBeanMethods:代理bean的方法 (1)Full:(proxyBeanMethods = true) //全模式 (2)lite:(proxyBeanMethods = false) //轻量级 总结:用于解决组件依赖 转载自:@Configuration详解 7、Assert工具类从JDK1.4版本开始,Java语言引入了断言(assert)机制。该类在 package org.springframework.util 包下。 断言常用的方法: (1)notNull(Object object)当 object 为 null 时抛出异常,notNull(Object object, String message) 方法允许通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object) / isNull(Object object, String message),它要求入参一定是 null; (2)isTrue(boolean expression) / isTrue(boolean expression, String message)当 expression 不为 true 抛出异常; (3)notEmpty(Collection collection) / notEmpty(Collection collection, String message)当集合未包含元素时抛出异常。 notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断; 8、Optional类Optional类主要解决空指针异常NullPointerException。 创建Optional 对象 声明一个空的Optional:
依据一个非空值创建Optional:
由于这种方法创建时,会new Optional(T t),而在new的过程中,私有的构造函数对其传入的变量有检验:
当传入的参数为 null 时会爆 NullPointerException 转载自:java8中的Optional 9、LocalDate类的plusDays()方法plusDays() 方法用于将以天为单位的给定持续时间添加到此 LocalDate 并返回 LocalDate。此方法是一个非静态方法,只能通过类对象访问,如果尝试使用类名访问该方法,则会收到错误消息。 例子:
输出结果:
转载自:Java LocalDate类 | plusDays()方法与示例 10、Mybatis 报错 Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameterCause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 wit 解决办法:把注释去掉 转载自:Mybatis 报错 Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter 11、Mybatis——foreach用法foreach 元素的属性 (1)collection:要做 foreach 的对象,作为入参时,List<?> 对象默认用 list 代替作为键,数组对象有 array 代替作为键,Map 对象没有默认的键。 (2)item: 循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。 (3)index: 在list、array中,index为元素的序号索引。但是在Map中,index为遍历元素的key值,该参数为可选项; (4)open: 遍历集合时的开始符号,通常与close=")"搭配使用。使用场景IN(),values()时,该参数为可选项; (5)separator: 元素之间的分隔符,类比在IN()的时候,separator=“,”,最终所有遍历的元素将会以设定的(,)逗号符号隔开,该参数为可选项; (6)close: 遍历集合时的结束符号,通常与open="("搭配使用,该参数为可选项; 如果传入的参数类型为 List 时,collection 的默认属性值为 list,同样可以使用 @Param 注解自定义 keyName。 示例:
Mapper.xml 动态 sql 构建,Mapper 接口的方法名和 xml 文件的 id 值,必须一一对应,否则会报错:
使用默认属性值 list 作为 keyname: 对应的 Dao 中的 Mapper 文件是:
xml 文件代码片段:
转载自:1、Mybatis——foreach用法 12、Spring 常用注解@Configuration,@Bean,@Component,@Service,@Controller,@Repository,@Entity的区分与学习(1)@Component (2)@Service,@Controller,@Repository @Controller注解类:SpringMVC 的理念,进行前端请求的处理,转发,重定向。包括调用Service层的方法。 @Service注解类:处理业务逻辑 @Repository注解类:作为 DAO 对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作。 (3)@Entity注解 (4)@Configuration (5)@Bean 转载自:Spring 常用注解@Configuration,@Bean,@Component,@Service,@Controller,@Repository,@Entity的区分与学习 13、sql的四种连接——左外连接、右外连接、内连接、全连接(1)内连接
①自连接 ②等值连接 ③不等值连接 (2)左外连接(left outer join,outer 可省略) (3)右外连接(right outer join,outer 可省略) (4)全连接(full outer join,outer 可省略) 转载自:1、sql的四种连接——左外连接、右外连接、内连接、全连接 14、mybatis 中的<![CDATA[ ]]>用法及说明(1)平时在 mybatis 的映射文件写 sql 时,很多时候都需要写一些特殊的字符。例如:“<” 字符 “>” 字符 “>=” 字符 “<=” 字符,但是在 xml 文件中并不能直接写上述列举的字符,否则就会报错。 (2)因为在解析 xml 文件时候,我们如果书写了特殊字符,在没有特殊处理的情况下。这些字符会被转义,但我们并不希望它被转义,所以我们要使用 <![CDATA[ ]]> 来解决。 (3)那为什么要这样书写呢?<![CDATA[ ]]> ,不言而喻:这是 XML 语法。在 CDATA 内部的所有内容都会被解析器忽略(在该标签中的语句和字符原本是什么样的,在拼接成 SQL 后还是什么样的)。 (4)所以,当我们在 xml 文本中包含了很多的 “<” 字符 “<=” 和 “&” 字符—就像程序代码一样,那么最好把他们都放到 CDATA 部件中。 注意: 转载自:1、CDATA[]的简单使用 15、parallelStream() 并行流操作这是流编程,stream() 是串行操作的。但是 parallelStream() 恰恰相反,是并行操作的,两者的执行效率的话肯定是 parallelStream() 要快,毕竟是多线程的,但是这就就会涉及到线程安全的问题了,一旦涉及到线程安全的问题,那些线程不安全的集合类型都不能用,像 HashMap、ArrayList 都不能用,只能用线程安全的集合。 16、Stream流的用法steam():把一个源数据,可以是集合,数组,I/O channel, 产生器 generator 等,转化成流。 forEach():迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数。
map():用于映射每个元素到对应的结果。以下代码片段使用 map 输出了元素对应的平方数:
Collectors.toMap 有三个重载方法:
参数解释: (1)keyMapper:Key 的映射函数 示例:
用 Collectors.toMap:
转载自:1、java8 .stream().map().collect() 的用法 17、mybatis 映射内部类参考文章:mybatis映射内部类的使用及注意事项 18、 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/30 13:37:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |