mybatis概述: 一个持久层操作框架.
Mybatis与hibernate 使用区别:
Hibernate : 可以高度的对jdbc实现封装. 不用编写sql,即可映射操作数据库. 针对复杂的多表关系, 可以方便关联操作. 场景: 当业务实体之间关系关联操作时,hibernate擅长处理. 不擅长: 复杂的业务关联关系.
示例: OA.政府档案,数据管理系统.
Jdbc : 其实所有的持久层框架都是以JDBC为基础,进行封装优化. 好处: 单个操作效率高. 缺点: 参数传递,返回值封装.
Mybatis : 其实针对jdbc的完美封装, 保留了jdbc的sql编写方式. 优化了参数绑定,返回值封装等缺点.学习成本低.
示例: 网上电商, 金融项目,
主体架构:
SqlMapConfig.xml(核心配置文件) : 体现SqlSessionFactory,SqlSession.
↓
Mapper.xml(动态sql语句实现)
↓
MappedStatement(方便动态加载sql,用于绑定参数,封装返回值).
↓
DB(数据库)
第一个mybatis程序编写:
步骤:
1. 创建项目,导入框架.
2.SqlMapConfig配置文件,编写数据库的连接配置.
3.测试数据库连接是否正常.
4.编写Mapper.xml文件中的动态sql.
5.测试sql执行操作是否正常.
mybatis框架如何实现dao层编写:
如何实现dao层编写:
Dao层采用面向接口的方式实现开发: 方便分层开发调用.
步骤:
1.提供接口.
2.给接口绑定Mapper.xml实现.
3.给service层提供dao层的接口引用.
SqlMapConfig.xml核心配置文件和Mapper映射文件的编写:
4.1: 数据库操作的动态sql: 传参. 返回值.
传参: 1.单个基本类型参数传递.指定:
parameType=”java.lang.Integer”
2.单个引用类型:
parameType=”com.hfxt.bean.Student”
3.集合类型:
parameType=”java.util.ArrayList”
备注: 引用时必须采用list / array 充当引用.map集合直接根据key值实现引用.
4.注解方式:
test1(@Param(“name”) String name ,@Param(age) String age )
返回值处理:
1.基本类型数据值返回:
resultType=”java.lang.Integer”
- 查询返回单个对象:
resultType=”com.hfxt.bean.Student”
- 查询返回对象集合时
resultMap = “ RM_Stus ”; 需要定义集合模型进行封装.
4.2:动态sql的编写实现.
Sql : 用于抽取片段代码.
Include : 用于引入sql片段.
Where : 用于充当where关键字使用.当条件无论是否存在,都将作用.
Trim : 针对前缀与后缀做去除或增加.
If: 可用于条件判断等.
Foreach: 用于数据值的遍历.
Set : 用于充当set修改关键字.
Choose : 等值判断等.
补充: 在Mapper中编写动态sql时,防止出现大于小于符号,转义:
<![CDATA[ age > 20 ]]>
经典面试题: #{ 属性 } 获取参数值.并以字符串的形式进行使用.
使用: 就是?占位符传参的方式.
${ 属性 } 获取参数值.并以字符串的形式进行使用.
使用: 类似于字符串+号拼接的方式,
4.3: 关系映射操作:
相同点:
- 都需要在类中体现关系.
- 在Mapper中,采用子查询的方式或连接查询的方式实现
在封装<resultMap>中, 采用<collection>标签体现即可.
如果子查询:
<collection property="" column="" javaType=""select="" >
注: 需要提供子查询: select.
如果连接查询:
<collection property="" ofType="" javaType="">
<id column="" property="" />
<result column="" property="" />
</collection>
区别:
一对多 : 使用时,正常使用即可.
多对多 : 切记: 子查询需要两表连接, 连接查询时: 需要三表连接.
一对一 : <association>代替。其他类似于一对多.