mybatis中映射文件和實體類的關聯性

来源:http://www.cnblogs.com/spiders/archive/2016/09/02/5835955.html
-Advertisement-
Play Games

mybatis的映射文件寫法多種多樣,不同的寫法和用法,在實際開發過程中所消耗的開發時間、維護時間有很大差別,今天我就把我認為比較簡單的一種映射文件寫法記錄下來,供大家修改建議,爭取找到一個最優寫法~~: 以User對象和UserMap.xml為例講解,代碼如下: User為用戶實體類(僅作為講解, ...


 mybatis的映射文件寫法多種多樣,不同的寫法和用法,在實際開發過程中所消耗的開發時間、維護時間有很大差別,今天我就把我認為比較簡單的一種映射文件寫法記錄下來,供大家修改建議,爭取找到一個最優寫法~~:

以User對象和UserMap.xml為例講解,代碼如下:

User為用戶實體類(僅作為講解,可以只關註引用類型變數,get/set方法省略):

import com.google.common.collect.Lists;
import com.gukeer.common.persistence.DataEntity;
import com.gukeer.modules.personal.entity.Dept;
import com.gukeer.modules.personal.entity.Staff;
import com.gukeer.modules.school.entity.School;

import java.util.Date;

/**
 * 用戶Entity
 *
 * auther:cc
 * date:2016/9/2
 */
public class User extends DataEntity<User> {
    private static final long serialVersionUID = 1L;

    private String id;
    private Office company; // 歸屬公司
    private Office office; // 歸屬部門
    private String loginName;// 登錄名
    private String password;// 密碼
    private String no; // 工號
    private String name; // 姓名
    private String email; // 郵箱
    private String phone; // 電話
    private String mobile; // 手機
    private String userType;// 用戶類型
    private String loginIp; // 最後登陸IP
    private Date loginDate; // 最後登陸日期
    private String loginFlag; // 是否允許登陸
    private String photo; // 頭像
    private String qrCode; // 二維碼
    private String oldLoginName;// 原登錄名
    private String newPassword; // 新密碼
    private String oldLoginIp; // 上次登陸IP
    private Date oldLoginDate; // 上次登陸日期
    private Dept dept;  //部門
    private Staff staff;  //職位
    private Role role; // 根據角色查詢用戶條件
    private List<Role> roleList = Lists.newArrayList(); // 擁有角色列表
    private School school; //歸屬學校
    private String remarks; // 備註
    private User createBy; // 創建者
    private Date createDate;   // 創建日期
    private User updateBy; // 更新者
    private Date updateDate;   // 更新日期
    private String delFlag;    // 刪除標記(0:正常;1:刪除;2:審核)
}

 

針對引用類型的成員變數,為了可以在查詢過程中直接賦值,在映射文件中可以直接將查詢結果賦值給返回的結果集:

<?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="com.gk.modules.sys.dao.UserDao">
  <!-- 重點就是這一段,將資料庫保存的id欄位直接賦值給一個對象的成員變數中,比如a.company_id AS "company.id",此時後臺查詢回的List或User對象中的屬性可以直接通過user.getCompany().getId()來獲取到-->
  <!-- 當然Company中的引用類型變數也可以使用這種方法來賦值,通過LEFT JOIN可以聯查多表,這是資料庫查詢方面的操作,這裡不作討論 --> <sql id="userColumns"> a.id, a.company_id AS "company.id", a.office_id AS "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_by AS "createBy.id", a.create_date, a.update_by AS "updateBy.id", a.update_date, a.del_flag, c.name AS "company.name", c.parent_id AS "company.parent.id", c.parent_ids AS "company.parentIds", ca.id AS "company.area.id", ca.name AS "company.area.name", ca.parent_id AS "company.area.parent.id", ca.parent_ids AS "company.area.parentIds", o.name AS "office.name", o.parent_id AS "office.parent.id", o.parent_ids AS "office.parentIds", oa.id AS "office.area.id", oa.name AS "office.area.name", oa.parent_id AS "office.area.parent.id", oa.parent_ids AS "office.area.parentIds", cu.id AS "company.primaryPerson.id", cu.name AS "company.primaryPerson.name", cu2.id AS "company.deputyPerson.id", cu2.name AS "company.deputyPerson.name", ou.id AS "office.primaryPerson.id", ou.name AS "office.primaryPerson.name", ou2.id AS "office.deputyPerson.id", ou2.name AS "office.deputyPerson.name", sc.xxlx AS "school.xxlx", sc.xxmc AS "school.xxmc" </sql> <sql id="userJoins"> LEFT JOIN sys_office c ON c.id = a.company_id LEFT JOIN sys_area ca ON ca.id = c.area_id LEFT JOIN sys_office o ON o.id = a.office_id LEFT JOIN sys_area oa ON oa.id = o.area_id LEFT JOIN sys_user cu ON cu.id = c.primary_person LEFT JOIN sys_user cu2 ON cu2.id = c.deputy_person LEFT JOIN sys_user ou ON ou.id = o.primary_person LEFT JOIN sys_user ou2 ON ou2.id = o.deputy_person LEFT JOIN xj_school sc ON sc.id = a.school </sql> <!-- 查詢語句,根據Id查詢結果,返回類型可以直接寫User,而不同配置resultMap省略編寫xml的時間 --> <select id="getUserById" resultType="User"> SELECT <include refid="userColumns"/> FROM sys_user a <include refid="userJoins"/> WHERE a.id = #{id} </select> <!-- 查詢語句,根據User對象來查詢,這裡的參數即為User變數 --> <select id="getByLoginName" resultType="User" parameterType="User"> SELECT <include refid="userColumns"/> FROM sys_user a <include refid="userJoins"/> WHERE
     a.login_name = #{loginName}
     AND a.del_flag = #{DEL_FLAG_NORMAL}
</select> <!-- 插入語句,參數肯定是User對象 --> <insert id="insert"> INSERT INTO sys_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對象 --> <update id="update"> UPDATE sys_user SET 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} WHERE id = #{id} </update> <!-- 物理刪除用戶 --> <update id="delete"> DELETE FROM sys_user WHERE id = #{id} </update> <!-- 邏輯刪除用戶 --> <update id="deleteByLogic"> UPDATE sys_user SET del_flag = #{DEL_FLAG_DELETE} WHERE id = #{id} </update>
</mapper>

 

 整體就是這樣,如果後續有什麼補充,我會在之後的章節增加;如果有錯誤歡迎指出並修改。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 想要使用OWA需要一臺單獨的伺服器來部署,這對很多人造成困難。而寫該文的目的是為了分享有個OWA的集成步驟,它不僅適用於.Net開發環境,其它語言也是一樣的,只要實現了需要的服務介面。並且該文不局限與OWA的研究,還包括Config、XML、Cache、Redis等技術。更重要的是熟悉.Net Co ...
  • 目錄索引 【無私分享:ASP.NET CORE 項目實戰】目錄索引 簡介 MyCat2.0版本很快就發佈了,關於MyCat的動態和一些問題,大家可以加一下MyCat的官方QQ群:106088787。我們今天主要介紹一下,在我們的Asp.net Core中如何使用Mycat,這源於一個大神(Amami ...
  • 1、本系統主要目的:1、實現電路圖線上設計及電路設備選型;2、對電路圖設計過程中涉及到的工程計算進行線上處理;3、對電路圖設計所涉及的相關數據可視化。 2、本系統實現前提:1、visio組件,傳統visio運用均是基於pc端本地visio軟體操作,無法滿足visio圖的實施共用性;2、web端是基於 ...
  • 本次介紹的是音樂播放器APlayer結合WebAPI的使用,先給各位看下效果: 上面就是APlayer的效果,然後這插件的地址是 https://github.com/DIYgod/APlayer 下麵是項目內容: APlayerAndWebApi是處理APlayer的,而WebAPI則是生成音樂列 ...
  • 我們來說一下Iqueryable集合和List等本地集合的區別,下麵我們通過建立一個簡單的例子來學習這個知識點,直接進入主題吧 1.首先對比一下兩段代碼?看一下有什麼結果: (1) 第一段代碼如圖所示: (2)第一段代碼使用資料庫的Profiler查看執行結果: (3)第二段代碼如圖所示: (4) ...
  • 材質顏色 OpenGL用材料對光的紅、綠、藍三原色的反射率來近似定義材料的顏色。象光源一樣,材料顏色也分成環境、漫反射和鏡面反射成分,它們決定了材料對環境光、漫反射光和鏡面反射光的反射程度。在進行光照計算時,材料對環境光的反射率與每個進入光源的環境光結合,對漫反射光的反射率與每個進入光源的漫反射光結 ...
  • 項目介紹:利用Qt實現簡單的學生信息管理 實現功能:實現對信息的添加,刪除,查詢,修改 廢話不多說,直接進入主題:(剛剛學,界面做的不是太美觀,請多包涵) 主界面 - mainWindow && login 一、添加學生 - 1、使用組件有:Dialog 視窗,Label標簽,Line Edit,S ...
  • 之前一直沒搞懂這個怎麼計算的,主要也因為之前沒怎麼用到過這個,但現在想把它搞懂,所以索性一次性搞懂為妙,以後就不用再糾結了哈。 按位運算符就是把數字看作二進位來進行計算的,並且再把計算出來的二進位給它轉換成十進位,也就是最終的結果了。 比如: 7&9 這個是按位與,先不討論與不與的,總之它現在會把7 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...