MyBatis的每個查詢映射的返回類型都是ResultMap,只是當咱們提供的返回類型屬性是resultType的時候,MyBatis對自動的給咱們把對應的值賦給resultType所指定對象的屬性,而當咱們提供的返回類型是resultMap的時候,將數據庫中列數據複製到對象的相應屬性上,能夠用於複製查詢,二者不能同時用。java
一、resultTypemysql
返回單個實例sql
<select id="selectUser" parameterType="int" resultType="User">數據庫
select * from user where id = #{id}安全
</select>
返回List集合session
<select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" -->
select * from user
</select>
mybatis
二、resultMapapp
簡單查詢:ide
<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(); } } }