1.ResultType與ResultMap的區別
- 如果你的返回結果只有一個值比如String,int什麽的用ResultType就行。
- 如果返回的是一個較複雜的對象那麼用ResultMap比较有优势。
- 當然ResultType也可以直接返回對象,但是要滿足某些條件:1.數據庫字段和你定義的實體類的屬性名必須一樣否則返回null,2.你不能單獨定義想要的返回值。
- ResultMap在複雜些的查詢中是很有用的。
例子:
實體類
數據庫表
在這裡爲了測試把數據庫中的age字段改成了ages,也就是與實體類中的不一樣了。
接下來是映射文件
<?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" >
<mapper namespace="com.sin.dao.StudentDao">
<resultMap type="Student" id="student_map">
<id property="id" column="id"/>
<result property="age" column="ages"/>
<result property="sex" column="sex"/>
</resultMap>
<insert id="insert" parameterType="Student">
insert into student(name,age,sex,clazz_id) values(#{name},#{age},#{sex},#{clazzId})
</insert>
<select id="select" resultType="Student" parameterType="int">
select * from student where id=#{id}
</select>
<select id="selectMap" resultMap="student_map" parameterType="int">
select * from student where id=#{id}
</select>
<!-- <select id="find" resultMap="" > -->
<!-- </select> -->
</mapper>
接口文件
public interface StudentDao {
public void insert (Student student);
public Student select(int id);
public Student selectMap(int id);
public List<Student> find(String sort, String dir, int start, int limit);
}
開始測試
當執行下面代碼時
@Test
public void testSelect () {
Student student = studentDao.select(1);
System.out.println(student.getName());
System.out.println(student.getAge());
}
執行結果是:zhangsan
null
當執行
@Test
public void testSelectMap () {
Student student = studentDao.selectMap(1);
System.out.println(student.getName());
System.out.println(student.getAge());
}
結果是:zhangsan
11
怎样使用基于注解的sql映射
注意:注解确实可以简化开发,有人喜欢也有人不喜欢,mybatis的这个注解貌似功能不是很好所以要写复杂的sql还是xml吧
接口StudentDao 文件
@Insert("insert into student (name,age,sex,clazz_id) values(#{name},#{age},#{sex},#{clazzId})")
public void insert (Student student);
测试文件
@Before
public void init() {
SqlMapUtils.getInstance().getConfiguration().addMapper(StudentDao2.class);//这里记得要写addMapper
studentDao2 = sqlSession.getMapper(StudentDao2.class);
}
/**
* 测试基于注解的sql语句
*/
@Test
public void testSelect4Annotation () {
Student student = new Student();
student.setAge(11);
student.setName("zhangsan");
student.setSex(true);
student.setClazzId(1);
studentDao2.insert(student);
sqlSession.commit();
}