mybatis动态sql
一、在学习mybatis中,有很重要的一部分是动态sql,动态sql需要借助mybatis中的标签,这里主要讲解mybatis中常用的标签。
二、selectKey
插入数据后返回当前数据的id
IUserDao接口中的方法
void add(User user);
IUserDao.xml代码
<insert id="add" parameterType="User">
INSERT INTO USER ( id,username,address,sex) VALUES (#{id},#{username},#{address},#{sex})
<selectKey resultType="int" keyProperty="id" order="AFTER">
SELECT last_insert_id()
</selectKey>
</insert>
测试代码
@Test public void add() { User user = new User(); user.setUsername("李白"); user.setSex("男"); user.setAddress("北京"); userDao.add(user); System.out.println(user.getId()); }
最终返回插入数据的id值给user.getId();
三、where
用于过滤条件,和if标签组合使用,第一个if标签可以不写and,后边的if标签必须写and
接口中的方法
List<User> queryUserByUsernameAndSex(User user);
xml代码
<!--where标签--> <select id="queryUserByUsernameAndSex" resultType="User"> SELECT * FROM user <where> <if test="username !=null and username !='' "> username= #{username} </if> <if test="sex !=null and sex !='' "> and sex= #{sex} </if> </where> </select>
测试类
@Test
public void queryUserByUsernameAndSex(){
User user = new User();
user.setUsername("zz");
user.setSex("1");
List<User> users = userDao.queryUserByUsernameAndSex(user);
users.forEach(u->{
System.out.println(u);
});
}
查询结果:
User{id=2, username='zz', birthday=Thu Mar 18 00:00:00 CST 2021, sex='1', address='左子'}
User{id=7, username='zz', birthday=null, sex='1', address='左子dsds在'}
四、set标签
IUserDao接口中代码,除最后一个if标签语句中不加逗号,其他语句都加逗号
void updateUserSelective(User user);
IUserDao.xml中代码
<!--set标签--> <update id="updateUserSelective" parameterType="User"> UPDATE user <set> <if test="username !=null and username !='' "> username = #{username} , </if> <if test="password !=null and password !='' "> password = #{password} , </if> <if test="sex !=null and sex !='' "> sex = #{sex} </if> </set> <where> <if test="id >0"> id=#{id} </if> </where> </update>
测试类中代码
@Test public void updateUserSelective(){ User user = new User(); user.setUsername("qq"); user.setPassword("333"); user.setId(12); userDao.updateUserSelective(user); }
五、foreach标签
IUserDaoj接口中代码
List<User> queryUserByIds(List list);
IUserDao.xml中代码
<!--foreach标签--> <select id="queryUserByIds" resultType="User"> SELECT * FROM user <where> <foreach collection="list" item="id" open=" id in (" close=")" separator=","> #{id} </foreach> </where> </select>
测试代码
@Test public void queryUserByIds() { ArrayList<Object> objects = new ArrayList<>(); objects.add(1); objects.add(2); objects.add(3); List<User> users = userDao.queryUserByIds(objects); users.forEach(user -> { System.out.println(user); }); }
六、include标签
IUserDao.xml代码
<!--sql标签配合include标签使用--> <sql id="selectUser"> SELECT * FROM user </sql> <!--foreach标签--> <select id="queryUserByIds" resultType="User"> <include refid="selectUser"/> <where> <foreach collection="list" item="id" open=" id in (" close=")" separator=","> #{id} </foreach> </where> </select>

浙公网安备 33010602011771号