1.select查詢
select查詢也可以使用之前的機制在配置文件中直接編寫sql,但是select語句的where字句中需要拼接哪些查詢字段是根據
傳入的值決定的,此時可以通過Mybatis提供的標籤實現判斷,動態的去拼接select語句,而不是按照每次傳入的條件參數
不同而去分情況寫一堆的sql
在拼接的過程中Mybatis標籤會根據傳入值是否爲空,自動去掉多餘的and
<select id="selc01" resultType="cn.cn.wyy.domain.User">
select * from user
<where>
<if test="id!=0">id = #{id}</if>
<if test="name!=null">and name = #{name}</if>
<if test="age!=0">and age = #{age}</if>
</where>
</select>
測試類
@Test
public void test02(){
//User user = new User(3,"ccc",25);
//User user = new User(3,null,25);
//User user = new User(0,null,25);
User user = new User();
List<User> list = session.selectList("cn.cn.wyy.mapper.UserMapper.selc01",user);
System.out.println(list);
}
2.insert插入
insert插入也可以使用之前的機制在配置文件中直接編寫sql,但是insert語句的參數和值的列表,需要拼接哪些字段是根據傳入的值決定,此時可以通過Mybatis提供的標籤來實現判斷,動態的拼接insert語句
在拼接的過程中Mybatis標籤會根據傳入值是否爲空,自動去掉多餘的逗號
<insert id="insert01">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
id,
<if test="name!=null">name,</if>
<if test="age!=0">age,</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
null,
<if test="name!=null">#{name},</if>
<if test="age!=0">#{age},</if>
</trim>
</insert>
測試代碼
@Test
public void test03(){
//User user = new User(0,"xxx",99);
//User user = new User(0,"zzz",0);
User user = new User(0,null,0);
session.insert("cn.cn.tedu.mapper.UserMapper.insert01",user);
session.commit();
}
3.update修改
update修改可以使用原始的機制在配置文件中直接編寫sql,但是update語句的set語句中,需要拼接哪些字段。是根據傳入的值決定的,此時通過Mybatis提供的標籤來實現判斷,動態的拼接update語句。
update set有多個字段, 後面的逗號都需要添加,Mybatis的set標籤會自動去除
如果age設置爲0,那麼下面的語句就會默認age傳入的值爲空,從而去掉該字段,不用在拼接它。但是非要傳入age的值爲0,因爲語句條件都是自己寫的,可以將age類型由int 換爲Integer那麼傳入爲null才無效,可以傳入0,也可以不用動態標籤,單獨寫一個不帶標籤的sql
<update id="update01">
update user
<set>
<if test="name!=null">name=#{name},</if>
<if test="age!=0">age=#{age},</if>
</set>
where id = #{id};
</update>
@Test
public void test01() throws IOException {
//3.調用Sql
//User user = new User(3,"xxx",88);
//User user = new User(3,"ccc",0);
User user = new User(3,null,25);
session.update("cn.cn.wyy.mapper.UserMapper.update01",user);
session.commit();
}
4.deleta刪除
delete刪除可以使用原始的機制在配置文件中直接編寫sql,但是delete語句的刪除條件,需要拼接哪些字段。是根據傳入的值決定的,此時通過Mybatis提供的標籤來實現判斷,動態的拼接delete語句。
<delete id="del02">
delete from user where id in
<foreach collection="list" item="i" open="(" close=")" separator=",">
#{i}
</foreach>
</delete>
<delete id="del01">
delete from user
<where>
<if test="id!=0">id = #{id}</if>
<if test="name!=null">and name = #{name}</if>
<if test="age!=0">and age = #{age}</if>
</where>
</delete>
/**
* 刪除
*/
@Test
public void test05(){
List list = Arrays.asList(2,3,5);
session.delete("cn.cn.wyy.mapper.UserMapper.del02",list);
session.commit();
}
/**
* 刪除
*/
@Test
public void test04(){
//User user = new User(12,null,0);
//User user = new User(11,"zzz",0);
User user = new User(10,"xxx",99);
session.delete("cn.cn.wyy.mapper.UserMapper.del01",user);
session.commit();
}