Mybatis中特殊SQL的执行

 更新时间:2022年04月07日 08:29:43   作者:Java的学习之路  
这篇文章主要介绍了Mybatis中特殊SQL的执行,介绍内容包括模糊查询、批量删除、动态设置表名、添加功能获取自增的主键等相关资料,需要的小伙伴可以参考一下

1.模糊查询

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

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

/**
     * 根据用户名模糊查询用户信息
     */
    List<User> getUserByLike(@Param("username") String username);

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

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

然后进行测试

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

解决方法1

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

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

解决方法2

使用字符串拼接

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

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

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

2.批量删除

delete from 表名 where 筛选条件

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

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

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

    </delete>

那我们要怎么解决呢?

可以使用${}

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

    </delete>

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

3.动态设置表名

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

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

    </select>

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

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

  • 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>

到此这篇关于Mybatis中特殊SQL的执行的文章就介绍到这了,更多相关Mybatis SQL 执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Idea工具中创建 SpringBoot工程及入门详解

    Idea工具中创建 SpringBoot工程及入门详解

    这篇文章主要介绍了Idea工具中创建 SpringBoot工程及入门分析详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Springboot整合Shiro的代码实例

    Springboot整合Shiro的代码实例

    这篇文章主要介绍了Springboot整合Shiro的代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java并发之synchronized

    java并发之synchronized

    这篇文章主要介绍了java并发关键字synchronized,包括内容synchronized的使用、synchronized背后的Monitor、synchronized保证可见性和防重排序、使用synchronized注意嵌套锁定,具体内容请看下面文章吧
    2021-10-10
  • 基于SpringBoot 使用 Flink 收发Kafka消息的示例详解

    基于SpringBoot 使用 Flink 收发Kafka消息的示例详解

    这篇文章主要介绍了基于SpringBoot 使用 Flink 收发Kafka消息,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • elasticsearch聚合查询实践示例

    elasticsearch聚合查询实践示例

    这篇文章主要为大家介绍了elasticsearch聚合查询实践示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • SpringBoot 使用Mybatis分页插件实现详解

    SpringBoot 使用Mybatis分页插件实现详解

    这篇文章主要介绍了SpringBoot 使用Mybatis分页插件实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 一文讲解Java的String、StringBuffer和StringBuilder的使用与区别

    一文讲解Java的String、StringBuffer和StringBuilder的使用与区别

    String是不可变的字符序列,而StringBuffer和StringBuilder是可变的字符序列,本文就来详细的介绍一下Java的String、StringBuffer和StringBuilder的使用与区别,感兴趣的可以了解一下
    2024-03-03
  • Spring Shell打Jar包时常用小技巧

    Spring Shell打Jar包时常用小技巧

    这篇文章主要介绍了Spring Shell打Jar包时常用小技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • nacos配置中心远程调用读取不到配置文件的解决

    nacos配置中心远程调用读取不到配置文件的解决

    这篇文章主要介绍了nacos配置中心远程调用读取不到配置文件的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Java日常练习题,每天进步一点点(43)

    Java日常练习题,每天进步一点点(43)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07

最新评论