1. 程式人生 > 其它 >【MyBatis】學習筆記06:各種查詢所返回資料的資料型別

【MyBatis】學習筆記06:各種查詢所返回資料的資料型別

【Mybatis】學習筆記01:連線資料庫,實現增刪改

【Mybatis】學習筆記02:實現簡單的查

【MyBatis】學習筆記03:配置檔案進一步解讀(非常重要)

【MyBatis】學習筆記04:配置檔案模板

【MyBatis】學習筆記05:獲取引數值的兩種方式

目錄

【總結】

1.查詢出的資料只有一條:

(1)可以通過實體類物件接收

(2)可以通過List集合接收(Eg1)

(3)可以通過map接收(Eg4)

2.若查詢的資料有多條:

(1)可以通過List集合接收(Eg2)

(2)可以通過map型別的List集合接收(Eg5(1))

(3)可以在mapper介面的方法上新增@MapKey註解,此時就可以將每條資料轉為map集合作為值,以某個欄位的值作為鍵,放在同一個map集合裡面。(Eg5(2))

(注意)|(一定不能通過實體類物件接收,否則會丟擲異常TooManyResultsException)

準備

(1)建立介面

(2)建立對應的對映檔案

查詢一個實體類物件

//SelectMapper 介面
public interface SelectMapper {
    /**
     * 查詢使用者資訊
     * @param id 使用者id
     * @return 使用者物件
     */
    User getUserById(Integer id);
}
<!--    User getUserById(Integer id);-->
    <select id="getUserById" resultType="User">
        select * from  t_users where id= #{id}
    </select>
    @Test
    public void getUserById(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        User result  = mapper.getUserById(4);
        System.out.println(result);
    }

cc.mllt.sky.utils.SqlSessionUtils.java

package cc.mllt.sky.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtils {
    public  static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        try{
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
            sqlSession  = sqlSessionFactory.openSession(true);

        }catch (IOException e){
            e.printStackTrace();
        }

        return sqlSession;
    }
}

查詢返回一個List集合

Eg1:查詢出的資料只有一條

//SelectMapper 介面
public interface SelectMapper {
    /**
     * 查詢使用者資訊
     * @param id 使用者id
     * @return 使用者物件
     */
    List<User> getUserById(Integer id);
}
<!--    User getUserById(Integer id);-->
    <select id="getUserById" resultType="User">
        select * from  t_users where id= #{id}
    </select>
    @Test
    public void getUserById(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> result  = mapper.getUserById(4);
        System.out.println(result);
    }

Eg2:查詢出的資料有多條

//SelectMapper 介面
    /**
     * 查詢所有使用者
     * @return List<User>
     */
    List<User> getUsers();
<!--    List<User> getUsers();-->
    <select id="getUsers" resultType="User">
        select * from  t_users
    </select>
    @Test
    public void getUsers(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> result  = mapper.getUsers();
        System.out.println(result);
    }

其他返回資料型別(補充:MyBatis類型別名)

Eg3:返回資料為一行一列

//SelectMapper 介面
    /**
     * 查詢使用者錶行數
     * @return Integer
     */
    Integer getCount();
<!--    Integer getCount();-->
    <select id="getCount" resultType="java.lang.Integer">
        select count(*) from t_users
    </select>

resultType中填寫IntegerintegerintInt_int都不會報錯

原因在 官方手冊Configuration XML > typeAliases(類型別名)

因為MyBatis中設定預設的類型別名

Alias Mapped Type
_int int
int Integer
integer Integer

Alias:別名

Mapped Type:對映地址


java.lang.Integer --> int , Integer

int --> _int , _integer

Map --> map

String --> string

    @Test
    public void getCount(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Integer result  = mapper.getCount();
        System.out.println(result);
    }

Eg4:返回一條資料 返回資料型別為Map集合

//SelectMapper 介面
    /**
     * 根據使用者id獲取Map型別的資訊
     * @param id 使用者id
     * @return Map型別使用者資訊 Map<String,Object>
     */
    Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
<!--    Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
    <select id="getUserByIdToMap" resultType="map">
        select * from t_users where userId= #{id}
    </select>
   @Test
   public void getUserByIdToMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> result  = mapper.getUserByIdToMap(4);
        System.out.println(result);
    }

獲得的map集合結果以欄位為鍵

輸出結果如下

{userPassword=123456改了密碼, userCount=test001, userGrade=1, userRegDate=2022-03-01T00:00, userName=測試使用者改了名, userId=4, userBlance=0}

Eg5:返回多條資料 返回資料型別為map集合

(1)方式1: 將多個Map放在List中

//SelectMapper 介面
    /**
     * 獲取所有使用者資訊
     * @return Map型別使用者資訊 Map<String,Object>
     */
    List<Map<String,Object>> getusersToMap();
}
<!--    Map<String,Object> getusersToMap();-->
    <select id="getusersToMap" resultType="map">
        select * from t_users
    </select>
    @Test
    public void getUsersToMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<Map<String, Object>> result  = mapper.getusersToMap();
        System.out.println(result);
    }

(2)方式2: @MapKey()註解

//SelectMapper 介面
    /**
     * 獲取所有使用者資訊
     * @return Map型別使用者資訊 Map<String,Object>
     */
    @MapKey("userId")//MySQl中欄位名,最好為key
    Map<String,Object> getusersToMap();
<!--    Map<String,Object> getusersToMap();-->
    <select id="getusersToMap" resultType="map">
        select * from t_users
    </select>
    @Test
    public void getUsersToMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
//        List<Map<String, Object>> result  = mapper.getusersToMap();
        Map<String, Object> result  = mapper.getusersToMap();
        System.out.println(result);
    }

輸出結果如下

{1={userPassword=qq2686485465, userCount=mllt9920, userGrade=999, userRegDate=2022-03-20T00:00, userName=萌狼藍天, userId=1, userBlance=100000000}, 2={userPassword=134679852, userCount=xrilang, userGrade=888, userRegDate=2022-03-25T00:00, userName=向日狼, userId=2, userBlance=10240000}, 4={userPassword=123456改了密碼, userCount=test001, userGrade=1, userRegDate=2022-03-01T00:00, userName=測試使用者改了名, userId=4, userBlance=0}, 5={userPassword=123, [email protected], userGrade=0, userName=張三, userId=5, userBlance=0}}