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物件的屬性名
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>