结合上篇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只能二选一。