
#{}是预编译处理、是占位符,${}是字符串替换、是拼接符。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement来赋值;
Mybatis在处理
时
,
就
是
把
{}时,就是把
时,就是把{}替换成变量的值,调用Statement来赋值;
#{}的变量替换是在DBMS中、变量替换后,#{}对应的变量自动加上单引号
的
变
量
替
换
是
在
D
B
M
S
外
、
变
量
替
换
后
,
{}的变量替换是在DBMS 外、变量替换后,
的变量替换是在DBMS外、变量替换后,{}对应的变量不会加上单引号,使用#{}可以有效的防止SQL注入,提高系统安全性。
1.BeanFactory是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory,所以ApplicationContext拥有BeanFactory所有的特点,也是一个Bean工厂,但是ApplicationContext除开继承了BeanFactory之外,还继承了诸如EnvironmentCapable、MessageSource、ApplicationEventPublisher等接口,从而AppicationContext还有获取系统环境变量、国际化、事件发布等功能,这是BeanFactory所不具备的
2.ApplicationContext是BeanFactory的子接口3.ApplicationContext提供了更完整的功能:
①继承MessageSource,因此支持国际化。
②统一的资源文件访问方式。
③提供在监听器中注册bean的事件。
④同时加载多个配置文件。
⑤载入多个(有继承关系)上下文,使得每一个上下文都专注于一个特定的层次,比如应用的web层
·BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean())才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。
·ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。
·相对于基本的BeanFactory,ApplicationContext唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。
·BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。
Mybatis只支持针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的 invoke()方法,拦截那些你指定需要拦截的方法。
编写插件:实现Mybatis的 Interceptor接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,在配置文件中配置编写的插件。
@Intercepts(
{@Signature(type = StatementHandler.class,method = "query", aras ={
Statement class ,Resu1tHandler.class}),
@Signature(type = StatementHandler.class,method = "update", args ={
Statement.class}),
@Signature(type = StatementHandler.class,method = "batch" , args ={
statement.class })
}
)
@Component
invocationl proceed()//执行具体的业务逻锣
四、Mybatis存在哪些优点和缺点优点:
优点:
1.基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL单独写,解除sql 与程序代码的耦合,便于统一管理。
2.与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
3.很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)
4.能够与Spring 很好的集成;
5.提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点:
1.SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
2.SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
五、Spring Boot、 Spring MVC和Spring有什么区别Spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等
Springmvc是Spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术生成视图展现给前端
Springboot是Spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发Spring+Springmvc应用,简化了配置(约定了默认配置)即约定大于配置,整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用
1.首先,SpringBoot在启动时会先创建一个Spring容器
⒉.在创建Spring容器过程中,会利用@ConditionalonClass技术来判断当前classpath中是否存在Tomcat依赖,如果存在则会生成一个启动Tomcat的Bean
3.Spring容器创建完之后,就会获取启动Tomcat的Bean,并创建Tomcat对象,并绑定端口等,然后启动Tomcat
七、SpringBoot中常用注解及其底层实现1.@SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是:
a.@SpringBootConfiguration:这个注解实际就是一个@Configuration,表示启动类也是一个配置类
b.@EnableAutoConfiguration:向Spring容器中导入了一个Selector,用来加载Classpath 下SpringFactories中所定义的自动配置类,将这些自动加载为配置Bean
c@ComponentScan:标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前目录
2.@Bean注解:用来定义Bean,类似于XML中的标签,Spring在启动时,会对加了@Bean注解的方法进行解析,将方法的名字做为beanName,并通过执行方法得到bean对象
3.@Controller、@Service、@ResponseBody、@Autowired都可以说
优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置会形成互补配置。
1.命令行参数。所有的配置都可以在命令行上进行指定;
2.Java系统属性(System.getProperties() ;
3. *** 作系统环境变量;
4.jar包外部的application-fprofile}.properties或application.yml(带spring.profile)配置文件
5.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件再来加载不带profile
6.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
7.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
8.@Configuration注解类上的@PropertySource
九、Spring Boot自动配置原理@lmport + @configuration + Spring spi
自动配置类由各个starter提供,使用@Configuration +@Bean定义配置类,放到meta-INF/spring.factoriesT使用Spring spi扫描meta-INF/spring.factories下的配置类
使用@import导入自动配置类
使用@Configuration +@Bean定义配置类,放到meta-INF/spring.factoriesT使用Spring spi扫描meta-INF/spring.factories下的配置类
使用@import导入自动配置类
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)