MyBatis Mapper XML



  • Mapper XML

    在上一章中,我们了解了如何使用XML文件配置MyBatis。本章讨论了Mapper XML文件及其提供的各种映射的SQL语句。在继续映射语句之前,假定MYSQL数据库中存在以下名为Student的表记录-
    
    +----+-------+--------+------------+-----------+---------------+
    | ID |  NAME | BRANCH | PERCENTAGE |   PHONE   |     EMAIL     |
    +----+-------+--------+------------+-----------+---------------+
    |  1 | Shyam |   it   |     80     | 954788457 | mail@mail.com |
    +----+-------+--------+------------+-----------+---------------+
    
    
    还假设相对于上表,POJO类也存在名为Student类,如下所示-
    
    public class Student {
       private int id;
       private String name;
       private String branch;
       private int percentage;
       private int phone;
       private String email;
       
       //Setters and getters   
    }
    
    
  • mapper 标签

    Mapper XML是MyBatis中的重要部分,其中包含一组用于配置各种SQL语句(例如SELECT,INSERT,UPDATE和DELETE)的语句。这些语句称为映射语句或映射SQL语句。
    • 所有语句都有唯一的ID。要执行这些语句中的任何一条,您只需要将适当的id传递给Java Application中的方法即可(这将在后面的章节中详细讨论)。
    • Mapper XML文件避免了在应用程序中重复编写SQL语句的负担。与JDBC相比,使用MyBatis中的Mapper XML文件减少了几乎95%的代码。
    • 所有这些映射的SQL语句都驻留在名为<mapper>的元素内。该元素包含一个名为'namespace'的属性。
    
    <mapper namespace = "Student">
       //mapped statements and result maps
    <mapper> 
    
    
    下面通过示例讨论所有映射的SQL语句。
  • INSERT

    在MyBatis中,要将值插入表中,我们必须配置插入映射查询。MyBatis为插入映射器提供了各种属性,但是在很大程度上我们使用id和参数类型。id是用于标识插入语句的唯一标识符。另一方面,parametertype是将被传递到语句中的类名或参数的别名。下面给出的是插入映射查询的示例-
    
    <insert id = "insert" parameterType = "Student">
       INSERT INTO STUDENT1 (NAME, BRANCH, PERCENTAGE, PHONE, EMAIL ) 
       VALUES (#{name}, #{branch}, #{percentage}, #{phone}, #{email});    
    </insert>
    
    
    在给定的示例中,我们使用Student(class)类型的参数。班级学生是POJO班级,它以name,branch,percentage,phone和email为参数表示学生记录。您可以使用Java API调用“insert”映射查询,如下所示-
    
    //Assume session is an SqlSession object.  
    session.insert("Student.insert", student);
    
    
  • UPDATE

    要使用MyBatis更新现有记录的值,需要配置映射查询更新。更新映射查询的属性与插入映射查询的属性相同。以下是更新映射查询的示例-
    
    <update id = "update" parameterType = "Student">
       UPDATE STUDENT SET EMAIL = #{email}, NAME = #{name}, BRANCH = #{branch}, PERCENTAGE = #{percentage}, PHONE = #{phone} WHERE ID = #{id};
    </update>
    
    
    要调用UPDATE查询,请实例化Student类,设置代表需要更新的列的变量的值,然后将此对象作为参数传递给update()方法。您可以使用Java API调用更新映射的查询,如下所示-
    
    //Assume session is an SqlSession object.  
    session.update("Student.update",student);
    
    
  • UPDATE

    要使用MyBatis更新现有记录的值,需要配置映射查询更新。更新映射查询的属性与插入映射查询的属性相同。以下是更新映射查询的示例-
    
    <update id = "update" parameterType = "Student">
       UPDATE STUDENT SET EMAIL = #{email}, NAME = #{name}, BRANCH = #{branch}, PERCENTAGE = #{percentage}, PHONE = #{phone} WHERE ID = #{id};
    </update>
    
    
    要调用UPDATE查询,请实例化Student类,设置代表需要更新的列的变量的值,然后将此对象作为参数传递给update()方法。您可以使用Java API调用更新映射的查询,如下所示-
    
    //Assume session is an SqlSession object.  
    session.update("Student.update",student);
    
    
  • DELETE

    要使用MyBatis删除现有记录的值,需要配置映射查询“delete”。“delete”映射查询的属性与插入和更新映射查询相同。以下是删除映射查询的示例-
    
    <delete id = "deleteById" parameterType = "int">
       DELETE from STUDENT WHERE ID = #{id};
    </delete>
    
    
    您可以使用MyBatis Java API提供的SqlSession接口的delete方法来调用delete映射查询,如下所示-
    
    //Assume session is an SqlSession object.  
    session.delete("Student.deleteById", 18);
    
    
  • SELECT

    要检索数据,使用“SELECT”映射器语句。以下是选择映射查询以检索表中所有记录的示例-
    
    <select id = "getAll" resultMap = "result">
       SELECT * FROM STUDENT; 
    </select>
    
    
    您可以使用selectList()方法检索选择查询返回的数据。此方法以List的形式返回所选记录的数据,如下所示-
    
    List<Student> list = session.selectList("Student.getAll");
    
    
  • resultMaps

    这是MyBatis中最重要和最强大的元素。SQL SELECT语句的结果映射到Java对象(beans/POJO)。定义resultMaps后,我们可以从几个SELECT语句中引用它们。以下是结果映射查询的示例;它将选择查询的结果映射到Student类-
    
    <resultMap id = "result" type = "Student">
       <result property = "id" column = "ID"/>
       <result property = "name" column = "NAME"/>
       <result property = "branch" column = "BRANCH"/>
       <result property = "percentage" column = "PERCENTAGE"/>
       <result property = "phone" column = "PHONE"/>
       <result property = "email" column = "EMAIL"/>
    </resultMap>
    
    <select id = "getAll" resultMap = "result">
       SELECT * FROM STUDENT; 
    </select>
    
    <select id = "getById" parameterType = "int" resultMap = "result">
       SELECT * FROM STUDENT WHERE ID = #{id};
    </select>
    
    
    提示: – 如果表的属性和列名都相同,则不必强制写入 resultMap 的column属性。