resultType: 執行 sql 獲得 ResultSet 轉換的類型,也就是要返回的結果類型,使用類型的徹底限定名或別名。java
注意若是返回的是集合,那應該設置爲集合包含的類型,而不是集合自己。sql
resultType 和 resultMap,不能同時使用app
接口方法:dom
int countStudent();
mapper文件測試
<!--sql執行後返回一行一列--> <select id="countStudent" resultType="int"> select count(*) from student </select>
測試方法ui
@Test public void testRetunInt(){ int count = studentDao.countStudent(); System.out.println(" 學生總人數:"+ count); }
接口方法3d
Student selectById(int id);
mapper文件code
<select id="selectById" resultType="com.md.domain.Student"> select id,name,email,age from student where id=#{studentId} </select>
返回的是集合xml
接口方法對象
List<Student> selectStudents();
mapper文件,返回的結果類型是這個集合所包含的集合類型
<select id="selectStudents" resultType="com.md.domain.Student"> select id,name,email,age from student </select>
Student類中要寫set和get方法
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 能夠自定義 sql 的結果和 java 對象屬性的映射關係。更靈活的把列值賦值給指定屬性。
經常使用在列名和 java 對象屬性名不同的狀況
,具體看下面
使用方式:
接口方法
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>
接口方法
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='ts@qq.com', stuage=18} MyStudent{stuid=1002, stuname='無邪', stuemail='wx@qq.com', stuage=20} MyStudent{stuid=1003, stuname='白昊天', stuemail='ht@qq.com', stuage=18} MyStudent{stuid=1004, stuname='劉桑', stuemail='ls@qq.com', stuage=18} MyStudent{stuid=1005, stuname='李白', stuemail='li@qq.com', stuage=30} MyStudent{stuid=1006, stuname='王昭君', stuemail='wzj@qq.com', stuage=30}
此時的實體類仍是
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是同樣的,因此這兩種方法使用哪種都行
模糊查詢的實現有兩種方式
接口方法
/*第一種模糊查詢, 在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(); }
能夠看出這種方法很是的方便
接口方法
/* 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模糊查詢,不利於擴展
推薦第一種方式
表示sql語句的執行結果,轉換爲java對象的類型
自定義列名和java對象的屬性名對應關係