Mybatis--特殊SQL的执行

本文阅读 3 分钟
首页 代码,Java 正文

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

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

<font size="4" color="blue"> 然后进行测试
在这里插入图片描述
那要怎么解决上述问题呢,有两种方式可以解决。</font>

解决方法1

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

解决方法2

<font color="blue" size="4">使用字符串拼接</font>

<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User">
        select *
        from t_user
        where username like  concat('%',#{username},'%');
    </select>

img

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

<select id="getUserByLike" resultType="com.atguigu.mybatis.pojo.User">
        select *
        from t_user
        where username like   "%"#{username}"%";
    </select>

delete from 表名 where 筛选条件

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

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

<delete id="delete" >
        delete  from t_user where id in(#{ids});

    </delete>

img 那我们要怎么解决呢? 可以使用${}

<delete id="delete" >
        delete  from t_user where id in(#{ids});

    </delete>

img

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

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

/**
     * 查询表名来查询数据
     */
    List<User> getUserByTableName(@Param("tableName") String table);
<select id="getUserByTableName" resultType="com.atguigu.mybatis.pojo.User">
 
        select * from ${tableName}

    </select>

img

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

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

/** 添加用户信息 useGeneratedKeys:设置使用自增的主键 keyProperty:因为增删改有统一的返回值是受影响的行数, 因此只能将获取的自增的主键放在传输的参数user对象的某个属性中 */
int insertUser(Useruser);
<! --int insertUser(Useruser); -->
<insert id="insertUser"useGeneratedKeys="true"keyProperty="id">
insert into t_user values(null,#{username},#{password} )
</insert>
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://zengyihong.blog.csdn.net/article/details/123895394
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复