由於項目需求,需要將以往寫的jpa的數據增刪改查操作換成mybatis,所以稍作了解mybatis
因時間緊迫,並沒有對深入實現原理進行學習,只是查詢相關資料,學習如何使用。在本項目中,因已經有前輩所在準備,故配置之類並未進行修改。
mybatis與spring cloud 結合使用
1 首先是定義domain。如果相關聯查詢,需要在domain中包含索要關聯查詢的domain屬性
private static final long serialVersionUID = -1654620673909327705L;
private String userId;
private String loginCode;
private String userName;
private String certType;
private String certNo;
private String userCode;
private String deadline;
private String orgId;
private String dptId;
private String userPassword;
private String userSex;
private String userBirthday;
private String userEmail;
private String userMobilephone;
private String userOfficetel;
private String userEducation;
private String userCertificate;
private String entrantsDate;
private String positionTime;
private String financialJobTime;
private String positionDegree;
private String userAvatar;
private String offenIp;
private String userSts = "1";
private String lastLoginTime;
private String lastEditPassTime;
private String lastChgUsr = SecurityUtils.getCurrentUserLogin();
private String lastChgDt = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
//private AdminSmDpt adminSmDpt;
private Set<AdminSmRole> authorities = new HashSet<>();
// private AdminSmOrg adminSmOrg;
//private AdminSmInstu adminSmInstu;
代碼中的Set<AdminSmRole> authorities
是AdminSmUser 這個domain的一個屬性 ,當然也需要建立該domain
public class AdminSmRole implements Serializable{
private static final long serialVersionUID = -3798852960056031116L;
private String roleId;
private String roleCode;
private String roleName;
private String orgId;
private String roleLevel;
private String roleSts;
private String lastChgUsr = SecurityUtils.getCurrentUserLogin();
private String lastChgDt = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
2建立AdminSmUserMapper.jave
public interface AdminSmUserMapper {
public AdminSmUser selectAdminSmUser(@Param("loginCode") String loginCode);
//public AdminSmUser selectAdminSmUserWithDpt(@Param("loginCode") String loginCode);
public AdminSmUser selectAdminSmUserWithRoles(@Param("loginCode") String loginCode);
public AdminSmUser selectAdminSmUserWithAll(@Param("loginCode") String loginCode);
//public List<Map<String, Object>> selectAdminSmUserWithAll(@Param("loginCode") String loginCode);
public int updatePassword(Map<String, String> paramMap);
}
該接口並沒有任何不同(或者是不知道spring cloud實現原理,所以看不出不同)
3 建立AdminSmUserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.com.yusys.yusp.uaa.repository.mapper.AdminSmUserMapper">
<resultMap id="adminSMWithAll" type="cn.com.yusys.yusp.uaa.domain.AdminSmUser">
<id column="user_id" property="userId" jdbcType="VARCHAR" />
<association property="adminSmDpt" javaType="cn.com.yusys.yusp.uaa.domain.AdminSmDpt">
<id property="dptId" column="dpt_id" />
<result property="dptName" column="DPT_NAME" />
<result property="dptCode" column="DPT_CDE" />
</association>
<association property="adminSmOrg" javaType="cn.com.yusys.yusp.uaa.domain.AdminSmOrg">
<id property="orgId" column="org_id" />
<result property="orgName" column="ORG_NAME" />
<result property="orgCode" column="ORG_CODE" />
</association>
<association property="adminSmInstu" javaType="cn.com.yusys.yusp.uaa.domain.AdminSmInstu">
<id property="instuId" column="instu_id" />
<result property="instuName" column="INSTU_NAME" />
<result property="instuCde" column="INSTU_CDE" />
</association>
<collection property="authorities" javaType="java.util.Set"
ofType="cn.com.yusys.yusp.uaa.domain.AdminSmRole">
<id column="ROLE_ID" property="roleId" jdbcType="VARCHAR" />
<result column="ROLE_CODE" property="roleCode" jdbcType="VARCHAR" />
<result column="ROLE_NAME" property="roleName" jdbcType="VARCHAR" />
<result column="ORG_ID" property="orgId" jdbcType="VARCHAR" />
<result column="ROLE_LEVEL" property="roleLevel" jdbcType="INTEGER" />
<result column="ROLE_STS" property="roleSts" jdbcType="VARCHAR" />
<result column="LAST_CHG_USR" property="lastChgUsr" jdbcType="VARCHAR" />
<result column="LAST_CHG_DT" property="lastChgDt" jdbcType="VARCHAR" />
</collection>
</resultMap>
<resultMap id="queryForListMap" type="cn.com.yusys.yusp.uaa.domain.AdminSmUser">
<id column="user_id" property="userId" jdbcType="VARCHAR" />
<result column="LOGIN_CODE" property ="loginCode" jdbcType="VARCHAR" />
<result column="USER_NAME" property ="userName" jdbcType="VARCHAR" />
<result column="CERT_TYPE" property ="certType" jdbcType="VARCHAR" />
<result column="CERT_NO" property ="certNo" jdbcType="VARCHAR" />
<result column="USER_CODE" property ="userCode" jdbcType="VARCHAR" />
<result column="DEADLINE" property ="deadline" jdbcType="VARCHAR" />
<result column="ORG_ID" property ="orgId" jdbcType="VARCHAR" />
<result column="DPT_ID" property ="dptId" jdbcType="VARCHAR" />
<result column="USER_PASSWORD" property ="userPassword" jdbcType="VARCHAR" />
<result column="USER_SEX" property ="userSex" jdbcType="VARCHAR" />
<result column="USER_BIRTHDAY" property ="userBirthday" jdbcType="VARCHAR" />
<result column="USER_EMAIL" property ="userEmail" jdbcType="VARCHAR" />
<result column="USER_MOBILEPHONE" property ="userMobilephone" jdbcType="VARCHAR" />
<result column="USER_OFFICETEL" property ="userOfficetel" jdbcType="VARCHAR" />
<result column="USER_EDUCATION" property ="userEducation" jdbcType="VARCHAR" />
<result column="USER_CERTIFICATE" property ="userCertificate" jdbcType="VARCHAR" />
<result column="ENTRANTS_DATE" property ="entrantsDate" jdbcType="VARCHAR" />
<result column="POSITION_TIME" property ="positionTime" jdbcType="VARCHAR" />
<result column="FINANCIAL_JOB_TIME" property ="financialJobTime" jdbcType="VARCHAR" />
<result column="POSITION_DEGREE" property ="positionDegree" jdbcType="VARCHAR" />
<result column="USER_AVATAR" property ="userAvatar" jdbcType="VARCHAR" />
<result column="OFFEN_IP" property ="offenIp" jdbcType="VARCHAR" />
<result column="USER_STS" property ="userSts" jdbcType="VARCHAR" />
<result column="LAST_LOGIN_TIME" property ="lastLoginTime" jdbcType="VARCHAR" />
<result column="LAST_EDIT_PASS_TIME" property ="lastEditPassTime" jdbcType="VARCHAR" />
<result column="LAST_CHG_USR" property ="lastChgUsr" jdbcType="VARCHAR" />
<result column="LAST_CHG_DT" property ="lastChgDt" jdbcType="VARCHAR" />
<result column="HEAD_PORT" property ="headPort" jdbcType="VARCHAR" />
<collection property="authorities" javaType="java.util.Set"
ofType="cn.com.yusys.yusp.uaa.domain.AdminSmRole">
<id column="ROLE_ID" property="roleId" jdbcType="VARCHAR" />
<result column="ROLE_CODE" property="roleCode" jdbcType="VARCHAR" />
<result column="ROLE_NAME" property="roleName" jdbcType="VARCHAR" />
<result column="ORG_ID" property="orgId" jdbcType="VARCHAR" />
<result column="ROLE_LEVEL" property="roleLevel" jdbcType="INTEGER" />
<result column="ROLE_STS" property="roleSts" jdbcType="VARCHAR" />
<result column="LAST_CHG_USR" property="lastChgUsr" jdbcType="VARCHAR" />
<result column="LAST_CHG_DT" property="lastChgDt" jdbcType="VARCHAR" />
</collection>
</resultMap>
<!-- 使用resultMap映射實體類和字段之間的一一對應關係 -->
<resultMap type="cn.com.yusys.yusp.uaa.domain.AdminSmUser" id="dpt">
<id column="user_id" property="userId" jdbcType="VARCHAR" />
<result column="dpt_id" property="dptId" />
<association property="adminSmDpt" javaType="cn.com.yusys.yusp.uaa.domain.AdminSmDpt">
<id property="dptId" column="dpt_id" />
<result property="dptName" column="DPT_NAME" />
</association>
</resultMap>
<select id="selectAdminSmUser" parameterType="String"
resultType="cn.com.yusys.yusp.uaa.domain.AdminSmUser">
select
USER_ID , LOGIN_CODE, USER_NAME, CERT_TYPE , CERT_NO , USER_CODE , DEADLINE , ORG_ID , DPT_ID ,
USER_PASSWORD, USER_SEX , USER_BIRTHDAY , USER_EMAIL , USER_MOBILEPHONE , USER_OFFICETEL ,
USER_EDUCATION , USER_CERTIFICATE , ENTRANTS_DATE , POSITION_TIME , FINANCIAL_JOB_TIME ,
POSITION_DEGREE , USER_AVATAR , OFFEN_IP , USER_STS , LAST_LOGIN_TIME , LAST_EDIT_PASS_TIME ,
LAST_CHG_USR , LAST_CHG_DT , HEAD_PORT
from admin_sm_USER
<where>
<if test="loginCode != null">
and LOGIN_CODE=#{loginCode}
</if>
</where>
</select>
<select id="selectAdminSmUserWithRoles" parameterType="String"
resultMap="queryForListMap">
select a.* ,c.ROLE_ID,C.ROLE_CODE,C.ROLE_NAME,C.ORG_ID,C.ROLE_LEVEL,C.ROLE_STS from admin_sm_user a
left join admin_sm_user_role_rel b on a.user_id=b.user_id
left join admin_sm_role c on c.role_id=b.role_id
<where>
<if test="loginCode != null">
and a.LOGIN_CODE=#{loginCode}
</if>
</where>
</select>
<!-- <select id="selectAdminSmUserWithDpt" parameterType="String"
resultMap="dpt">
select a.user_id,a.dpt_id,b.dpt_id,b.DPT_NAME from admin_sm_user a
left join admin_sm_dpt b on a.dpt_id = b.dpt_id
<where>
<if test="loginCode != null">
and a.LOGIN_CODE=#{loginCode}
</if>
</where>
</select> -->
<select id="selectAdminSmUserWithAll" parameterType="String"
resultMap="adminSMWithAll">
select a.ORG_ID,a.DPT_ID,a.INSTU_Id,a.USER_ID , a.LOGIN_CODE, a.USER_NAME, a.CERT_TYPE , a.CERT_NO , a.USER_CODE , a.DEADLINE , a.ORG_ID , a.DPT_ID ,
a.USER_PASSWORD, a.USER_SEX , a.USER_BIRTHDAY , a.USER_EMAIL , a.USER_MOBILEPHONE , a.USER_OFFICETEL ,
a.USER_EDUCATION , a.USER_CERTIFICATE , a.ENTRANTS_DATE , a.POSITION_TIME , a.FINANCIAL_JOB_TIME ,
a.POSITION_DEGREE , a.USER_AVATAR , a.OFFEN_IP , a.USER_STS , a.LAST_LOGIN_TIME , a.LAST_EDIT_PASS_TIME ,
a.LAST_CHG_USR , a.LAST_CHG_DT , a.HEAD_PORT,
C.ROLE_CODE,C.ROLE_NAME,C.ORG_ID,C.ROLE_LEVEL,C.ROLE_STS,C.ROLE_ID,
d.INSTU_Id,d.ORG_COdE,d.ORG_NAME,d.UP_ORG_Id, d.ORG_LEVEL,d.ORG_AddR,d.ZIP_CdE,d.CONT_TEL,d.CONT_USR, d.ORG_STS,
e.DPT_CDE,e.DPT_NAME,e.BELONG_ORG_ID,e.UP_DPT_ID
from admin_sm_user a
left join admin_sm_user_role_rel b on a.user_id = b.user_id
left join admin_sm_role c on b.role_id = c.role_id
left join admin_sm_org d on a.org_id = d.org_id
left join admin_sm_dpt e on a.dpt_id = e.dpt_id
left join admin_sm_instu f on d.instu_id = f.instu_id
<where>
<if test="loginCode != null">
and a.LOGIN_CODE=#{loginCode}
</if>
</where>
</select>
<!-- 根據用戶loginCode修改用戶密碼 -->
<update id="updatePassword" parameterType="java.util.Map">
update ADMIN_SM_USER set USER_PASSWORD=#{newPassword, jdbcType=VARCHAR},LAST_CHG_USR=#{user, jdbcType=VARCHAR},
LAST_CHG_DT=#{date, jdbcType=VARCHAR} where LOGIN_CODE=#{loginCode, jdbcType=VARCHAR}
</update>
</mapper>
其中
resultMap 是爲了實現聯合查詢,其中
association 是一對一的關係
collection是一對多的關係。
該步驟就是爲了把查到的數據映射到相應的domain屬性中。