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

    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/striveb/article/details/85019370

  • 相关阅读:
    42. Trapping Rain Water
    223. Rectangle Area
    645. Set Mismatch
    541. Reverse String II
    675. Cut Off Trees for Golf Event
    安装 VsCode 插件安装以及配置
    向上取整 向下取整 四舍五入 产生100以内随机数
    JS 判断是否为数字 数字型特殊值
    移动端初始配置,兼容不同浏览器的渲染内核
    Flex移动布局中单行和双行布局的区别以及使用
  • 原文地址:https://www.cnblogs.com/baichendongyang/p/13235543.html
Copyright © 2020-2023  润新知