日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Mybatis基于XML配置SQL映射器(二)

發布時間:2023/12/20 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis基于XML配置SQL映射器(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mybatis之XML注解

之前已經講到通過?mybatis-generator 生成mapper映射接口和相關的映射配置文件:

?

下面我們將詳細的講解具體內容

首先我們新建映射接口文檔 ?sysUserExtMapper.java,同時新增相關配置文件sysUserExtMapper.xml。通過操作這兩個類我們來講解具體內容。

映射語句

MyBatis提供了多種元素來配置不同類型的語句,如SELECT,INSERT,UPDATE,DELETE。接下來讓我們看看如何具體配置映射語句。

INSERT語句

?一個INSERT SQL語句可以在<insert>元素在sysUserExtMapper.xml中配置,如下所示:

1 <insert id="insertsysUser" parameterType="com.goku.mybatis.model.sysUser"> 2 insert into sys_user (id, username, password, 3 name, sex, status, org_id, 4 email, idcard, is_admin, 5 sort, mobile, stationid 6 ) 7 values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 8 #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{status,jdbcType=CHAR}, #{orgId,jdbcType=VARCHAR}, 9 #{email,jdbcType=VARCHAR}, #{idcard,jdbcType=VARCHAR}, #{isAdmin,jdbcType=VARCHAR}, 10 #{sort,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR}, #{stationid,jdbcType=LONGVARCHAR} 11 ) 12 </insert> View Code

同時在?sysUserExtMapper.java接口中添加相應的方法

1 package com.goku.mybatis.mapper.ext; 2 3 import com.goku.mybatis.model.sysUser; 4 import org.apache.ibatis.annotations.Param; 5 6 import java.util.List; 7 import java.util.Map; 8 9 /** 10 * Created by nbfujx on 2017/10/14. 11 */ 12 public interface sysUserExtMapper { 13 14 int insertsysUser(sysUser sysuser)); 15 } View Code

?增加相對應單元測試查看相關效果

1 package test.com.goku.mybatis.mapper.ext; 2 3 import com.goku.mybatis.WebapiApplication; 4 import com.goku.mybatis.mapper.ext.sysUserExtMapper; 5 import com.goku.mybatis.model.sysUser; 6 import com.goku.mybatis.service.impl.sysUserServiceImpl; 7 import org.junit.Test; 8 import org.junit.runner.RunWith; 9 import org.slf4j.Logger; 10 import org.slf4j.LoggerFactory; 11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.boot.test.context.SpringBootTest; 13 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 14 15 import static org.junit.Assert.*; 16 17 /** 18 * Created by nbfujx on 2017/10/23. 19 */ 20 @RunWith(SpringJUnit4ClassRunner.class) 21 @SpringBootTest(classes = WebapiApplication.class) 22 public class sysUserExtMapperTest { 23 24 private Logger logger = LoggerFactory.getLogger(sysUserExtMapperTest.class); 25 26 @Autowired 27 private sysUserExtMapper sysuserextmapper; 28 29 @Test 30 public void insertsysUser() throws Exception { 31 sysUser sysuser=new sysUser(); 32 sysuser.setId("222"); 33 sysuser.setOrgId("2"); 34 int i=sysuserextmapper.insertsysUser(sysuser); 35 this.logger.info("執行成功個數:"+i); 36 } 37 38 } View Code

執行效果

【自動生成主鍵】

在上述的INSERT語句中,我們為可以自動生成(auto-generated)主鍵的列 id 插入值。

我們可以使用useGeneratedKeys?和?keyProperty屬性讓數據庫生成AUTO_INCREMENT列的值,并將生成的值設置到其中一個輸入對象屬性內,如下所示:

