zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [转]百度地图API详解之地图坐标系统
    [转]MBTiles 离线地图演示
    [shell 编程] if [ $# -eq 0 ]该语句是什么含义?
    [shell编程] sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
    [Android Studio] Android studio 多渠道打包(超简洁版)
    [Android Pro] Android中全局Application的onCreate多次调用问题
    [Java基础] Java如何实现条件编译
    [Git] 根据commiter过滤该用户的所有提交
    [Android Pro] Notification的使用
    [Git] Git把Tag推送到远程仓库
  • 原文地址:https://www.cnblogs.com/baichendongyang/p/13235543.html
Copyright © 2011-2022 走看看