基于MyBatis的parameterType傳入?yún)?shù)類型
MyBatis的parameterType傳入?yún)?shù)類型
在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType為輸入?yún)?shù),在配置的時(shí)候,配置相應(yīng)的輸入?yún)?shù)類型即可。parameterType有基本數(shù)據(jù)類型和復(fù)雜的數(shù)據(jù)類型配置。
1. MyBatis的傳入?yún)?shù)parameterType類型分兩種
1. 1. 基本數(shù)據(jù)類型:int、string、long、Date;
1. 2. 復(fù)雜數(shù)據(jù)類型:類(JavaBean、Integer等)和Map
2. 如何獲取參數(shù)中的值
2.1 基本數(shù)據(jù)類型:#{參數(shù)} 獲取參數(shù)中的值
2.2 復(fù)雜數(shù)據(jù)類型:#{屬性名} ,map中則是#{key}
3.案例
3.1 傳入Long型
mapper接口代碼:
public User findUserById(Long id);
xml代碼:
<select id="findUserById" parameterType="java.lang.Long" resultType="User"> select * from user where id = #{id}; </select>
3.2 傳入List
mapper接口代碼:
public List<User> findUserListByIdList(List<Long> idList);
xml代碼:
<select id="findUserListByIdList" parameterType="java.util.ArrayList" resultType="User"> select * from user user <where> user.ID in ( <foreach collection="list" item="id" index="index" separator=","> #{id} </foreach> ) </where> </select>
在使用foreach的時(shí)候最關(guān)鍵的也是最容易出錯(cuò)的就是collection屬性。
該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:
1. 如果傳入的是單參數(shù)且參數(shù)類型是一個(gè)List的時(shí)候,collection屬性值為list
2. 如果傳入的是單參數(shù)且參數(shù)類型是一個(gè)array數(shù)組的時(shí)候,collection的屬性值為array
3. 如果傳入的參數(shù)是多個(gè)的時(shí)候,我們就需要把它們封裝成一個(gè)Map了,當(dāng)然單參數(shù)也可
3.3 傳入數(shù)組:
mapper接口代碼:
public List<User> findUserListByIdList(int[] ids);
xml代碼:
<select id="findUserListByIdList" parameterType="java.util.HashList" resultType="User"> select * from user user <where> user.ID in ( <foreach collection="array" item="id" index="index" separator=","> #{id} </foreach> ) </where> </select>
3.4 傳入map
mapper接口代碼:
public boolean exists(Map<String, Object> map);
xml代碼:
<select id="exists" parameterType="java.util.HashMap" resultType="java.lang.Integer"> SELECT COUNT(*) FROM USER user <where> <if test="code != null"> and user.CODE = #[code] </if> <if test="id != null"> and user.ID = #{id} </if> <if test="idList !=null "> and user.ID in ( <foreach collection="idList" item="id" index="index" separator=","> #{id} </foreach> ) </if> </where> </select>
MAP中有l(wèi)ist或array時(shí),foreach中的collection必須是具體list或array的變量名。
比如這里MAP含有一個(gè)名為idList的list,所以MAP中用idList取值,這點(diǎn)和單獨(dú)傳list或array時(shí)不太一樣。
3.5傳入JAVA對(duì)象
mapper接口代碼:
public int findUserList(User user);
xml代碼:
<select id="findUserList" parameterType="User" resultType="java.lang.Integer"> SELECT COUNT(*) FROM USER user <where> <if test="code != null"> and user.CODE = #[code] </if> <if test="id != null"> and user.ID = #{id} </if> <if test="idList !=null "> and user.ID in ( <foreach collection="idList" item="id" index="index" separator=","> #{id} </foreach> ) </if> </where> </select>
JAVA對(duì)象中有l(wèi)ist或array時(shí),foreach中的collection必須是具體list或array的變量名。
比如這里User含有一個(gè)名為idList的list,所以User中用idList取值,這點(diǎn)和單獨(dú)傳list或array時(shí)不太一樣。
3.6注解@Param
例子1:
注解單一屬性;這個(gè)類似于將參數(shù)重命名了一次
mapper接口代碼:
List<User> selectUserByTime(@Param(value="startdate")String startDate);
xml代碼:
<select id="selectUserByTime" resultType="User" parameterType="java.lang.String"> select * from t_user where create_time >= to_date(#{startdate,jdbcType=VARCHAR},'YYYY-MM-DD') </select>
例子2:
注解javaBean
mapper接口代碼:
List<User> selectUserByTime(@Param(value="dateVO")DateVO dateVO);
xml代碼:
<select id="selectUserByTime" resultType="User" parameterType="DateVO"> select * from t_user where create_time >= to_date(#{dateVO.startDate,jdbcType=VARCHAR},'YYYY-MM-DD') and create_time < to_date(#{dateVO.endDate,jdbcType=VARCHAR},'YYYY-MM-DD') </select>
mybatis 之parameterType="Long"
<select id="selectByPrimaryKeyByArrayMemberId" resultType="memberModel" parameterType="Long"> select <include refid="Base_Column_List"/> from member m where m.IS_DELETE = 'N' and m.member_id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item,jdbcType=DECIMAL} </foreach> </select>
public ServiceMessage<List<Member>> selectByPrimaryKeyByArrayMemberId( List<Long> memberIds) { try { if (memberIds == null || memberIds.size()==0){ return super.returnParamsError("參數(shù)為空!"); } List<Member> list = memberMapper .selectByPrimaryKeyByArrayMemberId(memberIds); return super.returnCorrectResult(list); } catch (Throwable e) { return super.returnException(e); } } public ServiceMessage<List<Member>> selectByPrimaryKeyByArrayMemberId(List<Long> memberIds); List<Member> selectByPrimaryKeyByArrayMemberId(List<Long> memberIds); @Test public void testSelectByPrimaryKeyByArrayMemberId() { InternalMemberService internalMemberService = J1SOAHessianHelper.getService(url,InternalMemberService.class); List<Long> memberIds = new ArrayList<Long>(); memberIds.add(1l); memberIds.add(2l); memberIds.add(1855l); ServiceMessage<List<Member>> sm = internalMemberService.selectByPrimaryKeyByArrayMemberId(memberIds); System.out.println(sm.getResult()); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)微信掃碼登入的實(shí)例代碼
這篇文章主要介紹了java實(shí)現(xiàn)微信掃碼登入功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問(wèn)題
這篇文章主要介紹了Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04詳解Spring Cloud Gateway修改請(qǐng)求和響應(yīng)body的內(nèi)容
這篇文章主要介紹了Spring Cloud Gateway修改請(qǐng)求和響應(yīng)body的內(nèi)容的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09