SQL映射文件
SQL映射文件中的几个顶级元素介绍:
mapper:SQL映射文件的根元素。只有一个属性namespace,用于区分不同的mapper,必须全局唯一。
cache:为给定命名空间配置缓存。
cache-ref:引用其他命名空间中的缓存配置。
resultMap:用来描述查询结果集中的字段和Java实体类属性的对应关系。
sql:定义可重用的SQL语句块,可以在其他语句映射中引用,提高编写和维护SQL语句的效率。
insert:映射insert语句。
update:映射update语句。
delete:映射delete语句。
select:映射select语句。
单一条件查询
在接口中添加一个查询
int Grenndang(String SysUser);
添加Sql语句
<select>
select * from cvs_js where name = #{Name}
</select>
MyBatis框架内建的部分名与Java数据类型的映射关系
别名 | 映射类型 | 别名 | 映射类型 |
---|---|---|---|
boolean | Boolean | string | String |
byte | Byte | bigdecimal或decimal | BigDecimal |
long | Long | date | Date |
short | Short | map | Map |
int或integer | Integer | hashmap | HashMap |
double | Double | list | List |
float | Float | arraylist | ArrayList |
多条件查询
1.将查询条件爱你封装成一格Java对象作为参数
int Grenndang(SysUser sysuser(SysUser作为一个实体类));
2.将查询条件封装成Map对象作为参数
List<SysUser> getUserList(Map<String,Object> userMap)
3.使用@Param注解实现多参数入参
int Grenndang(@Param(Name)String name);
MyBatis框架的结果映射
使用resultMap元素自定义结果映射
//示例
//Mapper接口
public List<SysUser> getUserListWithRoleName(SysUser sysUser);
//xml文件
//使用resultMap元素定义结果映射
<resultMap id="userWithRoleName" type="sysuser">
<id property="id" column="id">
<result property="userRoleName" column="roleName"/>
</resultMap>
//resultMap元素定义的规则封装查询结果
<select id="getUserListWithRoleName" parameterType="sysuser" resultMap="userWithRoleName">
select u.*,r.roleName from t_sys_user u,t_sys_role r
where u.realName like CONCAT ('%',#{realName},'%')
and u.roleId = #{roleId} and u.roleId = r.id
</select>
select元素通过resultMap属性引用resultMap元素定义的映射规则:
resultMap元素包含以下属性:
id:映射规则集的唯一标识,可以被select元素的resultMap属性引用。
type:映射的结果类型,这里指定封装成SysUser实例。
resultMap元素包含以下子元素:
id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。
result:指定结果集字段和实体类属性的映射关系。
####嵌套结果映射:
1、association元素
association属性
resultMap:外部引用 值为id值
property:为你在这个类创建的类对象名称
javaType:为完整java类名或者别名
子元素
id:一般用于主键
result元素属性
property :属性名
column:数据库列名或者别名
<!--方法一 未使用resultMap -->
<resultMap type="Bill" id="billListInProvider">
<id property="id" column="id"/>
<association property="provider" javaType="Provider">
<id property="id" column="p_id"/>
<result property="proCode" column="proCode"/>
<result property="proName" column="proName"/>
<result property="proContact" column="proContact"/>
<result property="proPhone" column="proPhone"/>
</association>
</resultMap>
<!--方法二 使用resultMap -->
<resultMap type="User" id="userRoleResult">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<association property="role" javaType="Role" resultMap="aaaa" />
</resultMap>
<resultMap type="Role" id="aaaa">
<result property="id" column="r_id"/>
<result property="roleCode" column="roleCode"/>
<result property="roleName" column="roleName"/>
</resultMap>
2、collection元素
collection属性
resultMap:外部引用 值为id值
property:为这个类内的集合名称
ofType:完整的类名或别名,就是集合包含的类型
子元素
id:一般用于主键
result元素属性
property :属性名
column:数据库列名或者别名
resultType和resultMap小结:
resultmap:resultMap如果查询出来的列名和pojo的属性名不一致,通过定义
一个resultMap对列名和pojo属性名之间作一个映射关系。
resultType:resultType使用resultType进行输出映射,只有查询出来的
列名和pojo中的属性名一致,该列才可以映射成功。