2021.12.5 周六 java学习日志 spring boot

最近好几天没有更新了,这次就更新一个大的吧。这次是初识了springboot,跟着视频写了一些小栗子,源码放在下载栏目中了。一共53个小栗子。

下面是对这53个小栗子的总结。


00 这是自己写的一个后台商品查询的小项目。
   1.注意干掉test测试
01 创建Springboot工程
02 所有的代码与Application同级或者更低
   @Controller
   @RequestMapping
   @ResponseBody
   @Component       把此类交给spring容器进行管理
   @Autowired
   @Value
   @Service         将接口的实现类交给spring容器进行管理。
   @Mapper          写在dao接口的头上:扫描DAO接口到spring容器。
03 核心配置文件是      :application.properties
04 核心配置文件也可以是:application.yaml
05 application.properties与application.yaml同时存在:
   application.properties更优先。
06 开发、测试、准生产、生产四种环境:4个配置文件+1个主配置文件
   想用哪个配置文件,就在主配置文件激活哪一个配置文件。 (基于application.properties)
07 开发、测试、准生产、生产四种环境:4个配置文件+1个主配置文件
   想用哪个,就在主配置文件激活。 (基于application.yam)
08 主配置文件中,自定义配置。在其他类中可以使用@Value()获取到主配置文件中自定义的的(***=****)
   @Value("${school.name}")
   private String schoolName;
09 使用:@ConfigurationProperties(prefix = "abc") 注解,写在实体类的头上,
   然后可以在主配置文件中给实体类的属性赋值。
10 jsp与springboot的融合。
   jsp:pom文件添加依赖和编译位置选择、主配置文件配置视图解析器。
   使用ModelAndView这个类进行页面的跳转。
11 没用
--------------------------------------------------------------------------------------------
12是核心,必须搞明白!!!!
12 使用GeneratorMapper.xml文件进行mybatis的自动生成。
   1.mapper文件自动生,包含:mapper文件、dao接口
     1.1@Mapper写在dao接口的头上:扫描DAO接口到spring容器
   2.model文件自动生成,包含:student实体类
   3.service文件,自己写的,包含业务接口、业务接口的实现类
     3.1 @Service 写在业务接口实现类的头上
     3.2 @Autowired  //注入dao接口
         private StudentMapper studentMapper;
     3.3 经过重重验,发现:上面的studentMapper就是一个mapper文件的代理对象
     3.4 所以可以直接调用mapper文件中的方法:studentMapper.selectByPrimaryKey(id)
   4.web文件,自己写的,包含:Controller(相当于一个servlet)
     4.1在这里可以直接去调用业务接口中的方法。
   5.Application:项目的启动文件
   至此们终于完全搞明白了,所有了这个模式下的所有的大框架的问题。
   无非就是上面的mapper文件,dao接口,model实体类,业务接口,业务接口的实现。
--------------------------------------------------------------------------------------------
13.解决问题:在StudentMapper.xml文件中,传进来的参数,使用的是Integer等封装类型,规避了不等于空的判断。
14.和12一样,但是解决了一个问题:不用在mapper文件下的,每个Mapper接口的头上写@Mapper了
   14.1 之前的操作是:通过扫描的方式,将dao接口和其对应的mapper文件写入到spring容器中(最麻烦)
   14.2 StudentMapper接口的头上写@Mapper=============(改进)
         扫描DAO接口到spring容器
   14.3 =====再改进====:在Application.java文件里写这样的注解:
        @MapperScan("com.bjpowernode.springboot.mapper")
        直接开启扫描Mapper接口的包以及子目录。
   14.4面向懒狗编程,越来越轻松了嘿嘿嘿。
