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。
AI 中文社