模糊查询
在进行模糊查询的时候,如果使用 #{}
,那么得到的 sql 语句就会拼接错误。比如:
select * from t_user where username like '%#{username}%'
执行 sql 语句转换后会变成:
select * from t_user where username like '%?%'
也就是说使用 #{}
之后,它被当成匹配的字符串的一部分了。也就是说模糊查询不要使用 #{}
,#{}
会自动添加上单引号。
那么怎么做模糊查询才对呢?
-
使用
${}
,比如:select * from t_user where username like '%${username}%'
-
使用拼接函数 +
#{}
<select id="getUserByLike" resultType="User"> select * from t_user where username like concat('%', #{username}, '%') </select>
但是这里两个百分号之间的单引号是怎么取消的没听懂
批量删除
由于 #{}
会自动添加上单引号,所以无法转换成正确的 sql 语句,需要使用 ${}
才可以正确使用
<!--int deleteMore(@Param("ids") String ids);-->
<delete id="deleteMore">
delete
from t_user
where id in (${ids})
</delete>
动态设置表名
使用 @Param()
指定表名,用 ${}
获取,因为这个不会添加单引号
<!--List<User> getAllUser(@Param("tableName") String tableName);-->
<select id="getAllUser" resultType="User">
select *
from ${tableName}
</select>
添加功能获取自增的主键
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
- 添加班级信息
- 获取新添加的班级的 id
- 为班级分配学生,即将某学的班级 id 修改为新添加的班级的 id
<!--int insertUser(User user);-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user
values (null, #{username}, #{password}, #{age}, #{sex}, #{email})
</insert>
注意,我们在创建对象的时候并没有提供 id,当进行添加操作之后,就会将自增得到的 id 添加进 user 对象中。
- useGeneratedKeys:设置当前标签中的 sql 语句使用了自增的主键
- keyProperty:将自增的主键值赋给「参数的提供者」,这里的提供者是 User 类的实例
增删改具有固定的返回值,即改变的行数,所以并不能通过返回值的方式得到主键。只能将自增的主键作为对象的某一个属性值
@Test
public void testAdd() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
User user = new User(null, "nihao", "123456", 66, "男", "[email protected]");
int i = mapper.insertUser(user);
System.out.println(user.getId());
}
---
6
标签:username,MyBatis9,添加,user,sql,硅谷,where,id
From: https://www.cnblogs.com/ShaunY/p/17237809.html