← 返回首页

第1章: MyBatis 入门

优秀的持久层框架

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程和高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。

核心特性

💡 MyBatis vs Hibernate:

MyBatis 更灵活,适合复杂 SQL;Hibernate 更自动化,适合标准 CRUD。

快速入门

1. 添加依赖

<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>

2. 配置文件

<!-- mybatis-config.xml --> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 环境配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> <!-- 映射器 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>

3. 实体类

public class User { private Long id; private String username; private String email; private Integer age; // getter/setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }

4. Mapper 接口

public interface UserMapper { User findById(Long id); List<User> findAll(); int insert(User user); int update(User user); int delete(Long id); }

5. Mapper XML

<!-- UserMapper.xml --> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <!-- 查询单个用户 --> <select id="findById" resultType="com.example.entity.User"> SELECT * FROM users WHERE id = #{id} </select> <!-- 查询所有用户 --> <select id="findAll" resultType="com.example.entity.User"> SELECT * FROM users </select> <!-- 插入用户 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO users(username, email, age) VALUES(#{username}, #{email}, #{age}) </insert> <!-- 更新用户 --> <update id="update"> UPDATE users SET username = #{username}, email = #{email}, age = #{age} WHERE id = #{id} </update> <!-- 删除用户 --> <delete id="delete"> DELETE FROM users WHERE id = #{id} </delete> </mapper>

6. 使用示例

public class MyBatisDemo { public static void main(String[] args) throws IOException { // 读取配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 创建 SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 获取 SqlSession try (SqlSession session = sqlSessionFactory.openSession()) { // 获取 Mapper UserMapper mapper = session.getMapper(UserMapper.class); // 查询用户 User user = mapper.findById(1L); System.out.println(user.getUsername()); // 插入用户 User newUser = new User(); newUser.setUsername("张三"); newUser.setEmail("zhangsan@example.com"); newUser.setAge(25); mapper.insert(newUser); // 提交事务 session.commit(); } } }

注解方式

除了 XML,MyBatis 也支持注解方式。

public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User findById(Long id); @Select("SELECT * FROM users") List<User> findAll(); @Insert("INSERT INTO users(username, email, age) VALUES(#{username}, #{email}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int insert(User user); @Update("UPDATE users SET username=#{username}, email=#{email}, age=#{age} WHERE id=#{id}") int update(User user); @Delete("DELETE FROM users WHERE id = #{id}") int delete(Long id); }

本章小结

← 返回首页 下一章 →