【MyBatis】學習筆記06:各種查詢所返回資料的資料型別
阿新 • • 發佈:2022-03-27
【MyBatis】學習筆記03:配置檔案進一步解讀(非常重要)
目錄【總結】
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中填寫
Integer
、integer
、int
、Int
、_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}}