[置顶] Mybatis(五)-Mapper.xml

</pre><pre code_snippet_id="1616085" snippet_file_name="blog_20160319_2_7015561" name="code" class="java"></pre>映射语句</h1><h2>INSERT</h2><div><span style="font-family: 微软雅黑; font-size: 9pt;">一个 <span style="font-family: Consolas; font-size: 9pt;">INSERT SQL <span style="font-family: 微软雅黑; font-size: 9pt;">语句可以在<span style="font-family: Consolas; font-size: 9pt;"><insert><span style="font-family: 微软雅黑; font-size: 9pt;">元素在映射器 <span style="font-family: Consolas; font-size: 9pt;">XML <span style="font-family: 微软雅黑; font-size: 9pt;">配置文件中配置,如下所示:<br style="orphans: 2; text-align: -webkit-auto; widows: 2;" /></span></span></span></span></span></span></span></div><div><span style="font-family: 微软雅黑; font-size: 9pt;"><span style="font-family: Consolas; font-size: 9pt;"><span style="font-family: 微软雅黑; font-size: 9pt;"><span style="font-family: Consolas; font-size: 9pt;"><span style="font-family: 微软雅黑; font-size: 9pt;"><span style="font-family: Consolas; font-size: 9pt;"><span style="font-family: 微软雅黑; font-size: 9pt;"></span></span></span></span></span></span></span><pre name="code" class="html"><insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
VALUES(#{studId},#{name},#{email},#{phone})
</insert>

这里我们使用一个 ID insertStudent,可以在名空间 com.mybatis3.mappers.StudentMapper.insertStudent 唯一标识。 parameterType 属性应该是一个完全限定类名或者是一个类型别名(alias) 。我们可以使用下面语句调用:

int count =sqlSession.insert("com.mybatis3.mappers.StudentMapper.insertStudent", student);

sqlSession.insert() 方法返回执行 INSERT 语句后所影响的行数。

如果我们这里不使用上述方式我们可以使用创建一个映射器Mapper接口,并以此类型安全的方式调用,如下所示:

public interface StudentMapper
{
    void insertStudent(Student student);
}
你可以如下调用insertStudent 映射语句:
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
int count = mapper.insertStudent(student);

生成主键

<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true"
keyProperty="studId">
INSERT INTO STUDENTS(NAME, EMAIL, PHONE)
VALUES(#{name},#{email},#{phone})
</insert>

这里 STUD_ID 列值将会被 MySQL 数据库自动生成,并且生成的值会被设置到 student 对象的 studId 属性上
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
mapper.insertStudent(student);
现在可以如下获取插入的STUDENT 记录的 STUD_ID 的值:

int studentId = student.getStudId();

有些数据库比如说Oracle不支持AUTO_INCREMENT列,其使用序列来生成主键值。假设我们有一个名为STUD_ID_SEQ的序列来生成SUTD_ID主键值。使用如下代码来生成主键:
<insert id="insertStudent" parameterType="Student">
<selectKey keyProperty="studId" resultType="int" order="BEFORE">
SELECT ELEARNING.STUD_ID_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
VALUES(#{studId},#{name},#{email},#{phone})
</insert>

这里我们使用了<selectKey>子元素来生成主键值,并将值保存到Student 对象的 studId 属性上。 属性order=“before”表示MyBatis 将取得序列的下一个值作为主键值,并且在执行 INSERT SQL语句之前将值设置到studId属性上。
我们也可以在获取序列的下一个值时,使用触发器(trigger)来设置主键值,并且在执行INSERT SQL 语句之前将值设置到主键列上。 如果你采取这样的方式,则对应的 INSERT 映射语句如下所示:
<insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(NAME,EMAIL, PHONE)
VALUES(#{name},#{email},#{phone})
<selectKey keyProperty="studId" resultType="int" order="AFTER">
SELECT ELEARNING.STUD_ID_SEQ.CURRVAL FROM DUAL
</selectKey>
</insert>


UPDATE

一个UPDATE SQL语句可以在<update>元素在映射器XML配置文件中配置,如下所示:
<update id="updateStudent" parameterType="Student">
UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, PHONE=#{phone}
WHERE STUD_ID=#{studId}
</update>

我们可以如下调用此语句:
int noOfRowsUpdated =
sqlSession.update("com.mybatis3.mappers.StudentMapper.updateStudent", student);

sqlSession.update() 方法返回执行 UPDATE 语句之后影响的行数。
如果不使用命名空间和语句id来调用映射语句,你可以通过创建一个映射器Mapper接口,并以类型安全的方式调用方法。
Delete语句和update差不多这里不予介绍。

SELECT语句

在Mybatis中,查询语句是非常强大的功能,映射SELECT查询结果到JavaBeans方面极大的灵活性。一个简单的select查询是如何配置的,如下所示:
<select id="findStudentById" parameterType="int"
resultType="Student">
SELECT STUD_ID, NAME, EMAIL, PHONE
FROM STUDENTS
WHERE STUD_ID=#{studId}
</select>
对于多条结果我们有:
<select id="findAllStudents" resultType="Student">
SELECT STUD_ID AS studId, NAME,EMAIL, PHONE
FROM STUDENTS
</select>
返回结果集也返回List
除了 java.util.List,你也可以是由其他类型的集合类,如 Set,Map,以及(SortedSet) 。MyBatis 根据集合的类
型,会采用适当的集合实现,如下所示:
对于 ListCollectionIterable类型,MyBatis将返回 java.util.ArrayList
对于 Map 类型,MyBatis 将返回 java.util.HashMap
对于 Set 类型,MyBatis 将返回 java.util.HashSet
对于 SortedSet 类型,MyBatis 将返回 java.util.TreeSet

https://github.com/lzggsimida123/MyBatisStuding



你可能感兴趣的:([置顶] Mybatis(五)-Mapper.xml)