1.mybatis中两种取值方式?程序员
回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,经过 $ 和 # , # 是 咱们最经常使用的方式。 咱们都说Mybatis是封装了JDBC,因此两种方式的区别还要从JDBC上来讲, # 其实是封装了问号占位符赋值的 方式,会使用JDBC中的PreparedStatement,变量处用?号代替,防止SQL注入。 $ 直接拼接到sql语句中,值没有任何修饰,存在sql注入风险。 项目中 用 # 比较多,通常 # 和 $ 会配合使用。若是取值去的是字段名的时候,须要使用到 $ ,如:排序 order by ${列名} "列名" 案例: 使用#符号,如 select * from test where value=#{param} 传入参数param=”hello”后,实际生成 select * from test where value='hello' 。 使用$符号,$表示本来的字符串,即传什么参数,SQL中就填入什么。如 select * from test order by # {param} 传入参数param=”time”后,实际生成 select * from test order by time 。spring
2.谈谈Spring框架理解? sql
IOC编程
IOC:inversion of controll 控制反转,就是将原来经过new 关键字建立对象的权力,交给spring由工厂建立对象。 DI:(dependcy Injection) 依赖注入,Spring工厂不只要建立对象 还维护类与类之间 类类中属性之间依赖关系 。 IOC和DI其实是等同的概念,若是要进行区分的话,IOC和DI能够理解为同一个东西的不一样角度见解,IOC 站在程序员的角度,之前建立对象是咱们本身new出来的,如今让容器本身建立,控制权交给了容器,对于 咱们来讲控制权反转了。 DI是站在容器的角度,从Spring角度来看,用到的全部的对象都是本身建立的,而且对象在建立的时候须要 依赖的参数也是容器注入的,而这种维持对象之间依赖关系的方式就是依赖注入。 因此IOC和DI实际上都是指容器负责建立对象和维护对象之间依赖关系的这种行为。mybatis
AOPapp
AOP:(Aspect Oriented Programing)面向切面编程 就是经过为项目中某些类建立动态代理对象,经过动态代理对 象解决现有项目中通用问题,例如日志,性能记录。AOP表明的是一个横向的关系,程序是顺序执行的,能够简单理解为线性执行,自上而下,就象一条线,所 谓切面编程就是,在这条线的某一点(切点)处切开,放入另外一个程序(加强处理),这个过程就是咱们常 说的织入,而被切入处能够用几何常识形象的称之为切面。框架
Spring中生成代理方式几种,分别是什么,默认使用哪一种,如何切换生成代理方式? 性能
回答:两种,JDK动态代理,基于接口(默认使用的jdk)。CGLIB,基于继承(要使用须要配置)。 配置aop true使用CGLIB产生代理对象 false 使用jdk 默认false。 JDK动态代理 由Java SDK提供,Java SDK动态代理的局限在于,它只能为接口建立代理,返回的代理对象也只能转换到某 个接口类型。 CGLIB动态代理 第三方库cglib提供,cglib的实现机制与Java SDK不一样,它是经过继承实现的,它也是动态建立了一个类,但 这个类的父类是被代理的类。 经过代码模拟事务控制 JDK动态代理 Java SDK代理的是对象,须要先有一个实际对象,自定义的InvocationHandler引用该对象,而后建立一个代理类 和代理对象,客户端访问的是代理对象,代理对象最后再调用实际对象的方法 .Cglib动态代理 cglib代理的是类,建立的对象只有一个。spa