springboot微信点餐问题&知识点记录(持续更新中)

一.首先是springboot的版本,我用的是2.0.4,与视频中(springboot1.5.3)不是同一个版本,所以会有些不同。其中目前已发现的不同主要是:

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对象

扫描二维码关注公众号,回复: 2947433 查看本文章

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 注解来标记,但是值的可选项有四类。

  1. Include.Include.ALWAYS (Default / 都参与序列化) 
  2. Include.NON_DEFAULT(当Value 为默认值的时候不参与,如Int a; 当 a=0 的时候不参与)
  3. Include.NON_EMPTY(当Value 为“” 或者null 不输出)
  4. Include.NON_NULL(当Value 为null 不输出)

可以在springboot的配置文件中通过下面的设置,使其全局生效

三.使用jpa开发dao层

1.创建好相关的接口,注意要继承JpaRepository<T,ID>,然后自定义相关的方法,简单的CURD,Spring Data JPA已经默认实现了,可以直接调用,不过要注意springboot版本的不同,可能会有些差别。;

四.springboot jpa

1.Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现

2.spring data jpa默认预先生成了一些基本的CURD的方法,例如:增、删、改等,所有的xxxRepository都需要继承JpaRepository<T,ID>,其中,T为xxx类型,ID为主键类型,因为这个类主要是依托于JpaRepository操作数据库的,所有一般xxxRepository是一个实体类的CURD,所有T为这个实体类的类型,而ID为这个实体类映射的数据表的主键。如下图所示:

3.spring data jpa还可以实现自定义查询,但是要遵循一定的规则,它可以根据方法名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBygetXXBy后面跟属性名称,也使用一些加一些关键字And、 Or,如:

List<ProductInfo> findByProductStatus(Integer productStatus);

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/itguangit/article/details/78825505

猜你喜欢

转载自blog.csdn.net/striveb/article/details/81865333