ssm框架复习

2020-03-03  本文已影响0人  zfz_amzing

Mybatis

#{}与${}的区别

collection与association的区别

association用于一对一或者多对一的关系,collection用于一对多的关系

User.java

public class User{  
        private Card card_one;  
        private List<Card> card_many;  
        private Set<Kaike> kaikes= new HashSet<Kaike>();
}  

Card.java

public class Card implements Serializable{  
    private Integer id;  
    private String code;  
        //省略set和get方法.  
} 

映射card_one属性时属于一对一用 association 标签

映射card_many属性是一个list集合时属于一对多用 collection标签

连接池

连接池就是用于储存连接的一个容器。容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到同一个连接,该集合必须实现队列的特性:先进先出

真正连接打开的时间点,只是在我们执行SQL语句时,才会进行。其实这样做我们也可以 进一步发现,数据库连接是我们最为宝贵的资源,只有在要用到的时候,才去获取并打开连接,当我们用完了就再 立即将数据库连接归还到连接池中。


无标题.png

POOLED和UNPOOLED

无标题2.png

POOLED从连接池中取出一个连接使用

UNPOOLED每次创建一个新的连接

延迟加载

延时加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载

好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快

坏处:因为只有用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,可能造成用户等待时间变长,造成用户体验下降。

开启延迟加载:mybatis官方文档中说明了

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

缓存

使用缓存我们可以避免频繁的与数据库进行交互,尤其是在查询多、缓存命中率高的情况下,使用缓存对性能的提高更明显。默认情况下mybatis只开启一级缓存(一级缓存是对同一个SqlSession而言的)

二级缓存中储存的是数据而不是对象。

实体类中的属性名和表中的字段名不一样怎么办

Mybatis是如何将sql执行结果封装为目标对象并返回的?有哪些映射方式?

  1. 第一种是通过resultMap标签,将数据库列名与对象属性名之间一一映射
  2. 第二种是根据sql列的别名,将列的别名书写为对象的属性名

有了列名和属性名的映射关系后,MyBatis通过反射创建对象,使用反射给对象的属性逐一赋值并返回,找不到映射关系的属性是无法赋值的。

动态SQL

Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接sql的功能。

Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bind。

Spring

控制反转

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

ioc.png

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类于类之间高度耦合。有了IoC容器后,把创建和查找依赖对象的控制权交给了容器(控制反转),由容器进行注入组合对象(依赖注入)。传统应用程序下,缺少jar包不能通过编译,在采用IoC思想后,可以完成编译但无法正常完成功能。

DI--Dependency Injection,依赖注入:由容器动态的将某个依赖关系注入到组件中。

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁住入谁,注入了什么”

本质上IoC和DI是同一思想下不同维度的表现,IoC是bean的注册,DI是bean的初始化

AOP

aop可以将业务流程中重复的流程抽取出来,单独的编写功能代码。在业务流程执行的过程中,Spring框架hi根据业务流程要求,自动把独立编写的功能代码切入到流程的合适位置。

AOP相关术语

Spring容器、BeanFactory和ApplicationContext

spring容器可以理解为生产对象的地方,它负责了对象的整个生命周期--创建、装配、销毁。这些对象的创建管理的控制权都交给了Spring容器。

BeanFactory和ApplicationContext之间的关系

@Scope注解

默认是单例模式,即scope = singleton ,另外还有prototype,request,session,global session

xml和注解选择的问题

image-20200228215531538.png

springMVC

springMVC执行流程

springmvc执行流程原理.jpg

注解

@PathVariable和@RequestParam的区别

PathVariable只能用于接收url路径上的参数,而RequestParam只能用于接收请求带的params

 @GetMapping("/books/{username}")
    public Object testPathVariable(@PathVariable String username)
 
 
 @PostMapping("/books2")
 public Object testRequestParam(@RequestParam("name") String name,
                       @RequestParam("author") String author,
                       @RequestParam("isbn") String isbn)

例如路径为/books/zfz testPathVariable可以接收username的值为zfz @RequestParam注解则不能接收

@RequestParam 通过这样的路径接收数据 ***books2?name=java in action&author=ric&isbn=dsdas2334

参考:https://blog.csdn.net/u012062455/article/details/80960200

@GetMapping、@PostMapping和@RequestMapping的区别

@RequestMapping相当于@GetMapping和@PostMapping的父类。

@ResponseBody

将controller方法返回对象转换为json响应给客户端

GET和POST的区别

GET POST
POST 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。
上一篇 下一篇

猜你喜欢

热点阅读