MYBATIS教程 – 映射文件

本章讨论MyBatis的映射XML文件及增删改查等sql映射语句。

直接使用JDBC访问数据库,需要在程序中写sql语句,然后执行,如果是查询语句,必须遍历查询结果,把结果读取到对象中。

MyBatis的SQL语句写在映射文件中,不同的是,映射文件中的sql语句有很多强大功能,如动态sql可根据不同条件拼接sql语句,结果集映射功能只需配置好参数,MyBatis会直接把结果集读取到对象中,无需手动读取。MyBatis的映射文件是XML格式,实践中通常一个Java model类对应一个映射文件,如User类的对应映射文件是UserMapper.xml。

MYBATIS教程 – 环境搭建中,我们创建好了数据库,数据库中包含了一个用户表。

CREATE DATABASE IF NOT EXISTS `qikegu_mybatis` 
USE `qikegu_mybatis`;

CREATE TABLE IF NOT EXISTS `user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';

INSERT INTO `user` (`id`, `name`) VALUES
    (1, 'user1'),
    (2, 'user2'),
    (3, 'user3'),
    (4, 'user4'),
    (5, 'user5');

创建一个对应的Java类:User.java

public class User {
    private long id;
    private String name;

    public User(String name) {
        super();
        this.name = name;
    }

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

映射语句

映射语句是MyBatis映射文件中映射到sql的各种语句,如select、insert、update和delete等语句。

映射语句的特点:

  • 所有的语句都有唯一的id。要执行这些语句,只需要将对应id传递给Java方法。(后面内容中会详细讨论)。
  • 映射文件避免了Java代码中重复编写SQL语句。与JDBC相比,使用MyBatis中的映射文件减少了95%的代码量。
  • 所有映射语句都包含在<mapper>标签下,该标签有“namespace”属性。如下所示:
<mapper namespace = "User">
   // 映射语句与结果映射
<mapper> 

Insert

MyBatis中,要将值插入表,必须配置insert映射语句。insert映射语句有各种参数,通常主要使用idparameterType

id是唯一标识符,用于标识insert语句。parameterType表示传递给映射语句的参数类名或别名。

insert映射语句示例:

<insert id = "insert" parameterType = "User">
   INSERT INTO user (NAME) 
   VALUES (#{name});    
</insert>

上面的传入的参数类型是User (class)。

在映射文件中配置好insert映射语句后,在Java代码中就可以根据映射语句的id执行该语句。如下所示:

// 假设 session 是 SqlSession 实例
session.insert("User.insert", user);

可以思考一下,比较使用MyBatis映射语句与Java代码中直接写sql语句的异同。

Update

Update映射语句用于更新数据库记录。

示例:

<update id = "update" parameterType = "User">
   UPDATE user SET NAME = #{name} WHERE ID = #{id};
</update>

在Java代码中就可以根据映射语句的id执行该语句。如下所示:

// 假设 session 是 SqlSession 实例 
session.update("User.update", user);

Delete

Delete映射语句用于删除现有记录。

示例:

<delete id = "deleteById" parameterType = "long">
   DELETE from User WHERE ID = #{id};
</delete>

在Java代码中就可以根据映射语句的id执行该语句。如下所示:

// 假设 session 是 SqlSession 实例   
session.delete("User.deleteById", 3);

Select

Select映射语句用于查询数据。

<select id = "getAll" resultMap = "result">
   SELECT * FROM User; 
</select>

在Java代码中就可以根据映射语句的id执行该语句,该方法以列表形式返回结果,如下所示:

// 假设 session 是 SqlSession 实例  
List<User> list = session.selectList("User.getAll");

resultMaps

resultMaps即结果映射,是MyBatis中最重要、最强大的标签,其作用是把select sql执行结果映射到Java对象。

下面是结果映射的例子,例子中将select查询的结果映射到User类

<resultMap id = "result" type = "User">
   <result property = "id" column = "id"/>
   <result property = "name" column = "name"/>
</resultMap>

<select id = "getAll" resultMap = "result">
   SELECT * FROM User; 
</select>

<select id = "getById" parameterType = "long" resultMap = "result">
   SELECT * FROM User WHERE ID = #{id};
</select>

如果propertycolumn相同,column可省略。

例子源码

mybatis-demo1



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载