MyBatis 映射文件
直接使用 JDBC 访问数据库,需要在程序中写 SQL 语句,然后执行,如果是查询语句,必须遍历查询结果,把结果读取到对象中。
MyBatis 的 SQL 语句写在映射文件中。映射文件中的 SQL 语句有很多强大功能,如动态 SQL 可根据不同条件拼接 SQL 语句,结果集映射功能只需配置好参数,MyBatis 会直接把结果集读取到对象中,无需手动读取。
MyBatis 的映射文件是 XML 格式,实践中通常一个 Java model 类对应一个映射文件,如 User 类的对应映射文件是 UserMapper.xml。
在 MyBatis 教程 - 环境搭建中,我们创建好了数据库,数据库中包含了一个用户表。
CREATE DATABASE IF NOT EXISTS `aizws_mybatis` USE `aizws_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 语句。与J DBC 相比,使用 MyBatis 中的映射文件减少了95%的代码量。
- 所有映射语句都包含在<mapper>标签下,该标签有“namespace”属性。如下所示:
<mapper namespace = "User"> // 映射语句与结果映射 <mapper>
1. Insert
MyBatis 中,要将值插入表,必须配置 insert 映射语句。insert 映射语句有各种参数,通常主要使用 id 及 parameterType。
id 是唯一标识符,用于标识 insert 语句。parameterType 表示传递给映射语句的参数类名或别名。
insert映射语句示例:
<insert id = "insert" parameterType = "User"> INSERT INTO user (NAME) VALUES (#{name}); </insert>
上面的传入的参数类型是 User (class)。
在映射文件中配置好 insert 映射语句后,在Java代码中就可以根据映射语句的 id 执行该语句。如下所示:
// 假设 session 是 SQL Session 实例 session.insert("User.insert", user);
可以思考一下,比较使用 MyBatis 映射语句与Java代码中直接写 SQL 语句的异同。
2. Update
Update 映射语句用于更新数据库记录。
示例:
<update id = "update" parameterType = "User"> UPDATE user SET NAME = #{name} WHERE ID = #{id}; </update>
在 Java 代码中就可以根据映射语句的 id 执行该语句。如下所示:
// 假设 session 是 SQL Session 实例 session.update("User.update", user);
3. Delete
Delete 映射语句用于删除现有记录。
示例:
<delete id = "deleteById" parameterType = "long"> DELETE from User WHERE ID = #{id}; </delete>
在 Java 代码中就可以根据映射语句的 id 执行该语句。如下所示:
// 假设 session 是 SQL Session 实例 session.delete("User.deleteById", 3);
4. Select
Select 映射语句用于查询数据。
<select id = "getAll" resultMap = "result"> SELECT * FROM User; </select>
在 Java 代码中就可以根据映射语句的 id 执行该语句,该方法以列表形式返回结果,如下所示:
// 假设 session 是 SQL Session 实例 List<User> list = session.selectList("User.getAll");
5. 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>
如果 property 与 column 相同,column 可省略。
下一章:MyBatis 插入数据
本章将介绍 MyBatis 的数据插入操作。1. 修改 UserMapper.xml 映射文件:UserMapper.xml 映射文件中包含所有 User 相关 SQL 映射语句。我们在 UserMapper.xml 中添加 insert 语句。2. 修改应用程序 main 类。3. 运行程序,输出结果。