MyBatis 注解开发
MyBatis 最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的。而到了 MyBatis3 提供了新的基于注解的配置。
我们可以使用 XML 方式编写 SQL 映射语句,实现对数据库的增删改查操作。MyBatis 提供另外一种方式,使用 Java 注解编写 SQL 映射语句。
1. 准备数据
在 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');
2. 创建 Java POJO 类 User
User 类位于 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; } }
3. 创建映射类 UserMapper
在前面章节中,使用 XML 方式编写sql映射语句,映射文件是 UserMapper.xml,类似的,使用注解方式,映射文件可命名为 UserMapper.java。
UserMapper 是一个接口,我们通过给接口函数加注解编写 SQL 映射语句。
可比较一下注解方式与 XML 方式编写 SQL 映射语句的异同。
UserMapper 类位于 UserMapper.java 文件:
public interface UserMapper { final String getAll = "SELECT * FROM User"; final String getById = "SELECT * FROM User WHERE id = #{id}"; final String deleteById = "DELETE from User WHERE id = #{id}"; final String insert = "INSERT INTO User (name) VALUES (#{name})"; final String update = "UPDATE User SET name = #{name} WHERE id = #{id}"; @Select(getAll) @Results(value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name") }) List<User> getAll(); @Select(getById) @Results(value = { @Result(property = "id", column = "ID"), @Result(property = "name", column = "NAME") }) User getById(long id); @Update(update) void update(User user); @Delete(deleteById) void delete(long id); @Insert(insert) @Options(useGeneratedKeys = true, keyProperty = "id") void insert(User user); }
3. 修改 Config.xml
修改 MyBatis Config.xml 中的 mapper 标签,MyBatis Config.xml中的 <mapper> 指向映射文件位置,按如下修改:
<mappers> <mapper class = "com.aizws.demo.mapper.UserMapper"/> </mappers>
4. 修改 main类
修改 App.java 文件中的应用程序 main类。
package com.aizws.demo; import java.io.IOException; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.aizws.demo.mapper.UserMapper; public class App { public static void main(String args[]) throws IOException { Reader reader = Resources.getResourceAsReader("MyBatis Config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); System.out.println("------------ 数据插入 -----------"); // 创建用户对象 User user = new User("newUser100"); // 插入新用户到数据库 mapper.insert(user); session.commit(); System.out.println("数据插入成功"); System.out.println("------------ 读取用户列表 -----------"); List<User> userList = mapper.getAll(); for (User u : userList) { System.out.println(u.getId()); System.out.println(u.getName()); } System.out.println("读取用户列表成功"); System.out.println("------------ 读取用户详情 -----------"); User user1 = (User) mapper.getById(user.getId()); System.out.println(user1.getId()); System.out.println(user1.getName()); System.out.println("读取用户详情成功"); System.out.println("------------ 修改用户 -----------"); user1.setName("userNameUpdated"); mapper.update(user1); session.commit(); // 查询修改后的用户详情 User user2 = (User) mapper.getById(user.getId()); System.out.println(user2.getId()); System.out.println(user2.getName()); System.out.println("修改用户成功"); System.out.println("------------ 删除用户 -----------"); mapper.delete(user.getId()); System.out.println("删除用户成功"); session.commit(); session.close(); } }
运行结果:
------------ 数据插入 ----------- 数据插入成功 ------------ 读取用户列表 ----------- 1 user1 2 userNameUpdated 3 user3 4 user4 5 user5 6 newUser100 8 newUser100 9 newUser100 10 newUser100 11 newUser100 12 newUser100 13 newUser100 14 newUser100 读取用户列表成功 ------------ 读取用户详情 ----------- 14 newUser100 读取用户详情成功 ------------ 修改用户 ----------- 14 userNameUpdated 修改用户成功 ------------ 删除用户 ----------- 删除用户成功
下一章:MyBatis 与 Hibernate 对比、区别
MyBatis 与 Hibernate 比较和区别:MyBatis 和 Hibernate 之间有很大的区别,Hibernate 以 Java 对象为中心,是一种 ORM,MyBatis 以 SQL 为中心,是加强版 SQL,两者适用场景不一样。Hibernate 与 MyBatis 都可以是通过 SessionFactoryBuider 由 XML 配置文件生成 SessionFactory。