Mybatis应用场景之动态传参、两字段查询、用户存在性的判断

编程入门 行业动态 更新时间:2024-10-27 21:17:13

Mybatis应用场景之动态传参、两<a href=https://www.elefans.com/category/jswz/34/1771443.html style=字段查询、用户存在性的判断"/>

Mybatis应用场景之动态传参、两字段查询、用户存在性的判断

目录

一、动态传参

1、场景描述

2、实现过程

 3、代码测试

二、两字段查询

1、场景描述

2、实现过程

3、代码测试

4、注意点

三、用户存在性的判断

1、场景描述

2、实现过程

3、代码测试


一、动态传参

1、场景描述

        在进行数据库查询的时候,需要动态传入参数,例如:表名、列名或者字段值。举个例子:在学生表中查找名字为Tom的用户的数据记录有几条,或者年龄等于23的用户有几个,这时候就需要动态传参。

2、实现过程

(1)如果动态传入表名、列名,sql里的属有变量取值都改成${xxxx},而不是#{xxx}

<select id="testDym" parameterType="String" resultType="com.example.mplearning.entity.Student">select * from ${tableName} where ${column} = ${colVal}</select>

(2)Mpper文件

Student testDym(Map<String, Object> map);

(3)Service层

void testDym();
    @Overridepublic void testDym() {Map<String, Object> map = new HashMap<>();map.put("tableName", "t_student");map.put("colVal",  "'" + "Tom" + "'");map.put("column", "name");System.out.println(orgMapper.testDym(map));map.put("column", "name");map.put("column", "age");map.put("colVal", "45");System.out.println(orgMapper.testDym(map));}

(4)Controller层

@GetMapping("/testDym")public R testDym(){orgService.testDym();return R.ok();}

 3、代码测试

        说明:数据库中存在name等于Tom的用户,但是不存在age=45的用户,因此结果为null。 

二、两字段查询

1、场景描述

        在使用MyBatis查询数据库时,有时候对于数据表,仅需要查询两列数据,一列做map的key,一列作为map的value,然后将查询出的结果以map的形式返回。

2、实现过程

(1)这里假设要查询姓名和地址,那么就可以将name作为key、address作为value定义一个Map,然后在查询语句中使用即可。

    <resultMap id="stuMap" type="HashMap"><result property="key" column="name" javaType="java.lang.String"/><result property="value" column="address" javaType="java.lang.String" /></resultMap><select id="selectTwoParam" resultMap="stuMap">select name, address from t_person;</select>

(2)Mapper文件

List<Map<String, String>> selectTwoParam();

(3)Controller文件

        Service层代码就不展示了,和Mapper层一样,这里直接展示Controller层的代码。

    @GetMapping("/two")public R getTwoParam(){List<Map<String, String>> list = orgService.selectTwoParam();return R.ok().data( "data",list);}

3、代码测试

4、注意点

        关于这里的查询,还有一点需要注意的是,有的人会在Mapper接口中这样写:

        这种方式值只适合一条记录的封装,但是不适合多条记录。例如:如果通过select name, address from t_student where age = 25,查询出来的Student只有一条记录,那么这里就是对的,也能得到结果,但是如果有多个Student,就会报错,如下图:

        因此,在多条记录的情况下,需要写成在前面使用的那种方式,即:

List<Map<String, String>> selectTwoParam();

三、用户存在性的判断

1、场景描述

        有时候在业务场景中,我们需要进行唯一性判断,例如:用户登录的时候,我们要判断这个用户在用户表中是否存在,所以就不需要写select * from t_user where id = ?。因为这样的话,如果对于一个数据量特别大的数据表,其效率会比较慢,那么应该用什么方式呢?请看下面。

2、实现过程

(1)在xml文件中定义sql。

    <select id="stuExist" parameterType="int" resultType="Integer">select 1 from t_student where id = #{id}</select>

(2)Mapper文件

    Integer stuExist(int id);

(3)Controller层

    @GetMapping("/isExist/{id}")public R isExist(@PathVariable Integer id){Integer val = orgService.stuExist(id);return R.ok().data("message", val == null ? "用户不存在" : "用户存在");}

3、代码测试

更多推荐

Mybatis应用场景之动态传参、两字段查询、用户存在性的判断

本文发布于:2023-12-05 05:18:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1663196.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   场景   动态   用户   Mybatis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!