文章目录
- 四、SpringMvc框架
- 五、MyBatis框架
-
-
- 1、MyBatis是什么
- 2、Mybatis优缺点
- 3、MyBatis的编程步骤
- 4、MyBatis底层用到了哪些设计模式
- 5、#{}和${}的区别是什么
- 6、实体类中属性名和表中的字段名不一样怎么处理
- 7、模糊查询Like语句编写
- 8、通常一个xml映射文件都有一个Dao接口与之相对应,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
- 9、MyBatis是如何进行分页的?分页插件的原理
- 10、简述MyBatis插件的运行原理,以及如何编写一个插件
- 11、MyBatis执行批量插入,能返回数据库主键列表吗?
- 12、MyBatis动态SQL是做什么?都有哪些动态SQL?简述动态SQL的执行原理
- 13、MyBatis如何将SQL执行结果封装为目标对象并且返回的
- 14、MyBatis动态代理机制应用在框架的那一部分
-
四、SpringMvc框架
1、SpringMVC流程
1、用户发送请求至前端控制器的DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器
3、处理器映射器找到了具体的映射器,生成处理器对象以及处理器拦截器一并返回给DispatcherServlet
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller)
6、Controller执行完,返回ModelAndView
7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover
9、ViewReslove解析后返回具体的View
10、DispatcherServlet根据View进行视图渲染
11、DispatcherServlet响应用户
2、SpringMVC是什么
SpringMVC是一个MVC的开源框架,是Spring的一个子模块
3、SpringMVC怎么设置转发和重定向
(1)转发:在返回值前面加一个"forward:",譬如"forward:user?name=zhangshan"
(2)重定向:在返回值前面加一个"redirect:",譬如"redirect:http://www.baidu.com"
4、SpringMVC常用的注解有哪些
@RequestMapping:用于处理请求url映射的注解,可用于类或方法上。用于类上,则表示类中所有响应请求的方法都是以该地址作为父路径
@RequestBody:注解实现接收http请求的json数据,将json转化为java对象
@ResponsBody:注解将controller方法返回对象转化为json对象响应给客户
五、MyBatis框架
1、MyBatis是什么
MyBatis是一款优秀的持久层框架,一个半ORM框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以通过简单的XML注解和配置来映射原生的类型、接口和Java的pojo
2、Mybatis优缺点
优点
- 基于传统的SQL语句编程,相当的灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除了sql与程序代码的耦合,便于统一管理;提供了XML标签,支持编写动态SQL语句
- 与传统的JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码
- 很好的与各种数据库兼容
- 提供映射标签
缺点
- SQL语句编写的工作量较大,尤其字段多、关联表多的时候,对开发人员编写SQL语句的能力有一定的要求
- SQL语句依赖于数据库,导致数据库的可移植性差,不能随意变更数据库
3、MyBatis的编程步骤
1、创建SqlSessionFactory
2、通过SqlSessionFactory创建SqlSession
3、通过sqlSession执行数据库操作
4、调用sqlSession.commit()提交事务
5、关闭sqlSession.close()
4、MyBatis底层用到了哪些设计模式
1、Builder模式
SqlSessionFactoryBuilder
XMLConfigBuilder
XMLMapperBuilder
2、工厂模式
SqlSessionFactory
ObjectFactory
MapperProxyFactory
3、单例模式
ErrorContext
LogFactory
4、代理模式
MapperProxy
ConnectionLogger
5、#{}和${}的区别是什么
1、#{}是预编译处理,${}是字符串的替换
2、MyBatis在处理#{}的时候,会将sql中的#{}替换成为? (占位符),调用PreparedStatement的set方法来赋值
3、MyBatis在处理 时 , 就 是 把 {}时,就是把 时,就是把{}替换成变量的值。(拼接字符串)
4、使用#{}可以有效的防止sql注入
6、实体类中属性名和表中的字段名不一样怎么处理
1、通过在查询的sql语句中定义字段的别名,让字段别名和实体类的属性名一致
<select id="getOrderById" parameterType="int" resultType="Order">
slelect order_id id,order_no orderNo,order_price price
from orders
where order_id=#{id}
</select>
2、通过resultMap来映射字段名和属性名不一致
<select id="getOrder" parameterType="int" resultMap="orderMap">
select * from orders where order_id=#{id}
</select>
<resultMap id="orderMap" type="Order">
<!-- id属性来映射主键字段-->
<id property="id" cloumn="order_id"></id>
<result property="orderNo" cloumn="order_no"></result>
<result property="price" cloumn="order_price"></result>
</resultMap>
7、模糊查询Like语句编写
1、java代码中添加sql通配符
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{
value}
</select>
2、在sql语句中拼接字符串,会引起sql注入
tring wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{
value}"%"
</select>
8、通常一个xml映射文件都有一个Dao接口与之相对应,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法内的参数,就是传递给 sql 的参数。Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为 key 值,可唯一定位一个 MapperStatement。在 Mybatis 中,每一个<select>、<insert>、<update>、<delete>标签对应一个MapperStatement 对象。
Mapper 接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。Mapper 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,转而执行 MapperStatement 所代表的 sql,然后将 sql 执行结果返回。