在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>