深入浅出MyBatis中映射文件和实体类的关联性
mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间、维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~~:
以User对象和UserMap.xml为例讲解,代码如下:
User为用户实体类(仅作为讲解,可以只关注引用类型变量,get/set方法省略):
importcom.google.common.collect.Lists;
importcom.gukeer.common.persistence.DataEntity;
importcom.gukeer.modules.personal.entity.Dept;
importcom.gukeer.modules.personal.entity.Staff;
importcom.gukeer.modules.school.entity.School;
importjava.util.Date;
/**
*用户Entity
*
*auther:cc
*date:2016/9/2
*/
publicclassUserextendsDataEntity<User>{
privatestaticfinallongserialVersionUID=1L;
privateStringid;
privateOfficecompany;//归属公司
privateOfficeoffice;//归属部门
privateStringloginName;//登录名
privateStringpassword;//密码
privateStringno;//工号
privateStringname;//姓名
privateStringemail;//邮箱
privateStringphone;//电话
privateStringmobile;//手机
privateStringuserType;//用户类型
privateStringloginIp;//最后登陆IP
privateDateloginDate;//最后登陆日期
privateStringloginFlag;//是否允许登陆
privateStringphoto;//头像
privateStringqrCode;//二维码
privateStringoldLoginName;//原登录名
privateStringnewPassword;//新密码
privateStringoldLoginIp;//上次登陆IP
privateDateoldLoginDate;//上次登陆日期
privateDeptdept;//部门
privateStaffstaff;//职位
privateRolerole;//根据角色查询用户条件
privateList<Role>roleList=Lists.newArrayList();//拥有角色列表
privateSchoolschool;//归属学校
privateStringremarks;//备注
privateUsercreateBy;//创建者
privateDatecreateDate;//创建日期
privateUserupdateBy;//更新者
privateDateupdateDate;//更新日期
privateStringdelFlag;//删除标记(0:正常;1:删除;2:审核)
}
针对引用类型的成员变量,为了可以在查询过程中直接赋值,在映射文件中可以直接将查询结果赋值给返回的结果集:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.gk.modules.sys.dao.UserDao">
<!--重点就是这一段,将数据库保存的id字段直接赋值给一个对象的成员变量中,比如a.company_idAS"company.id",此时后台查询回的List或User对象中的属性可以直接通过user.getCompany().getId()来获取到-->
<!--当然Company中的引用类型变量也可以使用这种方法来赋值,通过LEFTJOIN可以联查多表,这是数据库查询方面的操作,这里不作讨论-->
<sqlid="userColumns">
a.id,
a.company_idAS"company.id",
a.office_idAS"office.id",
a.login_name,
a.password,
a.no,
a.name,
a.email,
a.phone,
a.mobile,
a.user_type,
a.login_ip,
a.login_date,
a.remarks,
a.login_flag,
a.photo,
a.qrcode,
a.create_byAS"createBy.id",
a.create_date,
a.update_byAS"updateBy.id",
a.update_date,
a.del_flag,
c.nameAS"company.name",
c.parent_idAS"company.parent.id",
c.parent_idsAS"company.parentIds",
ca.idAS"company.area.id",
ca.nameAS"company.area.name",
ca.parent_idAS"company.area.parent.id",
ca.parent_idsAS"company.area.parentIds",
o.nameAS"office.name",
o.parent_idAS"office.parent.id",
o.parent_idsAS"office.parentIds",
oa.idAS"office.area.id",
oa.nameAS"office.area.name",
oa.parent_idAS"office.area.parent.id",
oa.parent_idsAS"office.area.parentIds",
cu.idAS"company.primaryPerson.id",
cu.nameAS"company.primaryPerson.name",
cu2.idAS"company.deputyPerson.id",
cu2.nameAS"company.deputyPerson.name",
ou.idAS"office.primaryPerson.id",
ou.nameAS"office.primaryPerson.name",
ou2.idAS"office.deputyPerson.id",
ou2.nameAS"office.deputyPerson.name",
sc.xxlxAS"school.xxlx",
sc.xxmcAS"school.xxmc"
</sql>
<sqlid="userJoins">
LEFTJOINsys_officecONc.id=a.company_id
LEFTJOINsys_areacaONca.id=c.area_id
LEFTJOINsys_officeoONo.id=a.office_id
LEFTJOINsys_areaoaONoa.id=o.area_id
LEFTJOINsys_usercuONcu.id=c.primary_person
LEFTJOINsys_usercu2ONcu2.id=c.deputy_person
LEFTJOINsys_userouONou.id=o.primary_person
LEFTJOINsys_userou2ONou2.id=o.deputy_person
LEFTJOINxj_schoolscONsc.id=a.school
</sql>
<!--查询语句,根据Id查询结果,返回类型可以直接写User,而不同配置resultMap省略编写xml的时间-->
<selectid="getUserById"resultType="User">
SELECT
<includerefid="userColumns"/>
FROMsys_usera
<includerefid="userJoins"/>
WHEREa.id=#{id}
</select>
<!--查询语句,根据User对象来查询,这里的参数即为User变量-->
<selectid="getByLoginName"resultType="User"parameterType="User">
SELECT
<includerefid="userColumns"/>
FROMsys_usera
<includerefid="userJoins"/>
WHERE
a.login_name=#{loginName}
ANDa.del_flag=#{DEL_FLAG_NORMAL}
</select>
<!--插入语句,参数肯定是User对象-->
<insertid="insert">
INSERTINTOsys_user(
id,
company_id,
office_id,
login_name,
password,
no,
name,
email,
phone,
mobile,
user_type,
create_by,
create_date,
update_by,
update_date,
remarks,
login_flag,
photo,
qrcode,
del_flag,
dept_id,
staff_id,
school
)VALUES(
#{id},
#{company.id},
#{office.id},
#{loginName},
#{password},
#{no},
#{name},
#{email},
#{phone},
#{mobile},
#{userType},
#{createBy.id},
#{createDate},
#{updateBy.id},
#{updateDate},
#{remarks},
#{loginFlag},
#{photo},
#{qrCode},
#{delFlag},
#{dept.id},
#{staff.id},
#{school.id}
)
</insert>
<!--更新语句,参数也是User对象-->
<updateid="update">
UPDATEsys_userSET
company_id=#{company.id},
office_id=#{office.id},
login_name=#{loginName},
password=#{password},
no=#{no},
name=#{name},
email=#{email},
phone=#{phone},
mobile=#{mobile},
user_type=#{userType},
update_by=#{updateBy.id},
update_date=#{updateDate},
remarks=#{remarks},
login_flag=#{loginFlag},
photo=#{photo},
qrcode=#{qrCode},
school=#{school.id}
WHEREid=#{id}
</update>
<!--物理删除用户-->
<updateid="delete">
DELETEFROMsys_user
WHEREid=#{id}
</update>
<!--逻辑删除用户-->
<updateid="deleteByLogic">
UPDATEsys_userSET
del_flag=#{DEL_FLAG_DELETE}
WHEREid=#{id}
</update>
</mapper>热门推荐
10 小红书平安祝福语简短
11 生日祝福语大全女孩简短
12 收生日红包祝福语 简短
13 领证幽默祝福语简短
14 法考面试祝福语简短
15 老哥出门祝福语简短语
16 送灯祝福语简短独特
17 幼儿狗年祝福语大全简短
18 好听的元旦简短祝福语