一:多条件查询
传递一个参数的时候,是可以去直接写的(但是建议命名的时候要做到见名知意),但是传递多个参数的时候,怎么去区分呢?
1:在userMapper.xml 里面 占位符里面写的是: arg0, arg1... (下标是从0开始的)或者是param1、param2(下标是从1开始的)。
<!--多条件查询 方式一-->
<select id="queryUserByIdAndName1" resultType="User">
select * from user where id = #{arg0} and username = #{arg1}; /*当然也可以写为 param1 注意它是以1开始的*/
</select>
2:通过注解的形式
在接口里面用@Param的注解
/**
* 根据id和姓名去查询用户
* @return
*/
List<User> queryUserByIdAndName2(@Param("id") int id, @Param("username") String username);
占位符里面写的是你注解里面的名字。
<!--注解的形式去查询-->
<select id="queryUserByIdAndName2" resultType="User">
select * from user where id = #{id} and username = #{username}; /*当然也可以写为 param1 注意它是以1开始的*/
</select>
3:传递对象的形式(最常用)
/**
* 用的是对象
* @param user
* @return
*/
List<User>queryUserByIdAndName3(User user);
在xml里面占位符写的是 对象里面的属性,注意属性的名字不能错,要严格的保持一致。
<!--传的是对象 找到的是get方法
封装的是set方法
注意里面写的是 属性
-->
<select id="queryUserByIdAndName3" resultType="User" parameterType="com.findyou.entity.User">
select * from user where id = #{id} and username = #{username};
</select>
二:模糊查询
模糊查询的sql语句如下:
select * from user where username like '%FindYou%'
怎么去拼接这个 %% 和 ' ' 呢?
方式一:
测试类里面的方法:
List<User> users = mapper.findByUsername1("%1%");
userMapper.xml里面的方法:
#{} 是mybatis的占位符,是会去自动拼接 ' '的。
<select id="findByUsername1" resultType="user" parameterType="string">
select * from user where username like #{username};
</select>
方式二:
测试类里面的方法:
List<User> users = mapper.findByUsername2("'%1%'");
userMapper.xml里面的方法:
用的是${} 老师说里面只能去写 value, 但是写其他也是可以的。${} 这个里面的东西是原样拼接的,不回去自动给你拼接。
<!--
${} 是原样拼接
老师说是只能去写 value的
-->
<select id="findByUsername2" resultType="user" parameterType="string">
select * from user where username like ${username};
</select>