在MyBatis的select、insert、update、delete這些元素中都提到了parameterType這個屬性。MyBatis現在可以使用的parameterType有基本數據類型和JAVA復雜數據類型
基本數據類型:包含int,String,Date等。基本數據類型作為傳參,只能傳入一個。通過#{參數名} 即可獲取傳入的值復雜數據類型:包含JAVA實體類、Map。通過#{屬性名}或 #{map的KeyName}即可獲取傳入的值
基本數據類型參數示例:
根據班級ID查詢教師列表
xml文件
[html] view plaincopy
<select id="selectTeacher" parameterType="int" resultType="com.myapp.domain.Teacher"> select * from Teacher where c_id=#{id}
</select>[java] view plaincopy
List<Teacher> tList = teacherMapper.selectTeacher(2); for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString()); }
JAVA實體類型參數示例:[html] view plaincopy
<select id="selectTeacher" parameterType="com.myapp.domain.Teacher" resultType="com.myapp.domain.Teacher"> select * from Teacher where c_id=#{id}
</select> [java] view plaincopy
java代碼
Teacher queryTeacher=new Teacher(); queryTeacher.setId(2);
List<Teacher> tList = teacherMapper.selectTeacher(queryTeacher); for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString()); }
Map參數示例:[html] view plaincopy
<select id="selectTeacher" parameterType="Map" resultType="com.myapp.domain.Teacher"> select * from Teacher where c_id=#{id} and sex=#{sex}
</select>
[java] view plaincopy
java代碼
Map<String,String> map=new HasMap<String,String>(); map.put("id","2");
map.put("sex","男"); List<Teacher> tList = teacherMapper.selectTeacher(map);
for (Teacher entityTemp : tList) { System.out.println(entityTemp.toString()); }[java] view plaincopy
public List<Teacher> selectTeacher(@Param(value="id") String id,@Param(value="sex") String sex);[html] view plaincopy
<select id="selectTeacher" resultType="com.myapp.domain.Teacher"> select * from Teacher where c_id=#{id} and sex=#{sex}
</select>[java] view plaincopy
List<Teacher> tList = teacherMapper.selectTeacher("2","男"); for (Teacher entityTemp : tList) {
System.out.println(entityTemp.toString());
1. MyBatis的傳入參數parameterType類型分兩種
1. 1. 基本數據類型:int,string,long,Date;
1. 2. 復雜數據類型:類和Map
注:不同版本的MyBatis對基本類型傳遞過來的參數名稱不能識別,要使用_parameter來代替。
- <select id="getWinLogByEventId" parameterType="java.lang.Long" resultMap="BaseResultMap">
- select <include refid="Base_Column_List"/> from win_log where eventId = #{_parameter,jdbcType=BIGINT}
- </select>
2. 如何獲取參數中的值:
2.1 基本數據類型:#{參數} 獲取參數中的值
2.2 復雜數據類型:#{屬性名} ,map中則是#{key}
3.案例:
3.1 基本數據類型案例
- <sql id="Base_Column_List" >
- id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type
- </sql>
- <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
- select
- <include refid="Base_Column_List" />
- from common_car_make
- where id = #{id,jdbcType=BIGINT}
- </select>
3.2 復雜類型--map類型
- <select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map">
- select
- <include refid="Base_Column_List" />
- from common_car_make cm
- where 1=1
- <if test="id != null">
- and cm.id = #{id,jdbcType=DECIMAL}
- </if>
- <if test="carDeptName != null">
- and cm.car_dept_name = #{carDeptName,jdbcType=VARCHAR}
- </if>
- <if test="carMakerName != null">
- and cm.car_maker_name = #{carMakerName,jdbcType=VARCHAR}
- </if>
- <if test="hotType != null" >
- and cm.hot_type = #{hotType,jdbcType=BIGINT}
- </if>
- ORDER BY cm.id
- </select>
3.3 復雜類型--類類型
- <update id="updateByPrimaryKeySelective" parameterType="com.epeit.api.model.CommonCarMake" >
- update common_car_make
- <set >
- <if test="carDeptName != null" >
- car_dept_name = #{carDeptName,jdbcType=VARCHAR},
- </if>
- <if test="carMakerName != null" >
- car_maker_name = #{carMakerName,jdbcType=VARCHAR},
- </if>
- <if test="icon != null" >
- icon = #{icon,jdbcType=VARCHAR},
- </if>
- <if test="carMakerPy != null" >
- car_maker_py = #{carMakerPy,jdbcType=VARCHAR},
- </if>
- <if test="hotType != null" >
- hot_type = #{hotType,jdbcType=BIGINT},
- </if>
- </set>
- where id = #{id,jdbcType=BIGINT}
- </update>
3.4 復雜類型--map中包含數組的情況
- <select id="selectProOrderByOrderId" resultType="com.epeit.api.model.ProOrder" parameterType="java.util.HashMap" >
- select sum(pro_order_num) proOrderNum,product_id productId,promotion_id promotionId
- from pro_order
- where 1=1
- <if test="orderIds != null">
- and
- <foreach collection="orderIds" item="item" open="order_id IN(" separator="," close=")">
- #{item,jdbcType=BIGINT}
- </foreach>
- </if>
- GROUP BY product_id,promotion_id
- </select>