基于 XML 配置映射器
关系型数据库和 SQL 是经受时间考研和验证的数据存储机制。和其他的 ORM 框架如 Hibernate 不同,MyBatis 鼓励开发者考研直接使用数据库,而不是将其对开发者隐蔽,因为这样考研充分发挥数据库服务器所提供的 SQL 语句的巨大威力。与此同时,MyBatis 消除了书写大量冗余代码的痛苦,它让使用 SQL 更容易。
在代码里直接嵌套 SQL 语句是很差的编码实践,并且维护起来困难。MyBatis 使用了映射器配置文件或注解来配置 SQL 语句。在以下的学习中,我们会看到具体怎样使用映射器配置文件来配置映射器 SQL 语句。
映射器配置文件和映射器接口
在 xx.mybatis3.mappers 包中的 StudentMapper.xml 配置文件内,配置 id 为 “findStudentById” 的 SQL 语句:
<?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="xx/mybatis3.mappers.StudentMapper">
<select id="findStudentById" parameterType="int" resultType="Student">
select stud_id as studid,name,email,dob from Students where stud_id = #{studId}
</select>
</mapper>
通过下列代码调用 findStudentById 映射的 SQL 语句:
public Student findStudentById(Integer studId){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try{
Student student = sqlSession.selectOne("xx.mybatis3.mappers.StudentMapper.findStudentById",studId);
return student;
} finally {
sqlSession.close();
}
}
INSERT 语句
MyBatis 提供了多种元素来配置不同类型的语句,如 SELECT,INSERT,UPDATE,DELETE。接下来让我们看看如何具体配置映射语句:
INSERT 语句:
<insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,PHONE) VALUES(#{studId},#{name},#{email},#{phone})
</insert>
在上述的 INSERT 语句中,我们为可以自动生成(auto-generated)主键的列 STUD_ID 插入值。我们可以使用 useGeneratedKeys 和 keyProperty 属性让数据库生成 auto_increment 列的值,并将生成的值设置到其中一个输入对象属性内,如下所示:
<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">
INSERT INTO STUDENTS(NAME,EMAIL,PHONE) VALUES (#{name},#{email},#{p