1 <insert id="insertsysUser2" parameterType="com.goku.mybatis.model.sysUser" useGeneratedKeys="true" 2 keyProperty="id"> 3 insert into sys_user ( username, password, 4 name, sex, status, org_id, 5 email, idcard, is_admin, 6 sort, mobile, stationid 7 ) 8 values ( #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 9 #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{status,jdbcType=CHAR}, #{orgId,jdbcType=VARCHAR}, 10 #{email,jdbcType=VARCHAR}, #{idcard,jdbcType=VARCHAR}, #{isAdmin,jdbcType=VARCHAR}, 11 #{sort,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR}, #{stationid,jdbcType=LONGVARCHAR} 12 ) 13 </insert> View Code

有些數據庫如Oracle并不支持 AUTO_INCREMENT 列,其使用序列(SEQUENCE),或者其他查詢(uuid)來生成主鍵值,如下所示:

1 <insert id="insertsysUser3" parameterType="com.goku.mybatis.model.sysUser"> 2 <selectKey keyProperty="id" resultType="java.lang.String" order="BEFORE"> 3 SELECT replace(uuid(),'-','') AS id 4 </selectKey> 5 insert into sys_user (id, username, password, 6 name, sex, status, org_id, 7 email, idcard, is_admin, 8 sort, mobile, stationid 9 ) 10 values (#{id,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 11 #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{status,jdbcType=CHAR}, #{orgId,jdbcType=VARCHAR}, 12 #{email,jdbcType=VARCHAR}, #{idcard,jdbcType=VARCHAR}, #{isAdmin,jdbcType=VARCHAR}, 13 #{sort,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR}, #{stationid,jdbcType=LONGVARCHAR} 14 ) 15 </insert> View Code
UPDATE 語句

一個UPDATE SQL語句可以在<update>元素在映射器XML配置文件中配置,如下所示:

1 <update id="updateUser" parameterType="com.goku.mybatis.model.sysUser"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 update sys_user 7 set username = #{username,jdbcType=VARCHAR}, 8 password = #{password,jdbcType=VARCHAR}, 9 name = #{name,jdbcType=VARCHAR}, 10 sex = #{sex,jdbcType=VARCHAR}, 11 status = #{status,jdbcType=CHAR}, 12 org_id = #{orgId,jdbcType=VARCHAR}, 13 email = #{email,jdbcType=VARCHAR}, 14 idcard = #{idcard,jdbcType=VARCHAR}, 15 is_admin = #{isAdmin,jdbcType=VARCHAR}, 16 sort = #{sort,jdbcType=BIGINT}, 17 mobile = #{mobile,jdbcType=VARCHAR}, 18 stationid = #{stationid,jdbcType=LONGVARCHAR} 19 where id = #{id,jdbcType=VARCHAR} 20 </update> View Code

同時在映射器接口中添加相應的方法

1 int updateUser(sysUser sysuser); View Code

?增加相對應單元測試查看相關效果

1 @Test 2 public void updateUser() throws Exception { 3 sysUser sysuser=sysuserextmapper.selectByUsername("1"); 4 sysuser.setPassword("3"); 5 sysuser.setOrgId("2"); 6 int i=sysuserextmapper.updateUser(sysuser); 7 this.logger.info("執行成功個數:"+i); 8 } View Code

測試效果

DELETE 語句

一個DELETE?SQL語句可以在<delete>元素在映射器XML配置文件中配置,如下所示:

1 <delete id="deleteByUserName" parameterType="java.lang.String"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 delete from sys_user 7 where username = #{username,jdbcType=VARCHAR} 8 </delete> View Code

同時在映射器接口中添加相應的方法

1 int deleteByUserName(@Param("username") String username); View Code

?增加相對應單元測試查看相關效果

1 @Test 2 public void deleteByUserName() throws Exception { 3 int i=sysuserextmapper.deleteByUserName("1"); 4 this.logger.info("執行成功個數:"+i); 5 } View Code

測試效果

SELECT 語句

一個SELECT?SQL語句可以在<select>元素在映射器XML配置文件中配置,如下所示:

1 <select id="selectByUsername" parameterType="java.lang.String" resultMap="BaseResultExtMap"> 2 select 3 <include refid="Base_Ext_Column_List" /> 4 from sys_user 5 where username = #{username,jdbcType=VARCHAR} 6 </select> View Code

同時在映射器接口中添加相應的方法

1 sysUser selectByUsername(String username); View Code

?增加相對應單元測試查看相關效果

1 @Test 2 public void selectByUsername() throws Exception { 3 sysUser user= sysuserextmapper.selectByUsername("444"); 4 System.out.println(user.getId()); 5 } View Code

測試效果

?結果集映射ResultMaps

簡單ResultMap

在<select>語句中,我們使用了resultMap屬性,而不是resultType來引用映射。

當<select>語句中配置了resutlMap屬性,MyBatis會使用此數據庫列名與對象屬性映射關系來填充JavaBean中的屬性。

1 <select id="selectByUsername" parameterType="java.lang.String" resultMap="BaseResultExtMap"> 2 select 3 <include refid="Base_Ext_Column_List" /> 4 from sys_user 5 where username = #{username,jdbcType=VARCHAR} 6 </select> View Code

讓我們來看另外一個<select>映射語句定義的例子,怎樣將查詢結果填充到HashMap中。如下所示:

1 <select id="selectUserByUsername" resultType="java.util.HashMap"> 2 select username,password from sys_user where username = #{username,jdbcType=VARCHAR} 3 </select> View Code

在上述的<select>語句中,我們將resultType配置成map,即java.util.HashMap的別名。在這種情況下,結果集的列名將會作為Map中的key值,而列值將作為Map的value值。

映射器接口中添加相應的方法

1 Map<String, String> selectUserByUsername(@Param("username") String username); View Code

讓我們再看一個 使用resultType=”map”,返回多行結果的例子:

1 <select id="selectUserByOrgid" resultType="java.util.HashMap"> 2 select username,password from sys_user where org_id = #{orgid,jdbcType=VARCHAR} 3 <if test="orderFiled != null" > 4 order by ${orderFiled} 5 <if test="orderSort != null" > 6 ${orderSort} 7 </if> 8 </if> 9 </select> View Code

映射器接口中添加相應的方法

1 List<Map<String, String>> selectUserByOrgid(@Param("orgid") String orgid, @Param("orderSort") String orderSort, @Param("orderFiled") String orderFiled); View Code
拓展ResultMap

首先我們要在?sys_User中增加 sys_user_info對象。下面同理

1 private sysUserInfo sysuserinfo; 2 3 public sysUserInfo getSysuserinfo() { 4 return sysuserinfo; 5 } 6 7 public void setSysuserinfo(sysUserInfo sysuserinfo) { 8 this.sysuserinfo = sysuserinfo; 9 } View Code

?我們可以從從另外一個<resultMap>,拓展出一個新的<resultMap>,這樣,原先的屬性映射可以繼承過來,以實現。

1 <resultMap id="UserinfoBaseResultExtMap" type="com.goku.mybatis.model.sysUser" extends="BaseResultExtMap"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 <result column="address" jdbcType="VARCHAR" property="sysuserinfo.address" /> 7 <result column="post_code" jdbcType="VARCHAR" property="sysuserinfo.postCode" /> 8 <result column="height" jdbcType="VARCHAR" property="sysuserinfo.height" /> 9 <result column="weight" jdbcType="VARCHAR" property="sysuserinfo.weight" /> 10 <result column="birthday" jdbcType="DATE" property="sysuserinfo.birthday" /> 11 <result column="blood" jdbcType="VARCHAR" property="sysuserinfo.blood" /> 12 <result column="culture" jdbcType="VARCHAR" property="sysuserinfo.culture" /> 13 <result column="finish_school_date" jdbcType="DATE" property="sysuserinfo.finishSchoolDate" /> 14 <result column="folk" jdbcType="VARCHAR" property="sysuserinfo.folk" /> 15 <result column="government" jdbcType="VARCHAR" property="sysuserinfo.government" /> 16 <result column="homepage" jdbcType="VARCHAR" property="sysuserinfo.homepage" /> 17 <result column="householder" jdbcType="VARCHAR" property="sysuserinfo.householder" /> 18 <result column="marriage" jdbcType="VARCHAR" property="sysuserinfo.marriage" /> 19 <result column="msn" jdbcType="VARCHAR" property="sysuserinfo.msn" /> 20 <result column="nativity_address" jdbcType="VARCHAR" property="sysuserinfo.nativityAddress" /> 21 <result column="qq" jdbcType="VARCHAR" property="sysuserinfo.qq" /> 22 <result column="speciality" jdbcType="VARCHAR" property="sysuserinfo.speciality" /> 23 <result column="description" jdbcType="VARCHAR" property="sysuserinfo.description" /> 24 <result column="version" jdbcType="BIGINT" property="sysuserinfo.version" /> 25 </resultMap > View Code

擴展方法來使用它

1 <select id="selectextends" parameterType="java.lang.String" resultMap="UserinfoBaseResultExtMap"> 2 select 3 u.id, username, password, name, sex, status, org_id, email, idcard, is_admin, sort, 4 mobile,address, post_code, height, weight, birthday, blood, culture, finish_school_date, 5 folk, government, homepage, householder, marriage, msn, nativity_address, qq, speciality, 6 description, version 7 from sys_user u LEFT OUTER JOIN sys_user_info ui ON u.id=ui.id 8 where username = #{username,jdbcType=VARCHAR} 9 </select> View Code

一對一映射

使用嵌套結果ResultMap實現一對一關系映射

在我們的域模型樣例中,每一個用戶都有一個與之關聯的用戶擴展信息。表sys_user有一個id列,是sys_user_info表的外鍵。我們定義一個resultMap中,sys_user_info的屬性使用了圓點記法被賦上了對應列的值。

1 <resultMap id="BaseResultExtMapext" type="com.goku.mybatis.model.sysUser"> 2 <id column="id" jdbcType="VARCHAR" property="id" /> 3 <result column="username" jdbcType="VARCHAR" property="username" /> 4 <result column="password" jdbcType="VARCHAR" property="password" /> 5 <result column="name" jdbcType="VARCHAR" property="name" /> 6 <result column="sex" jdbcType="VARCHAR" property="sex" /> 7 <result column="status" jdbcType="CHAR" property="status" /> 8 <result column="org_id" jdbcType="VARCHAR" property="orgId" /> 9 <result column="email" jdbcType="VARCHAR" property="email" /> 10 <result column="idcard" jdbcType="VARCHAR" property="idcard" /> 11 <result column="is_admin" jdbcType="VARCHAR" property="isAdmin" /> 12 <result column="sort" jdbcType="BIGINT" property="sort" /> 13 <result column="mobile" jdbcType="VARCHAR" property="mobile" /> 14 <result column="address" jdbcType="VARCHAR" property="sysuserinfo.address" /> 15 <result column="height" jdbcType="VARCHAR" property="sysuserinfo.height" /> 16 <result column="weight" jdbcType="VARCHAR" property="sysuserinfo.weight" /> 17 <result column="birthday" jdbcType="DATE" property="sysuserinfo.birthday" /> 18 <result column="blood" jdbcType="VARCHAR" property="sysuserinfo.blood" /> 19 <result column="culture" jdbcType="VARCHAR" property="sysuserinfo.culture" /> 20 <result column="finish_school_date" jdbcType="DATE" property="sysuserinfo.finishSchoolDate" /> 21 <result column="folk" jdbcType="VARCHAR" property="sysuserinfo.folk" /> 22 <result column="government" jdbcType="VARCHAR" property="sysuserinfo.government" /> 23 <result column="homepage" jdbcType="VARCHAR" property="sysuserinfo.homepage" /> 24 <result column="householder" jdbcType="VARCHAR" property="sysuserinfo.householder" /> 25 <result column="marriage" jdbcType="VARCHAR" property="sysuserinfo.marriage" /> 26 <result column="msn" jdbcType="VARCHAR" property="sysuserinfo.msn" /> 27 <result column="nativity_address" jdbcType="VARCHAR" property="sysuserinfo.nativityAddress" /> 28 <result column="qq" jdbcType="VARCHAR" property="sysuserinfo.qq" /> 29 <result column="speciality" jdbcType="VARCHAR" property="sysuserinfo.speciality" /> 30 <result column="description" jdbcType="VARCHAR" property="sysuserinfo.description" /> 31 <result column="version" jdbcType="BIGINT" property="sysuserinfo.version" /> 32 </resultMap > View Code

擴展方法來使用它

1 <select id="selectextends2" parameterType="java.lang.String" resultMap="BaseResultExtMapext"> 2 select 3 u.id, username, password, name, sex, status, org_id, email, idcard, is_admin, sort, 4 mobile,address, post_code, height, weight, birthday, blood, culture, finish_school_date, 5 folk, government, homepage, householder, marriage, msn, nativity_address, qq, speciality, 6 description, version 7 from sys_user u LEFT OUTER JOIN sys_user_info ui ON u.id=ui.id 8 where username = #{username,jdbcType=VARCHAR} 9 </select> View Code
使用嵌套Select語句實現一對一關系映射

上述樣例展示了一對一關聯映射的一種方法。然而,使用這種方式映射,如果sysuserinfo結果需要在其他的SELECT映射語句中映射成Address對象,我們需要為每一個語句重復這種映射關系。MyBatis提供了更好地實現一對一關聯映射的方法:嵌套結果ResultMap和嵌套select查詢語句。

嵌套結果ResultMap

1 <resultMap id="userinfoBaseResultMap" type="com.goku.mybatis.model.sysUserInfo"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 <id column="id" jdbcType="VARCHAR" property="id" /> 7 <result column="address" jdbcType="VARCHAR" property="address" /> 8 <result column="post_code" jdbcType="VARCHAR" property="postCode" /> 9 <result column="height" jdbcType="VARCHAR" property="height" /> 10 <result column="weight" jdbcType="VARCHAR" property="weight" /> 11 <result column="birthday" jdbcType="DATE" property="birthday" /> 12 <result column="blood" jdbcType="VARCHAR" property="blood" /> 13 <result column="culture" jdbcType="VARCHAR" property="culture" /> 14 <result column="finish_school_date" jdbcType="DATE" property="finishSchoolDate" /> 15 <result column="folk" jdbcType="VARCHAR" property="folk" /> 16 <result column="government" jdbcType="VARCHAR" property="government" /> 17 <result column="homepage" jdbcType="VARCHAR" property="homepage" /> 18 <result column="householder" jdbcType="VARCHAR" property="householder" /> 19 <result column="marriage" jdbcType="VARCHAR" property="marriage" /> 20 <result column="msn" jdbcType="VARCHAR" property="msn" /> 21 <result column="nativity_address" jdbcType="VARCHAR" property="nativityAddress" /> 22 <result column="qq" jdbcType="VARCHAR" property="qq" /> 23 <result column="speciality" jdbcType="VARCHAR" property="speciality" /> 24 <result column="description" jdbcType="VARCHAR" property="description" /> 25 <result column="version" jdbcType="BIGINT" property="version" /> 26 </resultMap> 27 <resultMap type="com.goku.mybatis.model.sysUser" id="BaseResultExtMapext3"> 28 <id column="id" jdbcType="VARCHAR" property="id" /> 29 <result column="username" jdbcType="VARCHAR" property="username" /> 30 <result column="password" jdbcType="VARCHAR" property="password" /> 31 <result column="name" jdbcType="VARCHAR" property="name" /> 32 <result column="sex" jdbcType="VARCHAR" property="sex" /> 33 <result column="status" jdbcType="CHAR" property="status" /> 34 <result column="org_id" jdbcType="VARCHAR" property="orgId" /> 35 <result column="email" jdbcType="VARCHAR" property="email" /> 36 <result column="idcard" jdbcType="VARCHAR" property="idcard" /> 37 <result column="is_admin" jdbcType="VARCHAR" property="isAdmin" /> 38 <result column="sort" jdbcType="BIGINT" property="sort" /> 39 <result column="mobile" jdbcType="VARCHAR" property="mobile" /> 40 <association property="sysuserinfo" resultMap="userinfoBaseResultMap" /> 41 </resultMap> View Code

相對應的擴展方法來使用它

1 <select id="selectextends5" parameterType="java.lang.String" resultMap="BaseResultExtMapext3"> 2 select 3 u.id, username, password, name, sex, status, org_id, email, idcard, is_admin, sort, 4 mobile,address, post_code, height, weight, birthday, blood, culture, finish_school_date, 5 folk, government, homepage, householder, marriage, msn, nativity_address, qq, speciality, 6 description, version 7 from sys_user u LEFT OUTER JOIN sys_user_info ui ON u.id=ui.id 8 where username = #{username,jdbcType=VARCHAR} 9 </select> View Code

元素<association>被用來導入“有一個”(has-one)類型的關聯。在上述的例子中,我們使用了<association>元素引用了另外的在同一個XML文件中定義的<resultMap>。也可以使用<association>定義內聯的resultMap。

1 <resultMap type="com.goku.mybatis.model.sysUser" id="BaseResultExtMapext4"> 2 <id column="id" jdbcType="VARCHAR" property="id" /> 3 <result column="username" jdbcType="VARCHAR" property="username" /> 4 <result column="password" jdbcType="VARCHAR" property="password" /> 5 <result column="name" jdbcType="VARCHAR" property="name" /> 6 <result column="sex" jdbcType="VARCHAR" property="sex" /> 7 <result column="status" jdbcType="CHAR" property="status" /> 8 <result column="org_id" jdbcType="VARCHAR" property="orgId" /> 9 <result column="email" jdbcType="VARCHAR" property="email" /> 10 <result column="idcard" jdbcType="VARCHAR" property="idcard" /> 11 <result column="is_admin" jdbcType="VARCHAR" property="isAdmin" /> 12 <result column="sort" jdbcType="BIGINT" property="sort" /> 13 <result column="mobile" jdbcType="VARCHAR" property="mobile" /> 14 <association property="sysuserinfo" javaType="com.goku.mybatis.model.sysUserInfo"> 15 <id column="id" jdbcType="VARCHAR" property="id" /> 16 <result column="address" jdbcType="VARCHAR" property="address" /> 17 <result column="post_code" jdbcType="VARCHAR" property="postCode" /> 18 <result column="height" jdbcType="VARCHAR" property="height" /> 19 <result column="weight" jdbcType="VARCHAR" property="weight" /> 20 <result column="birthday" jdbcType="DATE" property="birthday" /> 21 <result column="blood" jdbcType="VARCHAR" property="blood" /> 22 <result column="culture" jdbcType="VARCHAR" property="culture" /> 23 <result column="finish_school_date" jdbcType="DATE" property="finishSchoolDate" /> 24 <result column="folk" jdbcType="VARCHAR" property="folk" /> 25 <result column="government" jdbcType="VARCHAR" property="government" /> 26 <result column="homepage" jdbcType="VARCHAR" property="homepage" /> 27 <result column="householder" jdbcType="VARCHAR" property="householder" /> 28 <result column="marriage" jdbcType="VARCHAR" property="marriage" /> 29 <result column="msn" jdbcType="VARCHAR" property="msn" /> 30 <result column="nativity_address" jdbcType="VARCHAR" property="nativityAddress" /> 31 <result column="qq" jdbcType="VARCHAR" property="qq" /> 32 <result column="speciality" jdbcType="VARCHAR" property="speciality" /> 33 <result column="description" jdbcType="VARCHAR" property="description" /> 34 <result column="version" jdbcType="BIGINT" property="version" /> 35 </association> 36 </resultMap> View Code

嵌套select查詢語句

1 <resultMap type="com.goku.mybatis.model.sysUser" id="BaseResultExtMapext2"> 2 <id column="id" jdbcType="VARCHAR" property="id" /> 3 <result column="username" jdbcType="VARCHAR" property="username" /> 4 <result column="password" jdbcType="VARCHAR" property="password" /> 5 <result column="name" jdbcType="VARCHAR" property="name" /> 6 <result column="sex" jdbcType="VARCHAR" property="sex" /> 7 <result column="status" jdbcType="CHAR" property="status" /> 8 <result column="org_id" jdbcType="VARCHAR" property="orgId" /> 9 <result column="email" jdbcType="VARCHAR" property="email" /> 10 <result column="idcard" jdbcType="VARCHAR" property="idcard" /> 11 <result column="is_admin" jdbcType="VARCHAR" property="isAdmin" /> 12 <result column="sort" jdbcType="BIGINT" property="sort" /> 13 <result column="mobile" jdbcType="VARCHAR" property="mobile" /> 14 <association property="sysuserinfo" column="id" select="findsysUserInfoById"/> 15 </resultMap> View Code

相對應的擴展方法來使用它

1 <select id="findsysUserInfoById" parameterType="String" 2 resultMap="userinfoBaseResultMap"> 3 SELECT * FROM sys_user_info where id = #{id,jdbcType=VARCHAR} 4 </select> 5 <select id="selectextends4" parameterType="java.lang.String" resultMap="BaseResultExtMapext2"> 6 select * from sys_user where username = #{username,jdbcType=VARCHAR} 7 </select> View Code

一對多映射

我們創建一張機構表一個機構包含多個用戶。在sys_org中增加sys_user對象。

1 public List<sysUser> getSysuser() { 2 return sysuser; 3 } 4 5 public void setSysuser(List<sysUser> sysuser) { 6 this.sysuser = sysuser; 7 } 8 9 private List<sysUser> sysuser; View Code
使用內嵌結果ResultMap實現一對多映射
1 <resultMap id="OrgBaseResultMapext1" type="com.goku.mybatis.model.sysOrg"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 <id column="id" jdbcType="VARCHAR" property="id" /> 7 <result column="version" jdbcType="BIGINT" property="version" /> 8 <result column="level" jdbcType="BIGINT" property="level" /> 9 <result column="type" jdbcType="CHAR" property="type" /> 10 <result column="description" jdbcType="VARCHAR" property="description" /> 11 <result column="image" jdbcType="VARCHAR" property="image" /> 12 <result column="isparent" jdbcType="VARCHAR" property="isparent" /> 13 <result column="name" jdbcType="VARCHAR" property="name" /> 14 <result column="sort" jdbcType="BIGINT" property="sort" /> 15 <result column="url" jdbcType="VARCHAR" property="url" /> 16 <result column="parent_id" jdbcType="VARCHAR" property="parentId" /> 17 <result column="operate" jdbcType="VARCHAR" property="operate" /> 18 <collection property="sysuser" resultMap="userBaseResultMap" /> 19 </resultMap> View Code

相對應的擴展方法來使用它

1 <select id="selectextend1" parameterType="java.lang.String" resultMap="OrgBaseResultMapext1"> 2 select o.id, version, level, type, description, image, isparent, o.name, o.sort, url, parent_id, 3 u.id as uid, username, password, u.name, sex, status, org_id, email, idcard, is_admin, u.sort, 4 mobile from sys_org o LEFT OUTER JOIN sys_user u 5 on o.id=u.org_id where o.id = #{id,jdbcType=VARCHAR} 6 </select> View Code

級聯查詢的時候,主表和從表有一樣的字段名的時候,在mysql上命令查詢是沒問題的。但在mybatis中主從表需要為相同字段名設置別名。

<collection>元素被用來將多行結果映射成一個對象的一個集合。

使用嵌套Select語句實現一對多映射
1 <resultMap id="OrgBaseResultMapext2" type="com.goku.mybatis.model.sysOrg"> 2 <!-- 3 WARNING - @mbg.generated 4 This element is automatically generated by MyBatis Generator, do not modify. 5 --> 6 <id column="id" jdbcType="VARCHAR" property="id" /> 7 <result column="version" jdbcType="BIGINT" property="version" /> 8 <result column="level" jdbcType="BIGINT" property="level" /> 9 <result column="type" jdbcType="CHAR" property="type" /> 10 <result column="description" jdbcType="VARCHAR" property="description" /> 11 <result column="image" jdbcType="VARCHAR" property="image" /> 12 <result column="isparent" jdbcType="VARCHAR" property="isparent" /> 13 <result column="name" jdbcType="VARCHAR" property="name" /> 14 <result column="sort" jdbcType="BIGINT" property="sort" /> 15 <result column="url" jdbcType="VARCHAR" property="url" /> 16 <result column="parent_id" jdbcType="VARCHAR" property="parentId" /> 17 <result column="operate" jdbcType="VARCHAR" property="operate" /> 18 <collection property="sysuser" column="id" select="findsysUserByOrgId" /> 19 </resultMap> View Code

相對應的擴展方法來使用它

1 <select id="findsysUserByOrgId" parameterType="String" 2 resultMap="userBaseResultMap"> 3 SELECT * FROM sys_user where org_id = #{id,jdbcType=VARCHAR} 4 </select> 5 <select id="selectextend2" parameterType="java.lang.String" resultMap="OrgBaseResultMapext2"> 6 select * from sys_org where id = #{id,jdbcType=VARCHAR} 7 </select> View Code

GITHUB

github : ?https://github.com/nbfujx/learn-java-demo/tree/master/Goku.MybatisDemo.XML

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Mybatis基于XML配置SQL映射器(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。