結合上篇mybatis入門文章的介紹,項目目錄保持不變,只需要修改mapper接口和xml映射文件即可。利用person數據庫,person中現有的數據記錄如下:
一、返回一般的數據類型,String或者int
比如根據id屬性獲取數據庫中的某個字段
PersonMapper接口:
//返回String類型
public String getPerNameById(Integer id);
// 返回int類型
public Integer getPerAgeById(Integer id);
PersonMapper.xml映射文件
<select id="getPerNameById" resultType="java.lang.String">
select name from person where id = #{id};
</select>
<select id="getPerAgeById" resultType="java.lang.Integer">
select age from person where id = #{id};
</select>
測試方法:
String name = mapper.getPerNameById(1);
System.out.println(name); //kk
Integer age = mapper.getPerAgeById(3);
System.out.println(age); //26
二、返回javaBean類型
例如:根據某個字段查詢結果,將結果封裝成某個JavaBean類型的數據
PersonMapper接口:
// 返回javaBean類型
public Person getPersonById(Integer id);
PersonMapper.xml映射文件
<select id="getPersonById" resultType="com.diligentkong.mybatis.bean.Person">
select id,name,age from person where id = #{id}
</select>
測試方法:
Person person = mapper.getPersonById(1);
System.out.println(person); //Person(id=1, name=kk, age=16)
三、返回List類型
當我們進行模糊查詢或者全表查詢時,返回的數據有可能是多條記錄,可以將數據存放在list中。
PersonMapper接口:
// 返回list類型
public List<Person> getPersonByNameLike(String name);
PersonMapper.xml映射文件:
<!--resultType:如果返回的是一個集合,要寫集合中元素的類型-->
<select id="getPersonByNameLike" resultType="com.diligentkong.mybatis.bean.Person">
select * from person where name like #{name }
</select>
測試方法:
List<Person> list = mapper.getPersonByNameLike("%k%");
for (Person p : list){
System.out.println(p);
}
Person(id=1, name=kk, age=16)
Person(id=5, name=kong, age=18)
四、返回map
PersonMapper接口:
//返回map類型 ,返回一條記錄的map,key就是列名,值就是對應的值
public Map<String,Object> getPersonByIdReturnMap(Integer id);
PersonMapper.xml映射文件
<select id="getPersonByIdReturnMap" resultType="map">
select * from person where id = #{id}
</select>
測試方法:
Map<String,Object> map = mapper.getPersonByIdReturnMap(5);
System.out.println(map);
{name=kong, id=5, age=18}
PersonMapper接口:
//告訴mybatis封裝這個map的時候使用哪個屬性作爲map的key
@MapKey("name")
public Map<String,Person> getPersonByNameLikeReturnMap(String name);
PersonMapper.xml映射文件:
<select id="getPersonByNameLikeReturnMap" resultType="com.diligentkong.mybatis.bean.Person">
select * from person where name like #{name}
</select>
測試方法:
Map<String,Person> map = mapper.getPersonByNameLikeReturnMap("%k%");
System.out.println(map);
{kk=Person(id=1, name=kk, age=16), kong=Person(id=5, name=kong, age=18)}
由於我們查詢的結果返回的列名與實體類中的字段名一致,可以使用resutType。
當sql的列名和實體類的屬性名不一致時,這時就要使用resultMap。
resultMap可以自定義結果集映射規則 ,resultMap與resultType只能二選一。