TmallSpringBoot实战学习笔记

Tmall_SpringBoot项目练习

POJO

​ POJO是一个简单的、普通Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色,不继承或不实现任何其它Java框架的类或接口。可以包含类似与JavaBean属性和对属性访问的setter和getter方法的。

基本意思是说POJO一个普通的Java对象(不是JavaBean,EntityBean等),也不担当任何的特殊的角色,也不实现任何Java框架指定的接口。

错误的POJO

public class DbHello implements Hello { 
    //实现了接口,就不能称之为POJO,这已经不是简单的Java类了
     private DictionaryDAO dao;

     public void setDao(DictionaryDAO dao) {
            this.dao = dao;
     }
} 

正确的POJO

public class DbHello { 
        //简单的Java类,称之为POJO,不继承,不实现接口
     private DictionaryDAO dao;
     public void setDao(DictionaryDAO dao) {
            this.dao = dao;
     }

} 

JPA之@GeneratedValue注解

​ 在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键)

@GeneratedValue提供了主键的生成策略。@GeneratedValue注解有两个属性,分别是strategygenerator,其中generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator和@TableGenerator)。

JPA为开发人员提供了四种主键生成策略,其被定义在枚举类GenerationType中,包括GenerationType.TABLE

GenerationType.SEQUENCE

GenerationType.IDENTITY

GenerationType.AUTO

–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

实例

@Entity //jpa标注实体
@Table(name = "t_customer") // 创建/修改表的名称
@Data
public class Customer {

    @Id // 主键
    //@GeneratedValue(strategy = GenerationType.AUTO)
    //主键自增 Auto为默认使用oracle自增的方式 
    //所以在运行时会多生成一张表 记录从1开始 记录主键
    //这里不适用与mysql 但是使用
    //@GeneratedValue(strategy = GenerationType.IDENTITY)报主键不能为空错误
    private Long id;

    @Column(name = "name", nullable = true) 
    // 数据库对应字段名 非空约束(可以为空)
    private String name;

    @Column(name = "remark", nullable = true)
    // 数据库对应字段名 非空约束(可以为空)
    private String remark;
    
    ......

}

RESULTFul

阮一峰博客链接

url重定向和转发

​ Web UI项目中, 很多 Spring controller 视图函数直接返回 html 页面, 还有一些视图函数是要重定向或转发到其他的 url 上.

redirect 和 forward的区别:

重定向 redirect: 完整的重定向包含两次request-response过程,

第一次是访问原始url

第二次是服务器通知客户端访问重定向后的url. 重定向完成后, 浏览器的地址是重定向后的url, 而不是原始的url

重定向的使用场景: 因为重定向会修改浏览器地址, 所以 form 提交应该使用重定向, 以免用户刷新页面导致form重复提交.

转发 forward: 完整的转发仅包含一次 request-response 过程, 用户发出request后, 服务器端视图函数先处理自己的逻辑, 然后在服务器端有调用另一个视图函数, 最后将response返回给浏览器.

harrychinese 刘忠武_博客园引用

调用顺序

控制层调用service层

service调用dao层

dao调用具体的增删改查

常用注解

@PathVaribale

​ 获取url中的数据

如果我们需要获取Url=localhost:8080/hello/id中的id值,实现代码如下:
@RestController
public class HelloController {
    @RequestMapping(value="/hello/{id}",method= RequestMethod.GET)
    public String sayHello(
                        @PathVariable("id") Integer id){
        return "id:"+id;
    }
}


同样,如果我们需要在url有多个参数需要获取,则如下代码所示来做就可以了。
@RestController
public class HelloController {
    @RequestMapping(value="/hello/{id}/{name}",method=RequestMethod.GET)
    public String sayHello(
                        @PathVariable("id") Integer id,
                        @PathVariable("name") String name){
        return "id:"+id+" name:"+name;
    }
}

@RequestParam

​ 获取请求参数的值

获取Url=localhost:8080/hello?id=98中id的值
@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(@RequestParam("id") Integer id){
        return "id:"+id;
    }
}


@RequestParam注解给我们提供了这种解决方案,即允许用户不输入id时,使用默认值

@RestController
public class HelloController {
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    //required=false 表示url中可以不穿入id参数,此时就使用默认参数
    public String sayHello(@RequestParam(value="id",required = false,defaultValue = "1") Integer id){
        return "id:"+id;
    }
}

@GetMapping

@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。

即可以使用@GetMapping(value = “/hello”)来代替@RequestMapping(value=”/hello”,method= RequestMethod.GET)。即可以让我们精简代码。

HelloWorld_EE_csdn

@RestController

@RestController Spring框架4版本之后出来的注解,之前版本返回json数据需要@ResponseBody配合@Controller

@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

等同于下面
@Controller
@ResponseBody
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

HelloWorld_EE

添加支持CORS跨域访问

CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制

addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。
allowedMethods:允许所有的请求方法访问该跨域资源服务器,如:POST、GET、PUT、DELETE等。
allowedOrigins:允许所有的请求域名访问我们的跨域资源,可以固定单条或者多条内容,如:"http://www.baidu.com",只有百度可以访问我们的跨域资源。
allowedHeaders:允许所有的请求header访问,可以自定义设置任意请求头信息,如:"X-YAUTH-TOKEN"

恒宇少年——简书

统一异常处理ControllerAdvice

在用spring Bootweb后台时,经常会出现异常,如果每个异常都自己去处理很麻烦,所以我们创建一个全局异常处理类来统一处理异常。通过使用@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义。

自定义全局异常处理类 GlobalExceptionHandler.java

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MyException.class)

    @ResponseBody
    public Result handleMyException(HttpServletRequest request, MyException e){
        String message = e.getMessage();
        Integer code = e.getCode();
        Result result = new Result(code,message);
        return result;
    }
}

只需要使用 @ControllerAdvice 注解来标识即可,可以结合 @Controller 注解来理解.

@Controller 注解标识的类 拦截所有的web请求,使用 @RequestMappering() 进行匹配

@ControllerAdvice 注解标识的类 拦截程序抛出的异常,使用@ExceptionHandler() 进行匹配

赵彦军

PostTruth

SpringBoot添加webapp目录

fakerswe——csdn

持续更新中

猜你喜欢

转载自www.cnblogs.com/isren/p/11809739.html