MyBatis @Select注解介绍:基本用法与动态SQL拼写方式
作者:MyBatis中文官网 发布时间:2023-07-17 05:56:43
标签:MyBatis,@Select注解,动态SQL
1、@Select注解基本用法
@Select注解的目的是为了取代xml中的select标签,只作用于方法上面。
下面看一下@Select注解的源码介绍:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select
{
String[] value();
}
从上述可以看到两点信息:
(1)@Select注解只能修饰方法
(2)@Select注解的值是字符数组。
所以,@Select注解的用法是这样的:
@Select({ "select * from xxx", "select * from yyy" })
Person selectPersonById(Integer id);
虽然@Select注解的值是字符数组,但是真正生效的应该是最后那条SQL语句。这一点请大家要留意一下。
2、@Select注解动态SQL拼写
普通的字符串值,只能实现变量的替换功能,如下所示,
@Select("select * from t_person where id = #{id}")
Person selectPersonById(Integer id);
如果要想实现复杂的逻辑判断,则需要使用标签,如下所示:
@Select("<script> select * from t_person where id = #{id}
<when test='address !=null'> and address = #{address}
</when> </script>")
Person selectPersonById(Integer id);
其实,标签并非是@Select注解专用的,其他的注解,例如@Insert,@Update等等,都可以使用的。
@Select动态参数参考
今天发现一个问题,使用标签进行查询语句的拼接时,逗号和引号老处理不好,所以在此记录下,供以后参考
@Select("<script>" +
" select * from tb_crowd_fund_person_record a,tb_crowd_fund_info b where b.id=a.crowd_fund_info_id " +
" <if test='activeStatus != null and activeStatus != \"\"'> "+
" and b.active_status=#{activeStatus} " +
" </if> " +
" <if test='createUser != null and createUser != \"\"'> "+
" and a.create_user=#{createUser} " +
" </if> " +
"</script>")
List<String> findByType(Map<String,String> map);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:http://www.mybatis.cn/archives/1010.html


猜你喜欢
- @ConfigurationProperties注入创建一个新的模板此过程就不在这介绍了,在我SpringBoot专栏里有详细过程。⭐⭐⭐注
- 本文实例讲述了java 线程方法join简单用法。分享给大家供大家参考,具体如下:虽然关于讨论线程join方法的博客已经很多了,不过个人感觉
- 前言:由于最近有解析协议的一些业务场景,需要用到一些字节操作工具,这里封装了一些比较常用的转换方法,测试后基本没有问题,可能一些比较偏门的数
- @PathVariable和@RequestParam传参为空@RestControllerpublic class UserControl
- 写在前面本文讲解的是 SpringBoot 引入容器化技术 Docker 实现一次构建到处运行,包括镜像构建、Docker仓库搭建使用、Do
- 本文实例讲述了Android使用WebView播放flash及判断是否安装flash插件的方法。分享给大家供大家参考。具体实现方法如下:一、
- 说明:.NET Compact Framework 中不支持异步委托调用,也就是 BeginInvoke 和 EndInvoke 方法。Be
- 写在前面在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法。而在Java8中,接口中可以声明
- 问题当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题数据库字段是 pwdid name pwd1 张三 1234562 李四
- 重写java object类的equals方法覆盖equals方法请遵守约定什么情况下要覆盖equals方法容易违反的对称性不易察觉的传递性
- WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果:1、Visual Studio新建一个WPF
- 本文为大家分享了Android网络连接判断与相关处理,供大家参考,具体内容如下获取网络信息需要在AndroidManifest.xml文件中
- RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很
- Android Fragment的回退栈点开之后按一次回退键只返回一次MainActivity 类public class Ma
- 简介Microsoft官网关于 WindowChome 的介绍截取Microsoft文章的一段话:若要在保留其标准功能时自定义窗口,可以使用
- 一.数组的三种声明方式总结public class WhatEver { public static void main(Str
- SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置
- 实现效果如图所示:首先公布实现代码:一. 自定义实现import.org.springframework.security.core.use
- 本文实例讲解了java实现http的Post、Get、代理访问请求的详细代码片段,分享给大家供大家参考,具体内容如下package com.
- 数据库事务是后端开发中不可缺少的一块知识点。Spring为了更好的支撑我们进行数据库操作,在框架中支持了两种事务管理的方式: 编程式事务声明