1. 程式人生 > >mybatis工作總結001_mybatis中_parameter使用和常用sql

mybatis工作總結001_mybatis中_parameter使用和常用sql

1. 簡單資料型別,此時#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType=INTEGER},如果需要if test則一定
    使用<if test="_parameter != null">,此處一定使用_parameter != null而不是id != null
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Java.lang.Integer" >
 select 
 <include refid="Base_Column_List" />
 from base.tb_user
<if test="_parameter != null">
 where id = #{id,jdbcType=INTEGER}
</if>
</select>
 2. 一個物件資料型別,此時#{name,jdbcType=CHAR},#{sex,jdbcType=CHAR}中的name和sex一定要使用user物件的屬性名

測試user物件<if test="_parameter != null">,測試user物件屬性<if test="name != null">或者<if test="#{name} != null">
int insert(User user);
<insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into tb_user (name, sex) values (#{name,jdbcType=CHAR}, #{sex,jdbcType=CHAR})
 3.二個物件資料型別
List<User> select(User user,Page page),此時if test一定要<if test='_parameter.get("0").name != null'>(通過parameter.get(0)
得到第一個引數即user);where語句where name = #{0.name,jdbcType=CHAR}(通過0.name確保第一個引數user的name屬性值)

不用0,1也可以取名List<User> select(@param(user)User user,@param(page)Page page)
 4. 集合型別,此時collection="list"會預設找到引數的那個集合idlist(collection="list"這是預設寫法,入參為陣列Integer[] idarr,則用collection="array")
User selectUserInList(List<Interger> idlist);
<select id="selectUserInList" resultType="User">
SELECT * FROM USER  WHERE ID in
 <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
 </foreach>
</select>
 5.物件型別中的集合屬性,此時collection="oredCriteria"會找到入參example這個非集合物件的oredCriteria屬性,此屬性是一個集合
List<User> selectByExample(UserExample example);
<where>
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
 6.map型別(分頁查詢教師資訊)
public List<Teacher> findTeacherByPage(Map<String, Object> map); 
Map<String, Object> params = new HashMap<String, Object>(); 
//以name欄位升序排序,params.put("sort", "name"); params.put("dir", "asc");
//查詢結果從第0條開始,查詢2條記錄 params.put("start", 0);  params.put("limit", 2);  
//查詢職稱為教授或副教授的教師  params.put("title", "%教授"); 
此時入參map的key相當於一個object的屬性名,value相當於屬性值
<select id="findTeacherByPage"resultMap="supervisorResultMap" parameterType="java.util.Map">
select * from teacher where title like #{title}           
        order by ${sort} ${dir} limit #{start},#{limit} 
</select>

 7.批量插入
<insert id="addRoleModule" parameterType="java.util.List">
INSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID)
<foreach collection="list" item="item" index="index" separator=" UNION ALL ">  
SELECT #{item.roleId}, #{item.moduleId} FROM DUAL
</foreach>  
</insert>
  8.MyBatis+MySQL 返回插入的主鍵ID
在mapper中指定keyProperty屬性,示例如下:
我們在insert中指定了keyProperty="userId"和useGeneratedKeys="true",其中userId代表插入的User物件的主鍵屬性。
System.out.println("插入前主鍵為:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入前主鍵為:"+user.getUserId());  
    <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">  
 insert into user(userName,password,comment)  
 values(#{userName},#{password},#{comment})  
    </insert>