• Mybatis查询功能总汇


    1. sql中传参表示的两种方式

    • 占位符:表示方式 #{}  推荐使用
      • select * from t_user where username = #{username}
    • 字符串拼接:表示方式  '${}' 注意一定有单引号 
      • select * from t_user where username = '${username}'

    2. 数据查询 

    1. sql中存在一个参数

    直接用表中属性名即可

    1. <select id="getUserByUsername" resultType="user">
    2. SELECT * FROM t_user WHERE username = #{username};
    3. select>

    2. sql存在多个参数

    存在多个参数的时候,Mybatis会创建map集合,并使用arg0,arg1........,param0,param1........来表示Key,参数值为value。

    1. User checkLogin(String username, String password);
    2. <select id="checkLogin" resultType="user">
    3. SELECT * FROM t_user WHERE username = #{param1} and password = #{param2};
    4. select>
    5. <select id="checkLogin" resultType="user">
    6. SELECT * FROM t_user WHERE username = #{arg0} and password = #{arg1};
    7. select>

    3. 用map装载参数

    可直接用map进行参数传递,sql语句中可以写任意值,不局限于argX和paramX

    1. User username = #{param1} and password = #{param2};
    2. <select id="checkLoginByMap" resultType="user">
    3. SELECT * FROM t_user WHERE username = #{username} and password = #{password};
    4. select>

    4. 单个实体类POJO推荐使用

    1. void insertUser(User user);
    2. <select id="insertUser">
    3. INSERT INTO t_user VALUES (NULL, #{username}, #{password}, #{age}, #{gender}, #{email})
    4. select>

    5. 多个实体类推荐使用

    通过List泛型

    1. List<User> userList();
    2. <select id="userList" resultType="user">
    3. select * from t_user
    4. select>

    6. @Param处理sql存在单个或多个参数推荐使用

    其会替换argXX,即你只能用 {username, param1, password, param2 } 这四个在配置文件当中。

    也就是注解上的替换了argx

    1. User checkLogin(@Param("username") String username, @Param("password") String password);
    2. <select id="checkLogin" resultType="user">
    3. SELECT * FROM t_user WHERE username = #{username} and password = #{password};
    4. select>

    3. 查询功能详解

    1. 返回为实体类POJO

    1. 单个实体类
    User user

    1. User getUserById(@Param("id") String id);
    2. <select id="getUserById" resultType="user">
    3. SELECT * FROM t_user WHERE id = #{id}
    4. select>

     2.多实体类泛型

    List userlist 

    1. List<User> userList();
    2. <select id="userList" resultType="user">
    3. select * from t_user
    4. select>

    2. 没有对应的实体类返回(返回不是实体类)

    查询的结果没有对应的实体类的时候,就可以使用Map集合。 resultType 设置成 map 即可.

    查询多个时注意注解 

    多个的话用List> userList=XXX

    1. @MapKey("id") //将表中的某个字段作为每条map集合的键 查询单行时不写也可以,那就没有键
    2. Map countUserByMap(@Param("id") int id);
    3. @MapKey("id") //查询多行时必须写
    4. Map countUsersByMap();

    3. 单行单列

    查询有多少行数据

    • count(*)查询所有
    • count(1)查询所有
    • count("XX")查询XX字段的所有数据 会忽略值为null的行 

    count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

    count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

    count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

    1. <select id="countUsers" resultType="_int">
    2. select count(*) from t_user
    3. select>

  • 相关阅读:
    CVPR2022 底层视觉 | 图像处理
    这三大爆款开源项目竟出自同一个20人的小公司?
    快速掌握数据分析思路
    cv面试百问学习day1
    关于某些地区延期举办2022年11月27日 PMI认证考试等有关事项的通知
    【第三篇】- 深入学习Git 工作流程
    计算机网络之概述
    python核心编程|一本书,玩转python!让你从入门到大牛!
    竞赛 基于机器视觉的行人口罩佩戴检测
    桐乡上元——UI设计
  • 原文地址:https://blog.csdn.net/qq_41950447/article/details/127673010