目錄
- 一、resultType
- 1. 簡單型別(掌握)
- 2. 物件型別(掌握)
- 3. Map(了解)
- 二、resultMap(了解)
- 三、物體類屬性名和列名不同
- 1. 使用resultMap
- 2. 使用列別名和resultType
- 四、模糊查詢like
- 1. 第一種
- 2. 第二種
- 五、總結
- 1. resultType
- 2. resultMap
- 3. 列名和屬性名不同
- 4. like
一、resultType
resultType: 執行 sql 得到 ResultSet 轉換的型別,也就是要回傳的結果型別,使用型別的完全限定名或別名,
注意如果回傳的是集合,那應該設定為集合包含的型別,而不是集合本身,
resultType 和 resultMap,不能同時使用
1. 簡單型別(掌握)
介面方法:
int countStudent();
mapper檔案
<!--sql執行后回傳一行一列-->
<select id="countStudent" resultType="int">
select count(*) from student
</select>
測驗方法
@Test
public void testRetunInt(){
int count = studentDao.countStudent();
System.out.println(" 學生總人數:"+ count);
}
2. 物件型別(掌握)
介面方法
Student selectById(int id);
mapper檔案
<select id="selectById" resultType="com.md.domain.Student">
select id,name,email,age from student where id=#{studentId}
</select>

