POJO是一个简单的、普通Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具备任何特殊角色,不继承或不实现任何其它Java框架的类或接口。能够包含相似与JavaBean属性和对属性访问的setter和getter方法的。html
基本意思是说POJO一个普通的Java对象(不是JavaBean,EntityBean等),也不担当任何的特殊的角色,也不实现任何Java框架指定的接口。java
错误的POJOmysql
public class DbHello implements Hello { //实现了接口,就不能称之为POJO,这已经不是简单的Java类了 private DictionaryDAO dao; public void setDao(DictionaryDAO dao) { this.dao = dao; } }
正确的POJOgit
public class DbHello { //简单的Java类,称之为POJO,不继承,不实现接口 private DictionaryDAO dao; public void setDao(DictionaryDAO dao) { this.dao = dao; } }
在JPA中,@GeneratedValue
注解存在的意义主要就是为一个实体生成一个惟一标识的主键(JPA要求每个实体Entity,必须有且只有一个主键)web
@GeneratedValue
提供了主键的生成策略。@GeneratedValue
注解有两个属性,分别是strategy
和generator
,其中generator
属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator和@TableGenerator)。spring
JPA为开发人员提供了四种主键生成策略,其被定义在枚举类GenerationType中,包括GenerationType.TABLEsql
GenerationType.SEQUENCE数据库
GenerationType.IDENTITYjson
GenerationType.AUTOapi
–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; ...... }
Web UI项目中, 不少 Spring controller 视图函数直接返回 html 页面, 还有一些视图函数是要重定向或转发到其余的 url 上.
redirect 和 forward的区别:
重定向 redirect: 完整的重定向包含两次request-response过程,
第一次是访问原始url
第二次是服务器通知客户端访问重定向后的url. 重定向完成后, 浏览器的地址是重定向后的url, 而不是原始的url
重定向的使用场景: 由于重定向会修改浏览器地址, 因此 form 提交应该使用重定向, 以避免用户刷新页面致使form重复提交.
转发 forward: 完整的转发仅包含一次 request-response 过程, 用户发出request后, 服务器端视图函数先处理本身的逻辑, 而后在服务器端有调用另外一个视图函数, 最后将response返回给浏览器.
控制层调用service层
service调用dao层
dao调用具体的增删改查
获取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; } }
获取请求参数的值
获取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是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。
便可以使用@GetMapping(value = “/hello”)来代替@RequestMapping(value=”/hello”,method= RequestMethod.GET)。便可以让咱们精简代码。
@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"; } }
CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它容许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制
addMapping:配置能够被跨域的路径,能够任意配置,能够具体到直接请求路径。
allowedMethods:容许全部的请求方法访问该跨域资源服务器,如:POST、GET、PUT、DELETE等。
allowedOrigins:容许全部的请求域名访问咱们的跨域资源,能够固定单条或者多条内容,如:"http://www.baidu.com",只有百度能够访问咱们的跨域资源。
allowedHeaders:容许全部的请求header访问,能够自定义设置任意请求头信息,如:"X-YAUTH-TOKEN"
在用spring Boot
作web
后台时,常常会出现异常,若是每一个异常都本身去处理很麻烦,因此咱们建立一个全局异常处理类来统一处理异常。经过使用@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() 进行匹配