Class eight

136 阅读3分钟

Class eight 2022.7.13上午
复习
1.

  • 日志
  • 权限     ——>非业务性——>通用
  • 事务(底层如何实现:AOP)

2.Spring MVC

  • 拦截用户所有请求@Controller
  • 拦截用户具体请求@RequestMapping

新知识
image.png 一、mybatis 1.mybatis (要能看懂)

  • mybatis前身是SQL和JAVA代码混合。
  • mybatis和数据交互的方式
    • 使用传统的MyBatis提供的API(老项目)
    • 使用Mapper接口
      • 每一个节点抽象为一个 Mapper 接口,而这个接口中声明的方法和xml中的SQL语句的id保持一致。
      • select要返回一个结果集,所以有resultMap=""。
      • update不要写select,select不要写update;它们属于xml的节点不一样。
      • namespace指的是接口的全路径名。
  • SSM的痛点
    • 配置文件:能看懂,要会自己改。
      • alias:别名

2.MyBatis动态SQL

  • 代码里面有大量if语句可读性等就会很差,所以将SQL写到java里->引出MyBatis动态SQL。
  • choose:并不想应用所有条件,多个条件选一个
  • where自动处理AND/OR条件
  • 最后一个if正常情况下是不要逗号的,自己去比较麻烦,所以加个,会自动过滤将逗号去掉。
  • 批量操作(批量删除、新增等)进行循环
    • forech元素
      • collection就是传入的数组/list
      • index索引
      • item遍历之中的某个元素
      • open开头是 (
      • separator元素之间是 ,
      • close元素要关闭是 )

3.MyBatis关联映射 :首先知道数据库里的表的关系
(1)关系:1:1 1:n m:n
(2)主键映射:为了获取自增长主键的最新ID; 如:selectKey (3)关联映射:两张表为一对一或一对多时的对应关系,一对一多了一个属性association,一对多为集合collection的属性select="getCustomerForSales"
(4)集合映射

2022.7.13下午
一、性能优化
1.延迟加载
(1)在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。
(2)Mybatis默认是不开启延迟加载功能的,我们需要手动开启。需要在SqlMapConfig.xml文件中,在标签中开启延迟加载功能。

  • lazyLoadingEnabled 全局性设置懒加载。
  • aggressiveLazyLoading 懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。

(3)开发时不要用到System.out,I/O流非常耗性能。
(4)mapper.getByIdAsso( 1 );SQL语句

2.一级缓存&二级缓存
(1)一级缓存

  • 举例:沙县小吃->蒸饺已蒸好(一级缓存:很方便,性能好,但不敢做太多,设为固定量的一部分,放到sql session里面)
  • 一级缓存是默认使用的。
  • 事务控制在service中。

(2)二级缓存

  • 举例:沙县小吃->蒸饺做好还未蒸(二级缓存:性能没一级缓存好,但可以放很多,放到namespace里面)
  • 二级缓存需要手动开启。
  • flushCache="true"可以清空二级缓存

二、SpringBoot
1.优缺点
(1)优点

  • 创建独立的Spring应用程序
  • 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
  • 提供自以为是的“入门”依赖项以简化构建配置
  • 尽可能自动配置Spring和第三方库
  • 提供生产就绪功能,例如指标,运行状况检查和外部化配置
  • 不需要XML配置

(2)缺点

  • 版本迭代速度很快,一些模块改动很大
  • 由于不用自己做配置,报错时很难定位

2.实战
(1)YMAL:配置文件后缀为 .yml

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
    image.png
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

(2)启动类有三大部分

  • 注解:@SpringBootApplication
  • SpringApplication:运行类(SpringApplication.run)
  • .class 必须是子包,就可以少写一个扫描包的过程

(3)配置一个SpringBean的方式:

  • xml配置文件
  • 加注解

(4)如果在Active profiles定义了默认的启动端口,优先级要比application.properties中 spring.profiles.active=...定义的优先级要高。

(5)starter启动器

  • 官方的都是spring-boot-starter开头的。