MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
MyBatis 简介
什么是 MyBatis?
MyBatis 是一个半自动化的持久层框架,它将 SQL 映射成 Java 代码,从而简化了数据库操作。MyBatis 的核心是 SQL 映射文件,它定义了 SQL 语句和 Java 对象之间的映射关系。
MyBatis 的优势
- 简化数据库操作:无需编写繁琐的 JDBC 代码。
- 灵活的 SQL 映射:支持复杂的 SQL 语句和参数映射。
- 支持自定义 SQL 映射:可以自定义 SQL 语句,实现复杂的数据库操作。
- 易于集成:可以与 Spring 等框架集成。
MyBatis 入门
环境搭建
- 添加依赖:在 Maven 项目中添加 MyBatis 依赖。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
- 配置数据库连接:在
mybatis-config.xml文件中配置数据库连接信息。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
- 编写 SQL 映射文件:创建 SQL 映射文件,定义 SQL 语句和 Java 对象之间的映射关系。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
- 编写接口:创建接口,定义方法,MyBatis 会根据接口生成对应的 SQL 语句。
public interface UserMapper {
User selectById(Integer id);
}
- 创建 Java 对象:创建 Java 对象,用于封装查询结果。
public class User {
private Integer id;
private String name;
// 省略 getter 和 setter 方法
}
- 运行程序:运行程序,执行查询操作。
MyBatis 进阶
动态 SQL
MyBatis 支持动态 SQL,可以方便地实现复杂的 SQL 语句。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectByCondition" resultType="com.example.User">
SELECT * FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
</where>
</select>
</mapper>
插入和更新
MyBatis 支持插入和更新操作,可以方便地实现增删改查。
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser" parameterType="com.example.User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
</mapper>
关联映射
MyBatis 支持关联映射,可以方便地实现多表查询。
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="userMap" type="com.example.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="orders" column="id" select="selectOrdersByUserId"/>
</resultMap>
<select id="selectById" resultMap="userMap">
SELECT * FROM users WHERE id = #{id}
</select>
<select id="selectOrdersByUserId" resultType="com.example.Order">
SELECT * FROM orders WHERE user_id = #{id}
</select>
</mapper>
MyBatis 实战项目
项目简介
本篇将以一个简单的用户管理系统为例,介绍如何使用 MyBatis 实现增删改查操作。
项目结构
user-system
│
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── com
│ │ │ │ ├── example
│ │ │ │ │ ├── User.java
│ │ │ │ │ ├── Order.java
│ │ │ │ │ ├── UserMapper.java
│ │ │ │ │ └── OrderMapper.java
│ │ │ │ └── MyBatisConfig.java
│ │ └── resources
│ │ ├── mybatis-config.xml
│ │ ├── mapper
│ │ │ ├── UserMapper.xml
│ │ │ └── OrderMapper.xml
│ └── test
│ ├── java
│ │ ├── com
│ │ │ ├── example
│ │ │ │ ├── UserMapperTest.java
│ │ │ │ └── OrderMapperTest.java
│ └── resources
│ ├── application.properties
│ └── mybatis-config.xml
└── pom.xml
数据库设计
- 用户表:存储用户信息。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
- 订单表:存储订单信息。
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_date DATE,
amount DECIMAL(10, 2)
);
编写代码
- 创建 Java 对象:创建
User和Order类,用于封装用户信息和订单信息。 - 编写接口:创建
UserMapper和OrderMapper接口,定义方法。 - 编写 SQL 映射文件:创建
UserMapper.xml和OrderMapper.xml文件,定义 SQL 语句。 - 配置 MyBatis:在
MyBatisConfig.java文件中配置数据库连接信息。 - 编写测试代码:在
UserMapperTest.java和OrderMapperTest.java文件中编写测试代码。
总结
通过本篇教程,我们了解了 MyBatis 的基本概念、入门方法、进阶技巧以及实战项目。MyBatis 是一款优秀的持久层框架,可以帮助开发者轻松实现数据库操作。希望读者能够通过本篇教程掌握 MyBatis,并将其应用到实际项目中。
