- Mybatis
- Mybatis中#{}和${}区别
#{}:解析为参数占位符,生成的SQL里对应的位置用?表示,值是当做字符串处理的,会加上''。
使用#{}可以很大程度上防止sql注入(SQL拼接)。
${}:直接解析为相应的值。在动态生成SQL时,直接进行变量替换,不会自动加''。
在动态表名和order by动态字段时,需使用${}。
#{}因为是替换成?,在初始化阶段就会生成SQL。${}是未知的,在初始化阶段不处理。
- Mybatis为什么只定义了接口,就可以执行SQL了
是通过JDK动态代理实现的。
- Spring
- Spring IOC和AOP
IOC,控制反转(Inversion of Control),就是把对象的创建(即bean的new操作),交给Spring来实现。
DI,依赖注入(Dependency Injection),是spring IOC的具体实现,做的工作是Spring实例化bean对象后,对bean对象的属性信息进行赋值的操作。
AOP,面向切面编程(Aspect Oriented Programming),是一种编程范式,是OOP(面向对象编程)的延续,采用横向抽取机制,补充了OOP纵向继承体系无法解决的重复代码优化方式。
简单地说就是在不改变原程序的基础上为代码段增加新功能,对代码段进行增强处理。
譬如,假设有A,B有相同的逻辑,我们可以横向抽取相同的部分出来,通过AOP思想和业务串联起来,同时这是可插拔式的。
AOP思想的实现一般都是基于代理模式,给业务代码进行功能增强,将业务代码和系统代码解耦。
如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;
如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类。
增强方式:五种,分别为前置增强、后置增强、最终增强、异常增强、环绕增强。
https://www.cnblogs.com/scorpio-cat/p/12632063.html
- Spring 常用注解
(1)作用于属性上:
@Autowired:byType注入。
@Qualifier:对于同一接口有多个实现类时,需@Autowired+@Qualifier组合使用,byName注入。
@InJect:byType注入,可以通过@Qualifier显式指定byName注入。
@Resource:按byName注入。
(2)作用于类上
@Controller @Service @Respository @Compent:分别表示该类为控制层、业务层、持久层、比较中立的类,被Spring管理。
@ComponentScan:指定需扫描的包。
(3)作用于方法上
@Bean:一般用于导入第三方组件的类,如DataSource。
https://www.cnblogs.com/scorpio-cat/p/12719342.html
- SpringMVC
- SpringMVC工作流程
- SpringMVC常用注解