封裝mybatis的輸出結(jié)果方式
封裝mybatis的輸出結(jié)果
- 封裝輸出結(jié)果:MyBatis執(zhí)行sql語(yǔ)句,得到ResultSet,轉(zhuǎn)為java對(duì)象。
resultType
resultType屬性:在執(zhí)行select時(shí)使用,作為標(biāo)簽的屬性值出現(xiàn)的
resultType:表示類型,mysql執(zhí)行sql語(yǔ)句,得到j(luò)ava對(duì)象的類型,它的值有兩種
- java類型的全限定名稱( 根據(jù)Dao接口中的方法返回值類型確定)
- 使用別名
resultType表示java自定義對(duì)象
全限定名稱
Student selectById(Integer id);
<select id="selectById" parameterType="int" resultType="indi.yuluo.domain.Student">
select id,name,email,age from student where id=#{studentId}
</select>
resultType: 使用java對(duì)象的全限定名稱。表示的意思是mybatis執(zhí)行sql語(yǔ)句之后,把ResultSet中的數(shù)據(jù)轉(zhuǎn)為Student類型的對(duì)象。mybatis會(huì)做以下的操作:
1,調(diào)用indi.yuluo.domain.Student的無(wú)參構(gòu)造方法,創(chuàng)建對(duì)象:
Student student = new Student();
2, 同名的列賦值給同名的屬性
student.setId(rs.getInt("id"));
student.setString(rs.get("name"));
3,得到j(luò)ava對(duì)象,如果dao接口返回值是List集合,mybatis把student對(duì)象放入到List集合中
所以執(zhí)行 Student studen = dao.selectById(1001);得到的是數(shù)據(jù)庫(kù)中id=1001的這行數(shù)據(jù),這行數(shù)據(jù)的列值,賦給了student對(duì)象的屬性,得到studen對(duì)象,就相當(dāng)于得到了id=1001這行數(shù)據(jù)
所以在聲明實(shí)體類的時(shí)候,屬性名和列名盡量保持一致!
使用別名
自定義別名
- mybatis提供的對(duì)java類型定義簡(jiǎn)短,好記的名稱
- 自定義別名的步驟
在mybatis主配置文件中,使用typeAliases標(biāo)簽聲明別名
在mapper文件中,resultType = ”別名“
<!--類型別名-->
<typeAliases>
<!--第一種語(yǔ)法格式
type:java類型的全限定名稱(自定義類型)
alias:自定義別名
-->
<typeAlias type="indi.yuluo.domain.Student" alias="stu"/>
<typeAlias type="indi.yuluo.******" alias="****"/>
</typeAliases>
- 優(yōu)點(diǎn):別名可以自定義
- 缺點(diǎn):每個(gè)類型都需要自己定義
使用來(lái)定義別名
<!--類型別名-->
<!--別名就是每個(gè)類的類名的小寫-->
<package name="indi.yuluo.domain.Student"/>
<package name="indi.yuluo.****">
</typeAliases>
建議使用全限定名稱
resultType表示簡(jiǎn)單類型
mapper文件
<!--執(zhí)行sql語(yǔ)句,得到的是一個(gè)一行一列的值-->
<select id="countStudent" resultType="java.lang.Integer">
select count(*) from student
</select>
dan方法
/**
* 得到student這張表的記錄數(shù)
* @return
*/
Integer countStudent();
resultType表示map數(shù)據(jù)結(jié)構(gòu)
mapper文件
<!--執(zhí)行sql得到一個(gè)map數(shù)據(jù)結(jié)構(gòu)
{列名 = 列值,……}
-->
<select id="selectByMap" parameterType="int" resultType="java.util.HashMap">
select * from student where id=#{studentId}
</select>
dao方法
// 返回結(jié)果是一個(gè)Map
Map<Object, Object> selectByMap(@Param("studentId") Integer id);
單元測(cè)試
/**
* 用于測(cè)試:resultMap 返回的是一個(gè)map的數(shù)據(jù)結(jié)構(gòu)
*/
@Test
public void testSelectByMap() {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao mapper = sqlSession.getMapper(StudentDao.class);
Map<Object, Object> objectObjectMap = mapper.selectByMap(1002);
System.out.println(objectObjectMap);
sqlSession.close();
}
- 只能返回一條數(shù)據(jù)多了會(huì)報(bào)異常
resultMap
因?yàn)閿?shù)據(jù)庫(kù)的列名定義規(guī)范和java的屬性值的命名規(guī)范不同,所以會(huì)經(jīng)常使用到resultMap這個(gè)屬性
<!--
定義resultMap
id:給resultMap的映射關(guān)系七個(gè)名稱,唯一值
type:java類型的全限定名稱
-->
<resultMap id="customMap" type="indi.yuluo.vo.CustomerOnject">
<!--定義列名和屬性名的對(duì)應(yīng)-->
<!--主鍵類型使用id標(biāo)簽-->
<id column="id" property="cid"/>
<!--非主鍵類型使用result標(biāo)簽-->
<result column="name" property="cname"/>
<!--列名和屬性名相同不定義-->
<result column="emial" property="email"/>
</result>
<!--使用resultMap屬性的id值來(lái)指定映射關(guān)系-->
<select id="selectByMap" resultMap="customMap">
select * from student where id=#{studentId}
</select>
- 定義了之后可以反復(fù)使用
resultType和ruseltMap二選一,不能同時(shí)使用
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密
這篇文章主要介紹了Springboot如何實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
解析Spring中@Controller@Service等線程安全問(wèn)題
這篇文章主要為大家介紹解析了Spring中@Controller@Service等線程的安全問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Mybatis批量修改時(shí)出現(xiàn)報(bào)錯(cuò)問(wèn)題解決方案
這篇文章主要介紹了Mybatis批量修改時(shí)出現(xiàn)報(bào)錯(cuò)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
springmvc+spring+mybatis實(shí)現(xiàn)用戶登錄功能(上)
這篇文章主要為大家詳細(xì)介紹了springmvc+spring+mybatis實(shí)現(xiàn)用戶登錄功能,比較基礎(chǔ)的學(xué)習(xí)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

