Mybatis查询功能总汇

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

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

2. 数据查询 

1. sql中存在一个参数

直接用表中属性名即可

<select id="getUserByUsername" resultType="user">
    SELECT * FROM t_user WHERE username = #{username};
</select>

2. sql存在多个参数

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

User checkLogin(String username, String password);

<select id="checkLogin" resultType="user">
    SELECT * FROM t_user WHERE username = #{param1} and password = #{param2};
</select>

<select id="checkLogin" resultType="user">
    SELECT * FROM t_user WHERE username = #{arg0} and password = #{arg1};
</select>

3. 用map装载参数

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

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

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

void insertUser(User user);

<select id="insertUser">
    INSERT INTO t_user VALUES (NULL, #{username}, #{password}, #{age}, #{gender}, #{email})
</select>

5. 多个实体类推荐使用

通过List泛型

 List<User> userList();

     <!--多条数据查询至map-->
    <select id="userList" resultType="user">
        select * from t_user
    </select>

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

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

也就是注解上的替换了argx

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

3. 查询功能详解

1. 返回为实体类POJO

1. 单个实体类
User user

User getUserById(@Param("id") String id);

<select id="getUserById" resultType="user">

SELECT * FROM t_user WHERE id = #{id}

</select>

 2.多实体类泛型

List<User> userlist 

 List<User> userList();

     <!--多条数据查询至map-->
    <select id="userList" resultType="user">
        select * from t_user
    </select>

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

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

查询多个时注意注解 

多个的话用List<Map<String,Object>> userList=XXX

   @MapKey("id") //将表中的某个字段作为每条map集合的键 查询单行时不写也可以,那就没有键
    Map<String,Object> countUserByMap(@Param("id") int id);

    @MapKey("id") //查询多行时必须写
    Map<String,Object> countUsersByMap();

3. 单行单列

查询有多少行数据

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

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

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

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

<!--
    在mybatis为java中常见的数据类型设置了别名
    Integer:integer int Int
    int:_int _integer
    Map:map
    String :string
-->
    <select id="countUsers" resultType="_int">
        select count(*) from t_user

    </select>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值