1:MyBatis:封装了jdbc的持久层框架
2:MyBatis框架的优点
1)与JDBC相比,减少了50%以上的代码量。
2)MyBatis是最简单的持久化框架,小巧并且简单易学。
3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
4)提供XML标签,支持编写动态SQL语句。
5)提供映射标签,支持对象与数据库的ORM字段关系映射。
3: MyBatis框架的缺点:
1)SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求。
2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4:SQL映射文件
下面是关于SQL映射文件的几个顶级元素:
mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),作用:
用于区分不同的mapper,全局唯一。
绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实体类,MyBatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句。因此namespace的命名必须要和接口同名。
resultMap:用来描述数据库结果集和对象的对应关系。
sql:可以重用的SQL块,也可以被其他语句引用。
insert:映射插入语句。
update:映射更新语句。
delete:映射删除语句。
select:映射查询语句。
namespace的命名必须跟某个DAO接口同名,通属于DAO层,所以映射文件与该DAO接口应放置在同一package下。
在不同的mapper文件中,子元素的id可以相同,MyBatis通过namespace和子元素的id联合区分。接口中的方法与映射文件中的SQL语句id应一一对应。
resultType
resultType直接表示返回类型,包括基础数据类型和复杂数据类型。
resultMap
id属性:唯一标识,此id值用于select元素的resultMap属性的引用。
type属性:表示该resultMap的映射结果类型。
result子节点:用于标识一些简单属性,其中column属性表示从数据库中查询的字段名,property则表示查询出来的字段对应的值赋给实体对象的哪个属性。
resultMap是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到某一个resultMap上。主要应用:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果。
resultType和resultMap本质上是一样的,都是Map数据结构。但是不能同时存在,只是二者选其一使用。
association
association:映射到JavaBean的某个复杂类型属性,即JavaBean内部嵌套一个复杂数据类型属性。association仅处理一对一的关联关系。
属性:
javaType:完整Java类名或者别名。
property:映射数据库列的实体对象的属性。
id
result:
property:映射数据库列的实体对象的属性。
column:数据库列名或别名。
collection
collection元素的作用和association元素的作用类似,只不过collection元素映射的属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(集合)属性。
属性:
property:映射数据库列的实体对象的属性。
collection的子元素与association基本一致,用来写集合。
5:使用动态SQL完成多条件查询
if:利用if实现简单的条件选择。
choose(when,otherwise):相当于Java中的switch,通常与when和otherwise搭配,只能匹配一个条件,不推荐使用。
where:简化SQL语句中where的条件判断,并能智能地处理and和or,不必担心多余关键字导致的语法错误,可以匹配多个条件。
set:解决动态更新语句。主要功能和where类似,是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号忽略掉,再配合if元素就可以动态地更新需要修改的字段。
trim:可以灵活地去除多余的关键字。
foreach:迭代一个集合,通常用于in条件。foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。
属性:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置。
open:表示该语句以什么开始。(如果是in条件语句,以“(”开始)
separator:表示在每次进行迭代之间以什么符号作为分隔符。(如果是in条件语句,以“,”作为分隔符)
close:表示该语句以什么结束。(如果是in条件语句,以“)”结束)
collection:该属性必须指定,不同情况下,该属性的值是不一样的。主要有三种情况:
若入参为单参数且参数类型是一个List的时候,collection属性值为list。
若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
若传入参数为多参数,就需要把它们封装为一个Map进行处理。