JavaWeb后端基础(4)

打印 上一主题 下一主题

主题 996|帖子 996|积分 2988

这一篇就开始是做一个项目了,在项目里学习,我主要记载在学习过程中碰到的问题,以及一些知识点
Restful风格

一种软件架构风格
在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。


  • GET : 查询
  • POST :新增
  • PUT : 修改
  • DELETE :删除
我们看到如果是基于REST风格,定义URL,URL将会更加简便、更加规范、更加优雅。
@RequestMapping注解

开发里经常用下面这种风格


  • GET方式:@GetMapping
  • POST方式:@PostMapping
  • PUT方式:@PutMapping
  • DELETE方式:@DeleteMapping
 数据封装

实体类属性名和数据库表查询返回的字段名一致,mybatis会主动封装。如果实体类属性名和数据库表查询返回的字段名不一致,不能主动封装。
手动结果映射、起别名、开启驼峰命名
手动结果映射

  1. @Results({@Result(column = "create_time", property = "createTime"),
  2.           @Result(column = "update_time", property = "updateTime")})
  3. @Select("select id, name, create_time, update_time from dept")
  4. public List<Dept> findAll();
复制代码
起别名

  1. @Select("select id, name, create_time createTime, update_time updateTime from dept")
  2. public List<Dept> findAll();
复制代码
开启驼峰命名(保举)

如果字段名与属性名符合驼峰命名规则,mybatis会主动通过驼峰命名规则映射。驼峰命名规则: abc_xyz => abcXyz
在application.yml中做如下配置,开启开关
  1. mybatis:
  2.   configuration:
  3.     map-underscore-to-camel-case: true
复制代码
实体类的属性与数据库表中的字段名严格服从驼峰命名。
Nginx反向署理




  • location:用于定义匹配特定uri请求的规则。
  • ^~ /api/:表示精确匹配,即只匹配以/api/开头的路径。
  • rewrite:该指令用于重写匹配到的uri路径。
  • proxy_pass:该指令用于署理转发,它将匹配到的请求转发给位于后端的指令服务器。
 简单参数吸收

 方案一:通过原始的 HttpServletRequest 对象获取请求参数

  1. /**
  2. * 根据ID删除部门 - 简单参数接收: 方式一 (HttpServletRequest)
  3. */
  4. @DeleteMapping("/depts")
  5. public Result delete(HttpServletRequest request){
  6.     String idStr = request.getParameter("id");
  7.     int id = Integer.parseInt(idStr);
  8.    
  9.     System.out.println("根据ID删除部门: " + id);
  10.     return Result.success();
  11. }
复制代码



方案二:通过Spring提供的 @RequestParam 注解,将请求参数绑定给方法形参 

  1. @DeleteMapping("/depts")
  2. public Result delete(@RequestParam("id") Integer deptId){
  3.     System.out.println("根据ID删除部门: " + deptId);
  4.     return Result.success();
  5. }
复制代码
方案三:如果请求参数名与形参变量名相同,直接定义方法形参即可吸收。(省略@RequestParam)

  1. @DeleteMapping("/depts")
  2. public Result delete(Integer id){
  3.     System.out.println("根据ID删除部门: " + deptId);
  4.     return Result.success();
  5. }
复制代码
JSON参数吸收 



  • JSON格式的参数,通常会使用一个实体对象进行吸收 。
  • 规则:JSON数据的键名与方法形参对象的属性名相同,并须要使用@RequestBody注解标识。
  1. /**
  2. * 新增部门 - POST http://localhost:8080/depts   请求参数:{"name":"研发部"}
  3. */
  4. @PostMapping("/depts")
  5. public Result save(@RequestBody Dept dept){
  6.     System.out.println("新增部门, dept=" + dept);
  7.     deptService.save(dept);
  8.     return Result.success();
  9. }
复制代码

路径参数吸收

/depts/1,/depts/2 这种在url中转达的参数,我们称之为路径参数
路径参数:通过请求URL直接转达参数,使用{…}来标识该路径参数,须要使用 @PathVariable获取路径参数。
  1. /**
  2. * 根据ID查询 - GET http://localhost:8080/depts/1
  3. */
  4. @GetMapping("/depts/{id}")
  5. public Result getById(@PathVariable Integer id){
  6.     System.out.println("根据ID查询, id=" + id);
  7.     Dept dept = deptService.getById(id);
  8.     return Result.success(dept);
  9. }
复制代码
日志

导入依赖---->配置logback.xml---->记载日志
Logback配置文件

如果须要输出日志到控制台。添加如下配置:
  1. <!-- 控制台输出 -->
  2. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  3.     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  4.             <!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
  5.             <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
  6.     </encoder>
  7. </appender>
复制代码
如果须要输出日志到文件。添加如下配置:
  1. <!-- 按照每天生成日志文件 -->
  2. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  3.     <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  4.         <!-- 日志文件输出的文件名, %i表示序号 -->
  5.         <FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
  6.         <!-- 最多保留的历史日志文件数量 -->
  7.         <MaxHistory>30</MaxHistory>
  8.         <!-- 最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB -->
  9.         <maxFileSize>10MB</maxFileSize>
  10.     </rollingPolicy>
  11.     <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  12.         <!--格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符 -->
  13.         <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
  14.     </encoder>
  15. </appender>
复制代码
日志开关配置 (开启日志(ALL),取消日志(OFF))
  1. <!-- 日志输出级别 -->
  2. <root level="ALL">
  3.     <!--输出到控制台-->
  4.     <appender-ref ref="STDOUT" />
  5.     <!--输出到文件-->
  6.     <appender-ref ref="FILE" />
  7. </root>
复制代码
logback日志级别


日志级别阐明
trace追踪,记载步伐运行轨迹 【使用很少】
debug调试,记载步伐调试过程中的信息,实际应用中一般将其视为最低级别 【使用较多】
info记载一般信息,描述步伐运行的关键事件,如:网络毗连、io操作 【使用较多】
warn告诫信息,记载潜在有害的情况 【使用较多】
error错误信息 【使用较多】
 @Slf4j

lombok中提供的@Slf4j注解,可以简化定义日志记载器这步操作。添加了该注解,就相当于在类中定义了日志记载器,就下面这句代码:
private static Logger log = LoggerFactory. getLogger(Xxx. class);


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表