Mybatis中特殊SQL的执行

网友投稿 1230 2022-10-13

Mybatis中特殊SQL的执行

Mybatis中特殊SQL的执行

目录1.模糊查询2.批量删除3.动态设置表名4. 添加功能获取自增的主键

1.模糊查询

大家应该还记得sql语句的模糊查询怎么写吧,那就是使用关键字like,并且有相应的通配符一起使用,%表示多个字符,_表示一个字符,比如说现在有一张表user,查询name中第一个字母是l的人select * from user where name like ‘_l’;如果是查询name中有 l 的人select * from user where name like ‘%l%’;

模糊查询不可以使用#{},接下来通过案例来说明一下,提供一个mapper接口用来测试,里面定义了操作数据库的各种方法

/**

* 根据用户名模糊查询用户信息

*/

List getUserByLike(@Param("username") String username);

在映射文件中写上我们要进行执行的sql语句

resultType="com.atguigu.mybatis.pojo.User">

select *

from t_user

where username like '%#{username}%';

然后进行测试

那要怎么解决上述问题呢,有两种方式可以解决。

解决方法1

SQL语句中的#{}换成${}

resultType="com.atguigu.mybatis.pojo.User">

select *

from t_user

where username like '%${username}%';

解决方法2

使用字符串拼接

select *

from t_user

where username like concat('%',#{username},'%');

解决方法3(建议使用这种方式)

select *

from t_user

where username like "%"#{username}"%";

2.批量删除

delete from 表名 where 筛选条件

int delete(@Param("ids") String ids);

在映射文件中写下面的代码

delete from t_user where id in(#{ids});

那我们要怎么解决呢?

可以使用${}

delete from t_user where id in(#{ids});

总结: 在这里批量删除不能使用#{},因为它会自动加上’ '进行字符串拼接 ,而我们的数据库中,字段id的属性是int类型的,由于#{}会自动加上单引号所以不可以,是不正确的,但是如果id字段的属性是varchar,我们就得用#{],而不是${}

3.动态设置表名

也就是说我们查询的时候,能不能不要把表名给写死,我们可以传入表的名字,然后根据表名来查询数据

/**

* 查询表名来查询数据

*/

List getUserByTableName(@Param("tableName") String table);

select * from ${tableName}

注意点:我们以前在学习mysql的时候,比如说写一个查询语句select * from user;我们这里的表名不能加引号对吧,同样的道理我们在映射文件写的sql语句,表名也不能加引号,那样就变成字符串了,所以动态设置表名应该使用${}

4. 添加功能获取自增的主键

t_clazz(clazz_id,clazz_name)t_student(student_id,student_name,cdParqxROPxlazz_id)1.添加班级信息2.获取新添加的班级id3.为班级分配学生,就是说把某一个学生的班级id修改成新添加的班级id

/**

添加用户信息

useGeneratedKeys:设置使用自增的主键

keyProperty:因为增删改有统一的返回值是受影响的行数,

因此只能将获取的自增的主键放在传输的参数user对象的某个属性中

*/

int insertUser(Useruser);

<!

--int insertUser(Useruser);

-->

insert into t_user values(null,#{username},#{password} )

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++核心准则ES.26: 不要将一个变量用于两个无关的用途
下一篇:C++核心准则ES.24: 使用unique_ptr(T)管理指针
相关文章

 发表评论

暂时没有评论,来抢沙发吧~