MyBatis的学习之路(二)

    上篇文章介绍了MyBatis的配置文件,现在来介绍实体映射文件Mapper.xml。

    说道实体映射文件,就不得不说一下实体与表之间的映射关系:单表映射和多表映射。

    a. 单表映射

1 public class Admin{
2     private String id;
3     private String name;
4     private String password;
5     //三个属性的setter和getter方法
6 }

    映射文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="yitian.study.dao.mapper">
 6     <resultMap id="adminMapper" type="com.xxx.entity.Admin">
 7         <id property="id" column="id"/>
 8         <result property="name" column="name"/>
 9         <result property="password" column="password"/>
10     </resultMap>
11     <select id="selectAdmin"
12             resultType="Admin" parameterType="Admin">
13         SELECT *
14         FROM Admin
15         WHERE id = #{id}
16     </select>
17     <select id="selectAdminByName"
18             resultType="Admin">
19         SELECT *
20         FROM Admin
21         WHERE name = #{name}
22     </select>
23     <insert id="insertAdmin"
24             useGeneratedKeys="true">
25         INSERT INTO Admin (name, password) VALUES (#{name}, #{password})
26     </insert>
27     <update id="updateAdmin">
28         UPDATE Admin
29         SET password = #{password}
30         WHERE id = #{id}
31     </update>
32     <delete id="deleteAdmin">
33         DELETE FROM Admin
34         WHERE id = #{id}
35     </delete>
36 </mapper>
View Code

    映射文件包含实体类的映射和5条SQL语句,分别是增删查改以及按名称查找。每一条语句都需要一个标识符(id),将会在后面再代码中用到。如果是查询语句还需要resultType,指定返回类型。MyBatis会将数据表列名和这里指定的类型属性按名称自动映射起来。如果需要在语句中传入参数,可以使用 parameterType属性,指定Java实体类的全名或简写,然后就可以在SQL语句中使用#{}来访问参数的属性了。如果是简单的映射,那么parameterType属性还可以省略,MyBatis会自动从传入的Java对象中获取相应的属性。对于某些数据库(例如MySQL),还可以在插入的时候指定useGeneratedKeys="true",让数据库自动生成主键。  

    常用的方法有增删查改这几个方法。这些方法的第一个参数是前面我们在映射文件中定义的语句ID,第二个参数是要传入的参数。对于查询来说有selectOne和selectList方法,它们的区别主要在于返回个数,如果确定只返回一个对象就使用selectOne方法。

  示例如下:

1 Admin admin = sqlSession.selectOne("selectAdminByName",name);

    上述方法是采用字符串来指定要使用的查询。MyBatis还给我们提供了一种映射类的方式来实现sql语句。

    映射类其实就是一个简单的接口。该接口中的方法和映射文件中定义的语句一一对应。接口方法的名称必须和语句id完全相同,接口方法的返回值和参数和相应的语句相对应。

public interface AdminMapper {
    Admin selectAdmin(int id);
 
    Admin selectAdminByName(String name);
 
    void insertAdmin(Admin admin);
 
    void updateAdmin(Admin admin);
 
    void deleteAdmin(Admin admin);
}

   仅仅增加映射类还不够,我们需要修改映射文件,以便让MyBatis能找到这个映射类。做法就是将映射文件的命名空间改为对应的映射类的类名。

<mapper namespace="com.xxx.mapper.AdminMapper">

   在两者定义好之后,我们就可以使用了。在SqlSession上调用getMapper方法,并传入要获取的Mapper类即可。

1 AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);
2 Admin s = mapper.selectAdminByName(name);

     b. 多表映射

      关于多表映射的书写,请参考这篇文章----《MyBatis快速入门(2):多表映射》个人觉得讲的还不错,本人就不在赘述了。

posted @ 2017-11-09 17:35  守明  阅读(127)  评论(0编辑  收藏  举报