gpt4 book ai didi

MyBatis的使用四(查询详解)

转载 作者:我是一只小鸟 更新时间:2023-02-03 22:34:02 24 4
gpt4 key购买 nike

本文主要讲述如何在mybatis中进行查询操作【详解】 。

一. 查询User对象

  1.查询单个对象User

  SelectUser接口声明如下 。

                          
                            //
                          
                          
                             主要条件是使用id
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {

    
                          
                          
                            //
                          
                          
                             查询单行数据,返回对象User
                          
                          
    User getUserSingleByID(@Param("id") 
                          
                            int
                          
                          
                             id);
                          
                          
                            
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser">
                            
<!-- User getUserSingleByID(@Param("id") int id) --> < select id ="getUserSingleByID" resultType ="User" > select * from t_user where id = #{id}; </ select > </ mapper >

  2. 查询多个对象User

  SelectUser接口声明如下 。

                          
                            //
                          
                          
                             主要条件是使用id
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {

    
                          
                          
                            //
                          
                          
                             查询多行数据,返回User类的集合【查询 >= id 的数据】
                          
                          
    List<User> getUserListByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            List<User> getUserListByID(@Param("id") int id)
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getUserListByID"
                          
                          
                             resultType
                          
                          
                            ="User"
                          
                          
                            >
                          
                          
                            
        select * from t_user where id >= #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

  问题:当查询单个对象时,是否可以用List<User>作为返回类型?

  SelectUser接口声明如下 。

                          
                            //
                          
                          
                             主要条件是使用id
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {

    
                          
                          
                            //
                          
                          
                             查询单行数据,返回对象User
                          
                          
    List<User> getUserSingleByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            User getUserSingleByID(@Param("id") int id)
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getUserSingleByID"
                          
                          
                             resultType
                          
                          
                            ="User"
                          
                          
                            >
                          
                          
                            
        select * from t_user where id = #{id};
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

  测试test 。

                          
                                @Test
    
                          
                          
                            //
                          
                          
                             使用id查询单个数据User
                          
                          
                            public
                          
                          
                            void
                          
                          
                             selectUserByID(){
        SqlSession sqlSession 
                          
                          =
                          
                             SqlSessionUtils.getSqlSession();
        SelectUser mapper 
                          
                          = sqlSession.getMapper(SelectUser.
                          
                            class
                          
                          
                            );
        List
                          
                          <User> user = mapper.getUserSingleByID(12
                          
                            );
        System.out.println(user);
        sqlSession.close();
    }
                          
                        

  测试结果如下 。

vip

   运行结果正常 。

总结:当返回的数据对象不清楚有几个的情况,建议使用List<User> 。

二. 查询字段

  1.查询单个字段【单行】

  SelectUser接口声明如下 。

                          
                            //
                          
                          
                             主要条件是使用id
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {
    
                          
                          
                            //
                          
                          
                             查询单个字段【单行】
    
                          
                          
                            //
                          
                          
                             返回类型根据字段的类型而定,具体问题具体分析
                          
                          
    String getNameByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            String getNameByID(@Param("id") int id)
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getNameByID"
                          
                          
                             resultType
                          
                          
                            ="string"
                          
                          
                            >
                          
                          
                            
        select username from t_user where id = #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

注意:在SelectUser接口定义的方法 getNameByID() 的返回类型需要根据字段的类型来指明,或者直接使用Object.

  2. 查询单个字段【多行】

  SelectUser接口声明如下 。

                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {
    
                          
                          
                            //
                          
                          
                             查询单个字段【多行】
                          
                          
    List<String> getNameRowsByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
    
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            List<String> getNameRowsByID(@Param("id") int id);
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getNameRowsByID"
                          
                          
                             resultType
                          
                          
                            ="string"
                          
                          
                            >
                          
                          
                            
        select username from t_user where id >= #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

与 一中查询多行数据类似,返回类型是List<字段类型或者Object> 。

  3. 查询多个字段【单行】

  SelectUser接口声明如下 。

                          
                            //
                          
                          
                             主要条件是使用id
                          
                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {

    
                          
                          
                            //
                          
                          
                             查询多个字段【单行】
    
                          
                          
                            //
                          
                          
                             Map<String,Object> 中 key是字段名,value是属性值
                          
                          
    Map<String,Object> getColsByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            Map<String,Object> getColsByID(@Param("id") int id)
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id 
                          
                          
                            = "getColsByID"
                          
                          
                             resultType
                          
                          
                            ="map"
                          
                          
                            >
                          
                          
                            
        select username,password,age from t_user where id = #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

  在SelectUser接口定义的方法返回类型是Map<String,Object>类型, 。

  Map<String,Object>的key是字段名,value是属性值,这里的Object用的巧妙 。

  4. 查询多个字段【多行】

  SelectUser接口声明如下 。

                          
                            public
                          
                          
                            interface
                          
                          
                             SelectUser {
    
                          
                          
                            //
                          
                          
                             查询多个字段【多行】
    
                          
                          
                            //
                          
                          
                             此时不能使用 Map<String,Object> 作为返回类型,数据不止一条
    
                          
                          
                            //
                          
                          
                             方式1:使用List<Map<>>
                          
                          
    List<Map<String,Object>> getClosRowsByID(@Param("id") 
                          
                            int
                          
                          
                             id);
    
                          
                          
                            //
                          
                          
                             方式2:使用@MapKey("字段名") 查出的结果 Map<Map<>>
    
                          
                          
                            //
                          
                          
                                  @MapKey("字段名"),key是字段名【唯一标志该行数据】value是该行数据
    
                          
                          
                            //
                          
                          
                                  此时在xml文件,查询字段必须要包含唯一标识id
                          
                          
    @MapKey("id"
                          
                            )
    
                          
                          
                            //
                          
                          
                             Map<String,Object> getMapsByID(@Param("id") int id);
                          
                          
    Map<Integer,Object> getMapsByID(@Param("id") 
                          
                            int
                          
                          
                             id);
}
                          
                        

  SelectUser.xml文件声明如下 。

                          
                            <
                          
                          
                            mapper 
                          
                          
                            namespace
                          
                          
                            ="com.hspedu.mapper.SelectUser"
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            方式1:使用List<Map<>> 
                          
                          
                            -->
                          
                          
                            <!--
                          
                          
                            Map<String,Object> getClosRowsByID(@Param("id") int id);
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getClosRowsByID"
                          
                          
                             resultType
                          
                          
                            ="map"
                          
                          
                            >
                          
                          
                            
        select username,password,age from t_user where id >= #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            <!--
                          
                          
                            方式2:使用@MapKey注解 
                          
                          
                            -->
                          
                          
                            <!--
                          
                          
                            @MapKey("id")
    Map<String,Object> getMapsByID(@Param("id") int id);
                          
                          
                            -->
                          
                          
                            <
                          
                          
                            select 
                          
                          
                            id
                          
                          
                            ="getMapsByID"
                          
                          
                             resultType
                          
                          
                            ="map"
                          
                          
                            >
                          
                          
                            
        select id,username,password,age from t_user where id >= #{id}
    
                          
                          
                            </
                          
                          
                            select
                          
                          
                            >
                          
                          
                            </
                          
                          
                            mapper
                          
                          
                            >
                          
                        

  方式1:测试test 。

                          
                                @Test
    
                          
                          
                            //
                          
                          
                             根据id查询多个字段【多行】方式一:
                          
                          
                            public
                          
                          
                            void
                          
                          
                             selectColsRowsByID(){
        SqlSession sqlSession 
                          
                          =
                          
                             SqlSessionUtils.getSqlSession();
        SelectUser mapper 
                          
                          = sqlSession.getMapper(SelectUser.
                          
                            class
                          
                          
                            );
        List
                          
                          <Map<String, Object>> mapList = mapper.getClosRowsByID(6
                          
                            );
        
                          
                          
                            //
                          
                          
                             遍历集合
                          
                          
                            for
                          
                           (Map<String, Object>
                          
                             map : mapList) {
            System.out.println(map);
        }
        sqlSession.close();
    }
                          
                        

  测试结果如下 。

                          
                            {password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =tom12345, age=20, username=
                          
                            jack}
{password
                          
                          =hsp12345, age=25, username=
                          
                            hsp}
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}
{password
                          
                          =hsp12345, age=25, username=hsp}
                        

  方式2:测试test 。

                          
                                @Test
    
                          
                          
                            //
                          
                          
                             根据id查询多个字段【多行】方式二:
                          
                          
                            public
                          
                          
                            void
                          
                          
                             selectMapsByID(){
        SqlSession sqlSession 
                          
                          =
                          
                             SqlSessionUtils.getSqlSession();
        SelectUser mapper 
                          
                          = sqlSession.getMapper(SelectUser.
                          
                            class
                          
                          
                            );
        Map
                          
                          <Integer, Object> maps = mapper.getMapsByID(6
                          
                            );
        
                          
                          
                            //
                          
                          
                             遍历map,注意此时map的结构 Map<id=Map,id=Map...>
                          
                          
        Set<Integer> keySet =
                          
                             maps.keySet();
        
                          
                          
                            //
                          
                          
                              java.lang.Integer cannot be cast to java.lang.String
        
                          
                          
                            //
                          
                          
                             [16, 6, 9, 10, 11, 12, 13, 14, 15]
        
                          
                          
                            //
                          
                          
                             id的字段类型: class java.lang.Integer.
        
                          
                          
                            //
                          
                          
                             因此需要将Map<String,Object> 变成Map<Integer,Object>
                          
                          
                            for
                          
                          
                             (Integer s : keySet) {
            System.out.println(maps.get(s));
        }
        sqlSession.close();
    }
                          
                        

  测试结果如下 。

                          {password=hsp12345, id=16, age=25, username=
                          
                            hsp}
{password
                          
                          =tom123, id=6, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, id=9, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, id=10, age=20, username=
                          
                            Tom}
{password
                          
                          =tom12345, id=11, age=20, username=
                          
                            jack}
{password
                          
                          =hsp12345, id=12, age=25, username=
                          
                            hsp}
{password
                          
                          =tom123, id=13, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, id=14, age=20, username=
                          
                            Tom}
{password
                          
                          =tom123, id=15, age=20, username=Tom}
                        

  注意方式1和方式2的区别 。

  方式1的返回类型是List<Map>,即 将查询到的每行结果 --存放-->Map<String,Object> ---封装--> List<Map<String,Object>>.

    List<Map<>>的结构如下 。

                          [{password=tom123, age=20, username=Tom},{password=tom123, age=20, username=
                          
                            Tom}, 
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}, 
{password
                          
                          =tom12345, age=20, username=
                          
                            jack}, 
{password
                          
                          =hsp12345, age=25, username=
                          
                            hsp}, 
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}, 
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}, 
{password
                          
                          =tom123, age=20, username=
                          
                            Tom}, 
{password
                          
                          =hsp12345, age=25, username=hsp}]
                        

  方式2是通过注解@MapKey("字段名"),注意这里的字段名是作为每行数据value的key【 因此应该选择能够唯一标识某一行数据的字段名作为每行数据的key 】.

    Map< " 字段名的值 " = Map<>>的结构如下 。

                          {16={password=hsp12345, id=16, age=25, username=
                          
                            hsp},
 
                          
                          6={password=tom123, id=6, age=20, username=
                          
                            Tom}, 

                          
                          9={password=tom123, id=9, age=20, username=
                          
                            Tom}, 

                          
                          10={password=tom123, id=10, age=20, username=
                          
                            Tom},
 
                          
                          11={password=tom12345, id=11, age=20, username=
                          
                            jack},
 
                          
                          12={password=hsp12345, id=12, age=25, username=
                          
                            hsp},
 
                          
                          13={password=tom123, id=13, age=20, username=
                          
                            Tom}, 

                          
                          14={password=tom123, id=14, age=20, username=
                          
                            Tom}, 

                          
                          15={password=tom123, id=15, age=20, username=Tom}}
                        

  。

最后此篇关于MyBatis的使用四(查询详解)的文章就讲到这里了,如果你想了解更多关于MyBatis的使用四(查询详解)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com