回傳的是集合
介面方法
List<Student> selectStudents();
mapper檔案,回傳的結果型別是這個集合所包含的集合型別
<select id="selectStudents" resultType="com.md.domain.Student">
select id,name,email,age from student
</select>
Student類中要寫set和get方法
3. Map(了解)
sql 的查詢結果作為 Map 的 key 和 value,推薦使用 Map<Object,Object>,
注意:Map 作為介面回傳值,sql 陳述句的查詢結果最多只能有一條記錄,大于一條記錄是錯誤,
列名是map的key, 列值是map的value
介面方法
//定義方法回傳Map
Map<Object,Object> selectMapById(Integer id);
mapper檔案
<!--使用的少-->
<select id="selectMapById" resultType="java.util.HashMap">
select id,name,email from student where id=#{stuid}
</select>
測驗方法
@Test
public void testReturnMap(){
Map<Object,Object> retMap = studentDao.selectMapById(1002);
System.out.println(" 查詢結果是 Map:"+retMap);
}
二、resultMap(了解)
resultMap 可以自定義 sql 的結果和 java 物件屬性的映射關系,更靈活的把列值賦值給指定屬性,
常用在列名和 java 物件屬性名不一樣的情況,具體看下面
使用方式:
- 先定義 resultMap,指定列名和屬性的對應關系
- 在<select>中把 resultType 替換為 resultMap
介面方法
List<Student> selectAllStudents();
mapper檔案
<!--定義resultMap
id:自定義名稱,表示你定義的這個resultMap
type:java型別的全限定名稱
-->
<resultMap id="studentMap" type="com.md.domain.Student">
<!--列名和java屬性的關系-->
<!--主鍵列,使用id標簽
column :列名
property:java型別的屬性名
-->
<id column="id" property="id" />
<!--非主鍵列,使用result-->
<result column="name" property="name" />
<result column="email" property="email" />
<result column="age" property="age" />
</resultMap>
<select id="selectAllStudents" resultMap="studentMap">
select id,name, email , age from student
</select>
三、物體類屬性名和列名不同
1. 使用resultMap
介面方法
List<MyStudent> selectMyStudent();
此時的情況就是物體類的屬性名和表中的列名不同,
物體類:
public class MyStudent {
private Integer stuid;
private String stuname;
private String stuemail;
private Integer stuage;
// get、set、等方法
}
mapper檔案
<resultMap id="myStudentMap" type="com.md.domain.MyStudent">
<!--列名和java屬性的關系-->
<id column="id" property="stuid" />
<!--非主鍵列,使用result-->
<result column="name" property="stuname" />
<result column="email" property="stuemail" />
<result column="age" property="stuage" />
</resultMap>
<!--列名和屬性名不一樣:第一種方式-->
<select id="selectMyStudent" resultMap="myStudentMap">
select id,name, email , age from student
</select>
測驗方法
@Test
public void testSelectMyStudent(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<MyStudent> myStudentList = dao.selectMyStudent();
myStudentList.forEach(stu-> System.out.println(stu));
sqlSession.close();
}
// 列印的結果
MyStudent{stuid=1001, stuname='唐三', stuemail='[email protected]', stuage=18}
MyStudent{stuid=1002, stuname='無邪', stuemail='[email protected]', stuage=20}
MyStudent{stuid=1003, stuname='白昊天', stuemail='[email protected]', stuage=18}
MyStudent{stuid=1004, stuname='劉桑', stuemail='[email protected]', stuage=18}
MyStudent{stuid=1005, stuname='李白', stuemail='[email protected]', stuage=30}
MyStudent{stuid=1006, stuname='王昭君', stuemail='[email protected]', stuage=30}
2. 使用列別名和resultType
此時的物體類還是
public class MyStudent {
private Integer stuid;
private String stuname;
private String stuemail;
private Integer stuage;
// get、set、等方法
}
介面方法
List<MyStudent> selectDiffColProperty();
mapper檔案
<!--列名和屬性名不一樣:第二種方式
resultType的默認原則是 同名的列值賦值給同名的屬性, 使用列別名(java物件的屬性名)
-->
<select id="selectDiffColProperty" resultType="com.md.domain.MyStudent">
select id as stuid ,name as stuname, email as stuemail , age stuage from student
</select>
測驗方法
@Test
public void testSelectDiffColProperty(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<MyStudent> myStudentList = dao.selectDiffColProperty();
myStudentList.forEach(stu-> System.out.println(stu));
sqlSession.close();
}
結果和使用resultMap是一樣的,所以這兩種方法使用哪一種都行
四、模糊查詢like
模糊查詢的實作有兩種方式
- java 代碼中給查詢資料加上“%”
- 在 mapper 檔案 sql 陳述句的條件位置加上“%”
1. 第一種
介面方法
/*第一種模糊查詢, 在java代碼指定 like的內容*/
// 例如:唐%
List<Student> selectLikeOne(String name);
mapper檔案
<!--第一種 like , java代碼指定 like的內容-->
<select id="selectLikeOne" resultType="com.md.domain.Student">
select id,name,email,age from student where name like #{name}
</select>
測驗檔案
@Test
public void testSelectLikeOne(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<Student> studentList = dao.selectLikeOne("唐%");
studentList.forEach(stu-> System.out.println(stu));
sqlSession.close();
}
可以看出這種方法非常的方便
2. 第二種
介面方法
/* name就是唐這個值, 在mapper中拼接 like "%" 李 "%" */
List<Student> selectLikeTwo(String name);
mapper檔案
<!--第二種方式:在mapper檔案中拼接 like的內容-->
<select id="selectLikeTwo" resultType="com.md.domain.Student">
select id,name,email,age from student where name like "%" #{name} "%"
</select>
測驗
@Test
public void testSelectLikeTwo(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<Student> studentList = dao.selectLikeTwo("白");
studentList.forEach(stu-> System.out.println(stu));
sqlSession.close();
}
這種的是直接在mapper中寫死了sql模糊查詢,不利于擴展
推薦第一種方式
五、總結
1. resultType
表示sql陳述句的執行結果,轉換為java物件的型別
- 型別的全限定名稱
2. resultMap
自定義列名和java物件的屬性名對應關系
3. 列名和屬性名不同
- 使用resultMap
- 使用列別名
4. like
- 在java代碼中指定like的內容
- 在mapper檔案中拼接like
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95089.html
標籤:Java
上一篇:mybatis使用總結 (基礎)
下一篇:MyBatis動態SQL
