NO.04 MyBatis的各种查询功能

目录

1、查询一个实体类对象

2、查询一个List集合

3、查询单个数据

5、查询多条数据并存储在Map集合中

5.1 方法一:将数据存储在map集合中,再将map集合存储在List集合中

5.2 方法二:将数据存储在map集合中

6、MyBatis中为Java中常用的类型设置了类型别名


在之前的博客中介绍了MyBatis实现了数据库基本的增删改查,博客中使用的实体类为User类,相关内容可查看博客:NO.2 MyBatis框架:创建Mapper接口和映射文件,实现基本增删改查_qq_46053741的博客-优快云博客

对于MyBatis的查询功能,都需要指明查询结果的返回类型,通常使用resultType和resultMap属性指定结果类型。接下来介绍MyBatis的各种查询功能。

1、查询一个实体类对象

 查询实体类对象,若参数为实体类的对象,则在查询语句中只需要使用${}和#{}访问实体类的属性名即可获得对应的属性值;若参数是Map集合,则在查询语句中使用${}和#{}访问Map集合的键即可获得对应的value值;若参数是一个字面量时,可以使用@Param注解的方式,通过${}和#{}访问形参获取形参的值。注意:使用${}获取属性值时,两边要加单引号,需要指定查询的结果返回类型

例如:

使用@Param注解的方式获取形参的值,在mapper接口中声明getUserByUsername方法,如下

    //根据用户名查询用户信息
    User getUserByUsername(@Param("username") String username);

在映射文件中实现Sql语句,使用resultType指明结果类型为User类型。

<!-- User getUserByUsername(@Param("username") String username)-->
<select id="getUserByUsername" resultType="User">
    select *from t_user where username=#{username}
</select>

2、查询一个List集合

查询多条数据时,不能使用实体类作为函数的返回值,要使用List集合作为方法的返回值,存储的类型为实体类类型(例如:List<User>),此时映射文件中查询结果类型为实体类型。

例如:

在Mapper接口中声明getAllUser方法,查询所有用户信息,将查询到的用户信息存储到List集合中返回。

//查询所用用户,并存储在List集合中
List<User> getAllUser();

在映射文件中实现Sql语句,使用resultType指定结果类型。

<!--    List<User> getAllUser();-->
    <select id="getAllUser" resultType="User">
        select *from t_user
    </select>

3、查询单个数据

单个数据的查询主要用于查询数据的总条数,属于特殊值查询,此时resultType的结果类型指定为_integer。

例如:

在Maperr接口中声明getCount()方法。

    //获取总记录数
    int getCount();

在映射文件中实现Sql语句,resultType的结果类型为_integer。

<!--    int getCount();-->
    <select id="getCount" resultType="_integer">
        select count(*) from t_user
    </select>

 4、查询一条数据为map集合

查询一条数据存储在Map集合中时,方法的返回值为Map,其中Map的键为String类型,值为Object类型。在映射文件中,结果类型指定为map类型。

例如:

在Mapper接口中声明getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password)方法,将查询到的用户信息存储到Map集合中返回。

    //根据用户名和密码查询用户信息为map集合
    Map<String,Object> getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

在映射文件中实现Sql语句,结果类型指定为map

<!--    Map<String,Object> getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password);-->
    <select id="getUserToMapByUsernameAndPassword" resultType="map">
        select *from t_user where username=#{username} and password=#{password}
    </select>

5、查询多条数据并存储在Map集合中

将多条数据存储在Map集合中有两种实现方式。方式一:将数据先存储在Map集合中,再将Map存储在List集合中输出。方式二:直接将数据存储在Map集合中输出。

5.1 方法一:将数据存储在map集合中,再将map集合存储在List集合中

将表中的数据以Map集合的方式查询,一条数据对应一个Map;若有多条数据,就会产生多个Map集合,此时将这些Map放在一个List集合中获取。

例如:

在Mapper接口中实现getAllUserByMapAndList()方法,方法的返回类型为List<Map<String ,Object>>.

    //方法一:
    List<Map<String,Object>> getAllUserByMapAndList();

在映射文件中实现Sql语句,resultType的结果类型为map

<!--    List<Map<String,Object>> getAllUserByMapAndList();-->
    <select id="getAllUserByMapAndList" resultType="map">
        select *from t_user
    </select>

5.2 方法二:将数据存储在map集合中

将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合

例如:

在Mapper接口中声明getAllUserToMap()方法,用@MapKey注解该方法,使用用户的id作为Map集合的键,用户信息作为Map的值。

    //方法二
    @MapKey("id")
    Map<String,Object> getAllUserToMap();

在映射文件中实现Sql语句,resultType指定为map

<!--    Map<String,Object> getAllUserToMap();-->
    <select id="getAllUserToMap" resultType="map">
        select *from t_user
    </select>

6、MyBatis中为Java中常用的类型设置了类型别名

对于实体类型resultType的结果类型通常指定为实体类类型,或在MyBatis的核心配置文件中通过typeAliases标签中的typeAlias标签的type属性指定实体类的路径,alias指定实体类的别名,或通过包设置类型别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写(<package name="包的路径"/>)。

MyBatis自定义以下类的类型别名如下:

Integer:Integer,int

int:_int,_integer

Map:map

String:string

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值