-
什么是框架 ?
可以理解为帮助我们实现了一部分功能,作用:减少代码量,提高开发效率 -
为什么要使用框架 ?
每个优秀的框架都是对底层的代码做了轻量级的封装,目的是减少代码量,提高开发效率. -
介绍 Mybatis框架 ?
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,应为它的社区活跃所以它的bug比较少 -
从三层架构的方面介绍主流框架 ?
SSH: Struts2 + spring + hibernate
SSM: Springmvc + spring + mybatis
JAVAEE三层结构:
Web层: struts2框架、Springmvc
Service层(业务逻辑层): spring框架
持久化层(dao): hibernate、mybatis框架
-
mybatis 框架原理图的介绍 ?
创建全局配置文件 创建 mapper.xml
创建seqSessionFactory 得到sqlSession
执行器 是一个面向底层的接口
输入映射 输出映射 -
Mybatis执行过程 ?
1、 配置SqlMapConfig.xml、配置mapper.xml(配置了sql语句)
2、 创建SqlSessionFactory,目的是要得到Sqlsession
Mybatis提供SqlSessionFactoryBuiler类创建会话工厂
3、通过SqlSessionFactory创建Sqlsession,可以使用Sqlsession操作数据库
Sqlsession底层使用Executor执行器操作数据库,Executor要运行还需要上边在xml中配置的信息,mybatis自动将上边xml中配置信息加载到底层封装对象Mapped statement中,Executor按照Mapped statement中的配置信息执行操作数据库
4、要知道Executor按照Mapped statement中的配置信息执行过程
首先需要将java对象信息映射到sql语句中,相当输入映射。
然后将sql结果信息映射到java对象 , 输出映射。
-
SqlSession 是接口吗 ?
是面向用户的接口 -
面向用户接口 ? 面向底层接口 ?
面向用户接口:平时自己定义的接口,别人拿过来直接用你的接口里面的方法和成员变量
向底层接口:用户看不到的底层源码 -
返回自增主键的方式 ?
在语句中添加 useGeneratedKeys=“true” keyProperty=“id” -
mybatis与hibernate的不同 ? 企业如何选型 ?
hibernate:是一个标准的ORM框架(对象关系映射)。入门门槛较高,不需要写sql,sql语句自动生成,对sql语句进行优化、修改比较困难。
应用场景:适用需求变化不多的中小型项目,比如:后台管理系统mybatis:专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射,输出映射)
应用场景:适用需求变化较多的项目,比如:互联网项目。企业进行技术选型,以低成本高回报作为技术选型的原则,根据项目的技术力量进行选型。
-
mapper接口开发的规范 ?
mapper开发遵循四个原则
接口中的方法名 == mapper.xml 中 id 名
返回值类型 与 Mapper.xml文件中出参类型要一致
方法中传入参数的类型 与Mapper.xml中入参的类型要一致
命名空间必须绑定mapper接口(将mapper接口和mapper.xml绑定) -
Namespace的作用是什么 ?
与接口中的类路径进行绑定 -
mybatis-config.xml 全局配置文件中有哪些标签 ?
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
-
怎样引入外部的properties文件 ?
-
驼峰式命名法在哪个标签中开启 ?
-
如何批量起别名 ?
-
扫描mapper.xml有几 种方式 ? 分别是什么 ?
4种
nema class page url -
如何批量扫描mapper.xml ? 有什么限制 ?
必须在同一个包下 接口名必须与mapper.xml的文件名一致 -
输入映射中#{} 和${} 的区别 ?
-
mybatis传递参数是底层是以什么方式传递的 ?
map 键值对 -
mybatis传递多个参数时在mapper.xml中获取时,如何获取 ?
@Param(“给与指定的名称”) -
如何明确指定封装参数时的数据 ?
-
输出映射中的自动映射有什么规则 ?
javabean 的属性名必须与数据库的列名一致 -
输出映射中的自定义映射是什么 ?
resultMap -
一对一映射是什么 ? 如何实现 ? 都有哪些关键的属性 ?
-
一对一映射分步查询如何使用 ? 都有哪些关键的属性 ?
-
分步查询中资源浪费问题如何解决 ?
开启懒加载 -
如何开启懒加载 ? (两个选项在哪个文件中找 ?)
在mybatis的使用说明书里settings属性里找 -
一对多映射是什么 ? 如何实现 ? 都有哪些关键的属性 ?
-
一对多映射分步查询如何使用 ? 都有哪些关键的属性 ?
-
一对多映射分步查询中如何灵活开启和关闭懒加载 ?
在connetion标签里添加个属性 fetchtype=“lazy”懒加载(eager 积极加载) -
多对多映射是什么 ? 如何实现 ?
在一个StudentjavaBean里分装个list<另一个Teacher>
在一个TeacherjavaBean里分装个list<另一个Student> -
什么是动态sql ? 什么是静态sql ?
静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的 , 唯一变化的只要参数 .
动态 SQL:动态 SQL 语句是在应用程序运行时被编译和执行的,例如, 原生的jdbc模糊查询中使用的sql拼接时判断参数问题 , 这时参数是不固定的 , sql也是变化的 . -
动态sql的种类有哪些 ?
If choose Set Foreach -
动态sql中的If语句如何使用 ? 有哪些关键的属性 ?
if test=“条件” -
动态sql中的choose语句相当于java中的哪个语句 ?
带break 的switch语句 -
动态sql中的choose语句如何使用 ? 有哪些关键的属性 ?
choose (when, otherwise):分支选择;带了break的swtich-case
如果带了id就用id查,如果带了eName就用eName查;
只会进入其中一个when标签,如果都不满足将进入otherwise标签<choose> <when test="id!=null and id!=''"> id=#{id} </when> <when test="eName!=null and eName!=''"> e_name like #{eName} </when> <when test="sal!=null and sal!=''"> sal=#{sal} </when> <otherwise> 1=1 </otherwise>
-
动态sql中的set标签如何使用 ? 可以解决什么问题 ?
在修改时使用 可以解决,的问题 -
动态sql中的trim 如何使用 ? 有哪些关键的属性 ? 可以解决什么问题 ?
prefix="":前缀:trim标签体中是整个字符串拼串后的结果。
prefix给拼串后的整个字符串加一个前缀
prefixOverrides="":
前缀覆盖: 去掉整个字符串前面多余的字符
suffix="":后缀
suffix给拼串后的整个字符串加一个后缀
suffixOverrides=""
后缀覆盖:去掉整个字符串后面多余的字符 -
动态sql中的foreach语句如何使用 ? 有哪些关键的属性 ?
item:将当前遍历出的元素赋值给指定的变量separator:每个元素之间的分隔符 open:遍历出所有结果拼接一个开始的字符 close:遍历出所有结果拼接一个结束的字符 index:索引。遍历list的时候是index就是索引,item就是当前值 遍历map的时候index表示的就是map的key,item就是map的值 #{变量名}就能取出变量的值也就是当前遍历出的元素
-
Sql片段是什么 ? 如何使用 ?
抽取公共的sql语句片段 -
获取sql片段中的内容使用哪个标签 ?
incude0 -
缓存是什么 ?
缓存就是数据交换的缓冲区(称作Cache),是临时存储的区域; -
mybatis一级缓存是哪个范围的缓存 ?
1024sql语句 -
一级缓存失效的条件有哪些 ?
1、sqlSession不同。
2、sqlSession相同,查询条件不同.(当前一级缓存中还没有这个数据)
3、sqlSession相同,两次查询之间执行了增删改操作(这次增删改可能对当前数据有影响)
4、sqlSession相同,手动清除了一级缓存
session.clearCache();(缓存清空) -
mybatis二级缓存是哪个范围的缓存 ?
1024个sql语句 -
如何使用二级缓存 ?
1、开启全局二级缓存配置:2、去mapper.xml中配置使用二级缓存:(如果不使用第三方) <cache/> 下面的参数为可选参数: <!-- <cache eviction=" LRU " flushInterval="60000" readOnly="false" size="1024"></cache> --> 3、POJO需要实现序列化接口
-
在全局配置中 cacheEnabled=false 关闭的是哪个缓存 ?
二级缓存 -
在mapper.xml 中,每个增删改标签的:flushCache=“true” 是什么意思 ?
增删改执行完成后就会清除缓存 一二级都会清除 -
在mapper.xml 中,每个查询标签的:flushCache=“true” 是什么意思 ?
次查询之后都会清空缓存;缓存是没有被使用的; -
使用SqlSession中的clearCache()方法,清除的是哪个缓存 ?
清除一级缓存 -
查询操作时,在缓存中查找的顺序 ?
二级缓存 ? 一级缓存 ? 数据库 -
你知道的第三方缓存有哪些 ?
在开发中使用第三方的缓存种类很多 , 常见的第三方缓存有 :
Redis (分布式缓存数据库)
Memcached (分布式缓存服务器) -
简单介绍你是如何使用第三方缓存的 ?
1导入第三方缓存ehcache 的jar包;(在资料中)
2)、导入mybatis和ehcache的整合jar包;(在资料中)
3)、创建ehcache.xml文件 ; (在资料中)
4)、在mapper.xml中引用自定义缓存