##mybatis
mybatis是一个持久层框架,用Java编写的, 使用了ORM思想实现结果集的封装(ORM:对象关系映射,简单说是数据库表和实体类和实体属性对应起来)
配置文件
主配置文件主要配置环境,即datasource和映射配置文件的配置
1,properties
作用:
可以在标签内部配置连接数据库信息,也可以通过属性引用外部配置文件信息,常用于解耦
属性:
1,resource:
用于指定配置文件的位置,是按照类路径的写法来写,并且必须保存于类路径下
2,typeAliases
作用:
配置别名,它只能配置实体类的别名
1,typeAlias
作用:用于配置别名:注意改标签用在typeAliases内
属性:
1,type:
指定的是实体类的全限定类名
2,alias:指定别名,当指定了别名,当指定了别名,就不再区分大小写
2,package
作用:指定要配置别名的包,当指定之后,该包下所有实体类都会注册别名,并且类名就是别名,不在区分大小写,通常和typeAlias两者取一
3,environments
作用:通常配置数据库环境,可以在里面的environment标签内配置DataSource和transactionManager,这里不再详述
4,mappers
作用:指定配置映射文件的路径,映射配置文件指的是每个dao独立的配置文件
1,mapper
作用:指定配置映射文件的路径,映射配置文件指的是每个dao独立的配置文件
属性:
1,resources:映射配置文件的包名/文件名
2,url:对应的是网络上的某个文件,常用格式是file:// 前缀 +路径+文件名
3,class:写的是接口的全限定类名名,即包名.文件名(
注:当使用注解时要配置此属性)
2,package
作用:用于指定dao接口所在的包,当指定之后就不需要再写mapper、resources或者class
属性:
1,name:指定dao接口所在的包
映射配置文件:(
注:映射配置文件位置必须和dao接口的包结构相同,
映射配置文件的mapper标签和namespace属性的取值必须是dao接口的全限定类名,
其操作配置的id属性取值必须是dao接口的方法名,遵循此规则,则不用写dao的实现类
)
1,select,update,delete,insert(即crud,注意:模糊查询时有两种,如
like #{uName}
和
like “%${value}%”
,两种区别不再详述,推荐用第二种,可防止sql注入 )
属性:
id:取值必须是到接口的方法,可避免写相应实现类
resultType:返回的类型,若在主配置文件中没配置别名,则要写全限定类名
parameterType:传入的参数类型,若在主配置文件中没配置别名,则要写全限定类名
2,resultMap(配置好后,注意在相应的crud中配置resultMap属性引用,其和resultType类似)
作用:当查询结果的列名和实体类的属性名不一致时,可配置其对应关系,除此还可在sql语句中使用as来配置别名
属性:
id:唯一表示
type:要配置实体类的全限定类名,若在主配置文件中没配置别名,则要写全限定类名
id:
作用:主键字段对应,resultMap 标签内
属性:
property:实体类中的属性名
column:与相应实体类属性相对应的列名
result:
作用:非主键字段对应,resultMap标签内,与id标签用法类似
属性:
property:实体类中的属性名
column:与相应实体类属性相对应的列名
3,sql
作用:可将crud中重复的代码在外部配置,需要使用时,需在crud中配置include标签 ,如<sql id=“defaultUser”>
select * from user
</sql>
属性:
id:唯一标识
4,include
作用:引用sql标签,其一般常用在crud标签内
属性:
refid:引用sql标签的id
5,selectKey(如:
<selectKey keyProperty=“id” resultType=“int” order=“AFTER”>
select last_insert_id()
</selectKey>
)
作用:主键回填,在插入操作执行后,由于主键为自增类型,插入后想获取相应的主键,常用在insert标签内
属性:
keyProperty:selectKey 语句结果应该被设置的目标属性。
resultType:返回结果的类型
order:before和after,若为before,则会先设置selectKey,然后再执行插入操作,若为after,则相反先执行插入然后再设置selectKey
6,if
作用:若查询条件的不确定性时,可用if来判断,常用在查询标签内(注意,使用if标签时,where 后应为1=1,即where 1=1,其含义因篇幅有限,就不再详说)
属性:
test:常用于写判断条件,如 :
test=“id !=null”
,注意当有多条if标签时,在if标签内的语句注意加and
7,where
作用:常用和if一起使用,当一起使用时,where 1=1就不用写了
8,foreach
作用:当查询条件有集合类型时,且需动态生成sql语句,可使用该标签,其一般和where、if配合使用
属性:
collection:要做foreach的对象,通常是集合类型变量名
open:foreach代码的开始符号,一般是(和close=")“合用。常用在in(),values()时。该参数可选
close:foreach代码的关闭符号,一般是)和open=”(“合用。常用在in(),values()时。该参数可选。
item:集合中元素迭代时的别名,该参数为必选。
separator:元素和元素之间的分隔符,
用法示例:
select * from user
<where>
<if
test
=“ids !=null and ids.size()>0”
>
<foreach
collection
=“ids”
open
=“and id in (”
close
=”)"
item
=“uid”
separator
=","
>
#{uid}
</foreach>
</if>
</where>
3,多表查询(
注:mybatis中多对一同一对一是一致的,即多对一就是一对一)
1,一对一/多对一()
实体类从表应包含一个主表的实体对象的引用
映射文件配置:
配置resultMap,配置完其他基本属性后,配置主表对象引用。
association:
作用:封装实体类对象
属性:
1,property:映射实体类的字段或属性。
2,colum:数据库的列名或者列标签别名
3,javaTyp:完整的实体类的全限定类名或别名。
在associtaion标签内还需配置id和result标签,和resultMap类似,但配置的是关联实体类的属性
2,一对多
一对多的关系映射,主表实体应包含从表实体的集合引用
映射文件配置:
配置resultMap,配置完其他基本属性后,配置从表的集合
collection:
作用:封装从表实体集合
属性:
1,property:映射实体类的字段或属性。
2, oftype:完整的实体类的全限定类名或别名。
在collection标签内还需配置id和result标签,和resultMap类似,但配置的是从那边实体集合的属性
3,多对多
其配置和一对多一样,主表应包含从表的集合引用,resultMap配置也是一样的
注解方面:
@select,@insert,@update,@delete就不再介绍了
至此,SSM框架完结撒花