1.模糊查询
模糊查询,查询的结果条数不固定,不确定查询出来的数据有几条,方法返回值用list集合获取。
#{}对应的是占位符赋值,解析的时候解析为一个?号,
?号是在单引号里面是字符串的一部分,不会当做占位符解析。
①接口方法
// 通过用户名模糊查询用户信息
List<User> getUserByLike(@Param("mohu") String mohu);
②映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.SpecialSQLMapper">
<!-- List<User> getUserByLike(@Param("mohu") String mohu);-->
<select id="getUserByLike" resultType="User">
<!--第一种方式用${}-->
<!-- select * from t_user where username like '%${mohu}%' -->
<!--第二中方式用函数拼接-->
<!-- select * from t_user where username like concat('%',#{mohu},'%') -->
<!-- 第三种方式用#{}加双引号 -->
select * from t_user where username like "%"#{mohu}"%"
</select>
</mapper>
③测试类
public class SpecialSQLMapperTest {
@Test
public void testGetUserByLike(){
SqlSession session = SqlSessionUtil.getSession();
SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
List<User> a = mapper.getUserByLike("a");
for (User user:a){
System.out.println(user);
}
}
2. 批量删除
①接口方法
//批量删除
void deleteMoreUser(@Param("ids") String ids);
②映射文件
<!-- void deleteMoreUser(@Param("ids") String ids);-->
<delete id="deleteMoreUser">
delete from t_user where id in (${ids})
<!-- 拼接后 delete from t_user where id in (9,10)-->
</delete>
③测试类
@Test
public void testDeleteMoreUser(){
SqlSession session = SqlSessionUtil.getSession();
SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
mapper.deleteMoreUser("9,10");
}
#{}最终会被解析加上单引号,用的占位符赋值,自动加单引号。
3. 动态设置表名
①接口方法
// 动态设置表名,查询当前用户信息
List<User> getUserList(@Param("tableName") String tableName);
②映射文件
<!-- List<User> getUserList(@Param("tableName") String tableName);-->
<select id="getUserList" resultType="User">
select * from ${tableName}
</select>
③测试类
@Test
public void testGetUserList(){
SqlSession session = SqlSessionUtil.getSession();
SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
List<User> t_user = mapper.getUserList("t_user");
for (User user:t_user){
System.out.println(user);
}
}
4. 添加功能获取自增的主键 常用
场景模拟:
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
1、添加班级信息
2、获取新添加的班级的id
3、为班级分配学生,即将某学的班级id修改为新添加的班级的id
添加班级信息的同时来为班级分配学生,其实就是要为学生设置所对应的班级id
useGeneratedKeys:表示当前添加功能使用了自增的主键
keyProperty:将添加的数据自增主键为实体类类型的参数的属性赋值
为什么不作为方法的返回值,因为增删改的返回值固定的,
受影响的行数,只能把它放到当前传输过来的参数的某一个属性中。
①接口方法
// 添加用户信息并获得自增的主键
void insertUser(User user);
②映射文件
<!-- void insertUser(User user); -->
<!--
useGeneratedKeys:表示当前添加功能使用了自增的主键
keyProperty:将添加的数据自增主键为实体类类型的参数的属性赋值
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})
</insert>
③测试类
@Test
public void testInserUser(){
SqlSession session = SqlSessionUtil.getSession();
SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
User user=new User(null,"xiaoming","12345678",23,"男","123456@qq.com");
mapper.insertUser(user);
System.out.println(user);
/**
* User{id=20, username='xiaoming', password='12345678', age=23, gender='男', email='123456@qq.com'}
*/
}