--------------------------------------------------------------------------------------------
15.mapper文件的两种存放位置:
   15.1直接和dao接口存放在一起,这也是使用GeneratorMapper插件自动生成的样子,
       但是呢,编译的时候不能编译进去,所以要在pom文件那里通知:xml文件的编译
       <!--手动规定src/main/java下的xml文件夹为resources里的文件
           因文resources文件下的文件是能够自动编译,java文件下的文件只能编译.java文件-->
           <resources>
               <resource>
                   <directory>src/main/java</directory>
                   <includes>
                       <include>**/*.xml</include>
                   </includes>
               </resource>
           </resources>
   15.2把mapper文件,放在resources文件下面(这样不用考虑编译时,不能编译进去)
      但是呢,需要在application.properties主配置文件里,指定MyByBatis映射文件的路径:
      mybatis.mapper-locations=classpath:mapper/*.xml
--------------------------------------------------------------------------------------------
16.Spring支持事务。使用到的技术是:@Transactional注解。
   写在service实现类的方法上面。
--------------------------------------------------------------------------------------------
17.springboot整合springmvc的一些注解
   17.1 @Controller    +@RequestMapping+ @ResponseBody    返回json对象
       =@RestController+@RequestMapping                   返回json对象
       当实际开发中,控制器返回的都是json格式的数据,就直接使用:@RestController
   17.2 复习:@RequestMapping 属性值有两个:value和method。
        value:书写的是请求地址
        method:书写的是请求的方式-----默认是post、get请求方式均可。
        (value = "/queryStudentById",method = {RequestMethod.GET,RequestMethod.POST})
   17.3 @RequestMapping的替代品@GetMapping和@PostMapping
        例子:@GetMapping(value="/say")     处理器只能接受get请求    查询数据使用
             @PostMapping(value="/say")    处理器只能接受post请求   增加数据使用
        注意:地址栏发出的请求均是get请求。
   17.4@DeleteMapping
       例子:@DeleteMapping(value="/say")  处理器只能接受delete请求  删除数据使用
       注:不仅仅只是有get和post两种请求方式啊,还有很多种请求方式的。
   17.5@PutMapping
      作为 @RequestMapping(value = "/say",method = RequestMethod.PUT)的替代品
      例子:@PutMapping(value="/say")    处理器只能接受put请求    改数据使用
--------------------------------------------------------------------------------------------
18. RESTful请求风格。
    18.1 @PathVariable注解:接受路径形式的请求参数。
    @GetMapping(value = "/student/detail/{id}/{age}") //作为RESTful风格,请求路径是写成路劲形式的。
    public Object student1(@PathVariable("id") Integer id,
                           @PathVariable("age") Integer age) {
            ****
            ****
    }
--------------------------------------------------------------------------------------------
19.springboot集成redis
   1.添加redis依赖
   2.核心配置文件,配置redis信息
   你妈的,必须是要设置一个redis的密码,不然会报一大堆的什么狗屁错误。密码:123456
   auth 123456
   ok
   3.业务接口的实现类要:注入操作redis的模板
         @Autowired   //关键点:注入操作redis的模板
         private RedisTemplate<Object,Object> redisTemplate;
   坚持住,后面肯定是不会大规模的用redis的。就这个屌redis的链接,搞了我一个上午。
--------------------------------------------------------------------------------------------
20-21-22整体:spring集成dubbo框架
    ch20 interface接口工程(Maven工程)----------------存放实体bean和业务接口
         这个所谓的业务接口是:provider暴露出来的业务接口,这个接口的实现是在provider中书写的。
    ch21 provider服务提供者(SpringBoot-Web工程)-------业务接口的实现类,将服务暴露并注册到注册中心,调用数据持久层
          1.pom文件中:   添加依赖(Dubbo、注册中心、接口工程)
          2.主配置文件中:提供者的配置文件
          3.//这是把这个接口的实现类交给spring容器去管理
            @Component
            //这是把provider自己的业务暴露给接口工程,让接口工程统一管理。
            @Service(interfaceClass = StudentService.class,version = "1.0.0",timeout = 15000)
            //interfaceClass = StudentService.class这是暴露出去的接口的名字。
            //timeout = 15000指定接口超时配置
            注:有两个@Service
                这个@Service是import com.alibaba.dubbo.config.annotation.Service包下面的。
    ch22 consumer服务消费者(SpringBoot-Web工程)-------处理浏览器客户端发发送的请求,从注册中心调用服务者提供的请求
          1.pom文件中:   添加依赖(Dubbo、注册中心、接口工程)
          2.主配置文件中:消费者的配置文件
          3.//这是指定,引用的是哪个接口的名字。
            @Reference(interfaceClass = StudentService.class,version = "1.0.0",check = false)
            private StudentService studentService;
            注:有两个@Reference
               这个@Reference是import com.alibaba.dubbo.config.annotation.Reference这个包下面的。
  尼玛币,一顿集成,眼花缭乱!
  现在看来,已经弄明白了。
--------------------------------------------------------------------------------------------
23-24-25整体:spring集成dubbo、redis、mybatis、spring、springmvc、jsp
    对比于上面的20 21 22集成dubbo,这里是加入了redis和逆向工程的生成。
    ch23:interface接口工程(Maven)存放实体bean和业务接口
    ch24: provider服务提供者(实现接口工程以提供服务)---spring web项目,集成mybatis和redis
          添加的依赖:mybatis依赖、mysql驱动依赖、dubbo依赖、zookeeper依赖、redis依赖、接口工程
          springboot核心
          配置文件:配置连接数据库、配置连接redis、配置dubbo
    ch25: consumer服务消费者(使用提供者的服务)---spring web项目
          添加的依赖:dubbo依赖、zookeeper依赖、解析jsp的依赖、接口工程
          springboot核心配置文件:配置视图解析器、配置dubbo
--------------------------------------------------------------------------------------------
26.springboot实现普通java工程第一种(即非web应用)-----了解
27.springboot实现普通java工程第二种(即非web应用)-----了解
   实际工作中,不会去创建springboot的java工程的,直接创建一个mavenjava工程好了。
   真是麻烦的要死springboot的java工程。
--------------------------------------------------------------------------------------------
28.关闭springboot的启动logo(了解)
29.修改springboot的启动logo(了解)
   只需要在resources文件夹下面,直接加上banner.txt文件即可。
--------------------------------------------------------------------------------------------
30. springboot使用拦截器。(有时间还是要研究一下他的原理)
    1.定义一个拦截器,实现HandlerInterceptor接口
    2.创建一个配置类---在类的头上加上@Configuration,然后继承WebMvcConfigurer
--------------------------------------------------------------------------------------------
31.springboot集成servlet第一种方式(了解)
    使用到两个注解:
    1.@WebServlet(urlPatterns = "/myservlet")在某类的头上写,注明这是一个servlet
    2.在Application主文件中写:表示扫描所有的Servlet包。
      @ServletComponentScan(basePackages = "com.bjpowernode.springboot.servlet")
32.springboot集成servlet第二种方式(了解)(通过配置类注册主键的方式)
--------------------------------------------------------------------------------------------
33.springboot集成过滤器第一种方式(注解的方式)
   1.在自己写一个过滤器MyFilter类,头上标注:@WebFilter(urlPatterns = "/myfilter") 说明这是一个过滤器。
     a. MyFilter类需要继承Filter类  public class MyFilter implements Filter
     b. /myfilter:是过滤器的访问路径。
   2.在springboot的启动文件中扫描过滤器@ServletComponentScan
   @ServletComponentScan(basePackages = "com.bjpowernode.springboot.filter")
34.springboot集成过滤器第二种方式(了解)(通过配置类注册主键的方式)
--------------------------------------------------------------------------------------------
35/36 springboot 设置字符编码的两种方式。
      简直了,真是魔鬼啊,没看懂在操作什么。
37.springboot项目打包----war包。Lifecycle-->package即可
   部署到tomcat中,之前在核心配置文件application.properties设置的上下文根和端口号失效,以本地tomcat为准
38.springboot项目打包----jar包。Lifecycle-->package即可
   端口号和上文的根就是核心配置文件application.properties设置的值
39.springboot的日志开启什么玩意,一套套的,没听懂,以后再说吧。
--------------------------------------------------------------------------------------------
40-49 百叶香 Thymeleaf
40.springboot集成Thymeleaf模板--------初识
   1.HTML页面是写在resources包下的templates包里的
   2.在HTML页面是需要,写上:命名空间=xmlns:th="http://www.thymeleaf.org"
   3.这个地址是一个约束文件,约束你使用thymeleaf表达式的一个规则文件,就好比我们之前在xml文件中的一此dtd文件
   4.为什么使用了th前缀就可以获取后台数据?
         那是因为项目中添加了thymeleaf的核心依赖,它的核心依赖会去
         解析thymeleaf自己定义的这些标签名称,通过thymeleaf自己的java核心
         代码来获取我们的后台数据---->即可以直接使用EL表达式了。
41.Thymeleaf:解决40中的问题:修改index页面的代码,每次都需要重新启动springboot,太麻烦烦了。
   能不能像以前一样,直接在浏览器刷新静态页面?
   答案:可以的?怎么做?1.#主配置文件,设置thymeleaf模版引擎的缓存为false(关闭页面缓存)
                       2.部署springboot时Edit Configuration时,update resources+update resources
  注:Thymeleaf的出现就是为了前后端的分离,各访问各的,这样用户体验好,jsp本质是一个servlet,需要渲染,速度太慢 。
42.Thymeleaf之
   标准变量表达式(推荐使用)和*变量表达式(不推荐使用)
   1.在HTML中,使用:标准用户变量表达式----->  用户编号:<span th:text="${user.id}"></span><br/>
   2.三种方式拿到后端的数据:1.标准用户变量表达式(推荐使用)   参见:userDetail.html
                           2.*变量表达式(不推荐使用)       参见:userDetail.html
                           3.  1、2的混合使用(不推荐使用)   参见:userDetail.html
   3.URL路径表达式:@{....}
     详见url.html
43.Thymeleaf之
   在这里学一招:使用@Data注解:这样就不用写实体类中的那一套东西了
   如何使用@Data:1.下载插件:lombok  2.添加lombok的依赖   3.在实体类的头上写@Data
   只用在项目组允许的情况下才能好使用这个注解,否则不要轻易使用这个注解。
   1.thymeleaf拿到后端的list集合,遍历输出   (list集合放的是user对象)
   2.thymeleaf拿到后端的map集合,遍历输出    (map集合放的是键值对,key值Integer类型,value值是user对象)
   3.thymeleaf拿到后端的数组,遍历输出       (数组中放的是user对象)
   4.thymeleaf拿到后端的复杂集合,遍历输出
44.thymeleaf的条件判断 (很简单的)
   if的用法:div中的if语句成立的话,就显示div板里的内容---->男
           div中的if语句不成立的话,就不显示div板里的内容
      <div th:if="${sex eq 1}">男</div>
   unless的用法:和if相反
      <div th:unless="${sex ne 1}">女</div>
   switch用法
      <div th:switch="${productType}">
          <span th:case="0">产品0</span>
          <span th:case="1">产品1</span>
          <span th:case="*">无此产品</span>
      </div>
45.thymeleaf中内敛表达式的用法
   内敛表达式的作用是:使th表达式不用再依托于标签而写。甚至可以:<body th:inline="text"></body>,一劳永逸
   1.内敛表达式
     <div th:inline="text">     在标签里写th:inline="text" 这样标准变量表达式就不用每次依托于标签了
       数据:[[${data}]]
     </div>
   2.内敛脚本 的使用 <script type="text/javascript" th:inline="javascript">
                    java script代码
                    </script>
   详情请见:045中的inline-test.html
46.Thymeleaf之
   1.字面量?感觉不是很重要的知识点。
   2.字符串的拼接。
     传统的方式
     <span th:text="'共'+${totalRows}+'条'+${totalPage}+'页,当前第'+${currentPage}+'页,首页 上一页 下一页 尾页'">共120条12页,当前第1页,首页 上一页 下一页 尾页</span>
     新方式: |要拼接的字符串内容|
     <span th:text="|共${totalRows}条${totalPage}页,当前第${currentPage}页,首页 上一页 下一页 尾页|">共120条12页,当前第1页,首页 上一页 下一页 尾页</span>
47.Thymeleaf之:数学运算
48.Thymeleaf之:基本内置对象(掌握)
   #request  #session  #httpServletRequest等
49.Thymeleaf之:功能内置对象(了解)
   #dates #calendars #numbers   #strings  #bools #arrays等:#开头,s结尾功能内置对象
   <span th:text="${#dates.format(curDate, 'yyyy-MM-dd HH:mm:ss')}"></span>
--------------------------------------------------------------------------------------------
50 51 52 53 整体。综合案例。springboot 集合mysql redis zookeeper dubbo
50.父工程(是管理下面的三个子模块的)
    50.1 父工程:src干掉
    50.2 <packaging>pom</packaging>  <!--作为父工程,这是必须加上的一句话-->
51.接口工程(儿子)   暴露的业务接口、实体类
52.提供者工程(儿子)
53.消费者工程(儿子)
--------------------------------------------------------------------------------------------

结束了终于,下一阶段是解决Nginx。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值