MyBatis的各种查询功能

MyBatis的各种查询功能

1. 查询一个实体类对象

//接口方法
public interface SelectMapper
{
   /**
    * 根据id查询用户信息
    *
    */
   <!--User getUserById(@Param("id") int id);-->
   List<User> getUserByid(@Param("id") Integer id);
<!--映射文件-->
<!--    User getUserByid(@Param("id") Integer id);-->
   <select id="getUserByid" resultType="User">
       select * from t_user where id=#{id}
   </select>

 2 . 查询一个list集合

//接口方法
/**
    * 查询所有的用户信息
    */
   List<User> getAllUser();
<!--映射文件-->
<!--    List<User> getAllUser();-->
   <select id="getAllUser" resultType="User">
       select * from t_user
   </select>

 3 . 查询单个数据

//接口方法
/**
    * 查询用户的总记录数
    * @return
    * 在MyBatis中,对于Java中常用的类型都设置了类型别名
    * 例如:java.lang.Integer-->int|integer
    * 例如:int-->_int|_integer
    * 例如:Map-->map,List-->list
    * 查询用户信息的总记录数
    */
   Integer getCount();
<!--映射文件-->
<!--    Integer getCount();-->
<!--
需要把查询的结果转换Integer:java.lang.Integer
                     也可以integer等等,因为这是类型别名,mybatis所设置的(默认)
                     一些默认的类型别名可以去mybatis官方参考手册查看
                  -->
   <select id="getCount" resultType="java.lang.Integer">
<!-- count()里面写1,*,字段 都行,1和*查询出来的结果一样的,字段查询出来的字段不一样,字段的值为null记录就不会被算进去 -->
       select count(*) from t_user
   </select>

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

// 接口方法
/**
    * 根据id查询用户信息为一个map集合
    */
   Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
<!--映射文件-->
<!--        Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
   <select id="getUserByIdToMap" resultType="Map">
      select * from t_user where id=#{id}
<!--结果:{password=123456, sex=男, id=1, age=23, username=admin}-->

 5 . 查询多条数据为map集合

接口方法
/**
    * 查询所有用户信息为map集合
    * Map集合的键设置为String,值是Object(都得这样设置)
    * 方法1:查询一条数据转换的就是一个Map集合,查询出来多条数据可以把多个map放到一个list集合中
    * 注意:Map集合也可存储多条数据,只不过是map集合里面有键和值,
    *     而我们当前查询出来的每一条数据所转换的Map只能作为键或者值,
    *     所以Map集合形成不了一条数据,
    *     方法2:这时候就可以加上一个注解@MapKey():来设置当前Map集合的键,
    *     就会把我们当前所查询的数据的某一个字段来作为键,
    *     把当前查询出来的数据转换成Map集合来作为值,其它都有可能重复,就把id作为键
    */
//     List<Map<String,Object>> getAllUserToMap();
   @MapKey("id")
   Map<String,Object> getAllUserToMap();
<!--映射文件-->
<!--    Map<String,Object> getAllUserToMap();-->
   <select id="getAllUserToMap" resultType="Map">
       select * from t_user
   </select>
public class SelectMapperTest
{
   //测试方法
   /**
    * MyBatis的各种查询功能:
    * 1.若查询出的数据只有一条,可以通过
    * ①可以实体类对象
    * ②可以集合List接收
    * ③可以通过map集合来接收(以字段为键,字段所对应的值为值)
    * 结果:{password=123, sex=男, id=3, age=23, email=123@qq.com, username=李四}
    * 2.若查询出的数据有多条:
    * ①可以通过实体类类型的List集合接收
    * ②可以通过map类型的List集合接收
    * ③可以在Map接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段值作为键,放到同一个map中
    *
    * 注意:一定不能通过实体类对象接收收,此时会抛异常TooManyResultsException
    */
   //1
   @Test
   public void testGetUserById(){
       SqlSession sqlSession= SqlSessionUtils.getSqlSession();
       SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
       System.out.println(mapper.getUserByid(3));
  }
   //2
   @Test
   public void testGetAllUser(){
       SqlSession sqlSession= SqlSessionUtils.getSqlSession();
       SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
       System.out.println(mapper.getAllUser());
  }
   //3
   @Test
   public void testGetCount(){
       SqlSession sqlSession= SqlSessionUtils.getSqlSession();
       SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
       System.out.println(mapper.getCount());
  }
   //4
   @Test
   public void testGetUserByIdToMap(){
       SqlSession sqlSession= SqlSessionUtils.getSqlSession();
       SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
       System.out.println(mapper.getUserByIdToMap(3));
  }
   //5
   @Test
   public void testGetAllUserToMap(){
       SqlSession sqlSession= SqlSessionUtils.getSqlSession();
       SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
       System.out.println(mapper.getAllUserToMap());
  }
}
 
posted @ 2022-10-27 21:15  zjw_rp  阅读(204)  评论(0)    收藏  举报