MyBatis的每一個查詢映射的返回類型都是ResultMap,只是當我們提供的返回類型屬性是resultType的時候,MyBatis對自動的給我們把對應的值賦給resultType所指定對象的屬性,而當我們提供的返回類型是resultMap的時候,將資料庫中列數據複製到對象的相應屬性上,可以用於 ...
MyBatis的每一個查詢映射的返回類型都是ResultMap,只是當我們提供的返回類型屬性是resultType的時候,MyBatis對自動的給我們把對應的值賦給resultType所指定對象的屬性,而當我們提供的返回類型是resultMap的時候,將資料庫中列數據複製到對象的相應屬性上,可以用於複製查詢,兩者不能同時用。
1、resultType
返回單個實例
<select id="selectUser" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
返回List集合
<select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" -->
select * from user
</select>
2、resultMap
簡單查詢:
<resultMap type="User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
</resultMap>
column:資料庫中列名稱,property:類中屬性名稱
resultMap:適合使用返回值是自定義實體類的情況
resultType:適合使用返回值得數據類型是非自定義的,即jdk的提供的類型
resultMap :
映射實體類的數據類型
resultMap的唯一標識
column: 庫表的欄位名
property: 實體類里的屬性名
配置映射文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:當前庫表映射文件的命名空間,唯一的不能重覆 -->
<mapper namespace="com.hao947.sql.mapper.PersonMapper">
<!-- type:映射實體類的數據類型 id:resultMap的唯一標識 -->
<resultMap type="person" id="BaseResultMap">
<!-- column:庫表的欄位名 property:實體類里的屬性名 -->
<id column="person_id" property="personId" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="person_addr" property="personAddr" />
<result column="birthday" property="birthday" />
</resultMap>
<!--id:當前sql的唯一標識
parameterType:輸入參數的數據類型
resultType:返回值的數據類型
#{}:用來接受參數的,如果是傳遞一個參數#{id}內容任意,如果是多個參數就有一定的規則,採用的是預編譯的形式select
* from person p where p.id = ? ,安全性很高 -->
<!-- sql語句返回值類型使用resultMap -->
<select id="selectPersonById" parameterType="java.lang.Integer"
resultMap="BaseResultMap">
select * from person p where p.person_id = #{id}
</select>
<!-- resultMap:適合使用返回值是自定義實體類的情況
resultType:適合使用返回值的數據類型是非自定義的,即jdk的提供的類型 -->
<select id="selectPersonCount" resultType="java.lang.Integer">
select count(*) from
person
</select>
<select id="selectPersonByIdWithMap" parameterType="java.lang.Integer"
resultType="java.util.Map">
select * from person p where p.person_id= #{id}
</select>
</mapper>
實體類Person.Java
<pre name="code" class="java">package com.hao947.model;
import java.util.Date;
public class Person {
private Integer personId;
private String name;
private Integer gender;
private String personAddr;
private Date birthday;
@Override
public String toString() {
return "Person [personId=" + personId + ", name=" + name + ", gender="
+ gender + ", personAddr=" + personAddr + ", birthday="
+ birthday + "]";
}
}
測試類
public class PersonTest {
SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
// 讀取資源流
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
// 初始化session工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}
@Test
public void selectPersonById() {
// 創建一個sqlsession
SqlSession session = sqlSessionFactory.openSession();
try {
Person p = session.selectOne(
"com.hao947.sql.mapper.PersonMapper.selectPersonById", 1);
System.out.println(p);
} finally {
session.close();
}
}
@Test
public void selectPersonCount() {
// 創建一個sqlsession
SqlSession session = sqlSessionFactory.openSession();
try {
Integer p = session.selectOne(
"com.hao947.sql.mapper.PersonMapper.selectPersonCount");
System.out.println(p);
} finally {
session.close();
}
}
@Test
public void selectPersonByIdWithMap() {
// 創建一個sqlsession
SqlSession session = sqlSessionFactory.openSession();
try {
Map<String ,Object> map = session.selectOne(
"com.hao947.sql.mapper.PersonMapper.selectPersonByIdWithMap",1);
System.out.println(map);
} finally {
session.close();
}
}
}