Mybatis08-特殊的SQL执行
1、模糊查询
1.1、mapper接口中的方法
/**
* 根据用户名模糊查询用户信息
*/
List<User> getUserByLike(@Param("username") String username);
1.2、mapper接口的映射文件
<!-- List<User> getUserByLike(@Param("username") String username); -->
<select id="getUserByLike" resultType="User">
<!-- 错误的 -->
<!-- select * from mybatis.user where username like '%#{username}%' -->
<!-- 正确的 -->
<!--select * from mybatis.user where username like '%${username}%'-->
<!--select * from mybatis.user where username like concat('%',#{username},'%')-->
select * from mybatis.user where username like "%"#{username}"%"
</select>
1.3、测试方法及其结果
- 测试方法
@Test
public void testGetUserByLike() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
List<User> list = mapper.getUserByLike("sw");
System.out.println(list);
}
- 结果
2、批量删除
2.1、mapper接口中的方法
/**
* 批量删除
*/
int deleteMore(@Param("ids") String ids);
2.2、mapper接口的映射文件
<!-- int deleteMore(@Param("ids") String ids); -->
<delete id="deleteMore">
<!--
Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '1,2,3'
delete from mybatis.user where id in (#{ids})
#{会自动的加单引号}
-->
delete from mybatis.user where id in (${ids})
</delete>
2.3、测试方法及其结果
- 测试方法
@Test
public void testDeleteMore() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
int result = mapper.deleteMore("1,2,3,4");
System.out.println(result);
}
- 结果
3、动态设置表名
3.1、mapper接口中的方法
/**
* 查询指定表中的数据
*/
List<User> getUserByTableName(@Param("tableName") String tableName);
3.2、mapper接口的映射文件
<!-- List<User> getUserByTableName(@Param("tableName") String tableName); -->
<select id="getUserByTableName" resultType="User">
<!--
报错:#{}加上了单引号
select * from #{tableName}
-->
select * from ${tableName}
</select>
3.3、测试方法及其结果
- 测试方法
@Test
public void testGetUserByTableName() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
List<User> list = mapper.getUserByTableName("user");
System.out.println(list);
}
- 结果
4、添加功能获取自增的主键
4.1、mapper接口中的方法
/**
* 添加用户信息
*/
void insertUser(User user);
4.2、mapper接口的映射文件
<!--
void insertUser(User user);
useGeneratedKeys:设置当前标签中的sql使用了自增的主键
keyProperty:将自增的主键的值赋值给传输到映射文件中参数的某个属性
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into mybatis.user values (null, #{username}, #{password}, #{age}, #{sex})
</insert>
4.3、测试方法及其结果
- 测试方法
@Test
public void testInsertUser() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
User user = new User(null, "swyg", "123", 12, "女");
mapper.insertUser(user);
System.out.println(user);
}
- 结果
5、注意
特殊的SQL语句执行,大部分都是由于#{}本质上是占位符,而执行过程中会加上单引号