1.jpa的findOne(T)方法,1.x.x的版本是可以用于通过id查询单条记录的,参数也只有一个,而2.x.x变成了
findById().get(); 这里涉及到两个方法,其中findById()是可以通过参数id查询,会返回一个值,然后get()方法对这个值进行判断,如果为空则会直接抛异常。所以这里要特别注意,如果抛了这个异常的话说明findById()没有返回值,即可能是数据库中没有这个id。
2.PageRequest pageRequest = new PageRequest(int,int)这个方法已经过时,限制被静态方法of代替
这个方法主要是用于分页查询,返回每个page有多少条size(数据)。
1.@Data:使用这个注解可以不用写getter,setter方法和toString方法,如果只想要某个方法可以用@Getter/@Setter;此外,实体类可以生成构造方法,这样子可以加入一些参数,使得后期代码比较简洁。再IDEA中可以安装lombok插件。
2.@DynamicUpdate:动态更新时间
3.@Entity:表明这个类是一个实体类,对应一个数据库表。比如:类名ProductCategory对应数据库表名product_category,springboot-jpa定义的规则 :如果数据库表不是加了下划线,则需要加上@Table(name="tablename")指明数据库表名。
4.@Slf4j:使用这个注解就可以直接使用log.info等,不用再new一个Logger对象
5.@GeneratedValue:用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
GenerationType有四种值,分别如下图:
–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
6.@JsonInclude(JsonInclude.Include.NON_NULL)
这个注解表明当对象在转换 JSON (序列化)的时候,值为Null
或者为“”的对象不输出。
7.
@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称。主要应用场景是,当API文档中,json格式的key名和数据库中的字段名不一致时,可以通过这个注解进行转换,实现参数的接收。
@JsonInclude
注解来标记,但是值的可选项有四类。Default
/ 都参与序列化) Value
为默认值的时候不参与,如Int a;
当 a=0
的时候不参与)Value
为“”
或者null
不输出)Value
为null
不输出)可以在springboot的配置文件中通过下面的设置,使其全局生效
1.创建好相关的接口,注意要继承JpaRepository
1.Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现
2.spring data jpa默认预先生成了一些基本的CURD的方法,例如:增、删、改等,所有的xxxRepository都需要继承JpaRepository
3.spring data jpa还可以实现自定义查询,但是要遵循一定的规则,它可以根据方法名来自动生成SQL,主要的语法是findXXBy
,readAXXBy
,queryXXBy
,countXXBy
, getXXBy
后面跟属性名称,也使用一些加一些关键字And
、 Or,如:
4.分页查询:spring data jpa已经帮我们实现了分页的功能,在查询的方法中,需要传入参数Pageable
,当查询中有多个参数的时候Pageable
建议做为最后一个参数传入
Pageable
是spring封装的分页实现类,使用的时候需要传入页数、每页条数和排序规则
此外,还可以自己写sql语句,多表查询等,具体参照文末连接。
1.BeanUtils.copyProperties(Object source,Object target)这个方法表示将source的内容拷贝到target中,使用的时候要注意:
1).这两个对象中的属性命名要一样,否则无法使用这个方法;
2).要注意source对象的属性会覆盖target的属性,所以应当注意source中的属性是否为null,如果为null,后期可能会包一些空指针的错或者 No value present
1.JAVA中字符串比较equals()和equalsIgnoreCase()的区别
1).equals()函数:
主要是区分“比较的字符串” 大小写和长度时候相同,比较的类型可以是Object类型。
2).equalsIgnoreCase()函数:
比较的参数只能是字符串,这里只要字符串的长度相等,字母的大小写是忽略的。认为A-Z和a-z是一样的。
2.注入配置文件属性时,出现这个报错,引入相应的依赖即可
3.RestTemplate
通过RestTemplate类,spring可以调用rest资源,RestTemplate定义了36个与REST资源交互的方法,其中的大多数都对应于HTTP的方法(比如get,post等)。其实,这里面只有11个独立的方法,其中有十个有三种重载形式,而第十一个则重载了六次,这样一共形成了36个方法。 比如:getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
附录:
springboot1.x.x到2.x.x踩坑记录:https://blog.csdn.net/cslucifer/article/details/79611158
springboot jpa:https://www.cnblogs.com/study-makes-me-happy/p/7999620.html
@Component, @Repository, @Service的区别:https://blog.csdn.net/fansili/article/details/78740877
详解 RestTemplate 操作:https://blog.csdn.net/striveb/article/details/85019370
觉得有收获的,可以来一波赞赏!