在当今的软件开发领域,数据库是存储和管理数据的核心。MyBatis 作为一款优秀的持久层框架,能够帮助我们高效地搭建数据库,并轻松实现 CRUD(创建、读取、更新、删除)操作。本文将带你深入了解 MyBatis 的魅力,并通过实战案例展示如何使用 MyBatis 实现数据库的 CRUD 操作。
一、MyBatis 简介
MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
二、MyBatis 的优势
- 简化数据库操作:MyBatis 可以将数据库操作封装成简单的 XML 或注解,降低开发难度。
- 灵活的映射配置:MyBatis 支持多种映射配置方式,如 XML、注解等,满足不同开发需求。
- 易于扩展:MyBatis 提供丰富的插件机制,方便进行功能扩展。
- 支持多种数据库:MyBatis 支持多种数据库,如 MySQL、Oracle、SQL Server 等。
三、搭建 MyBatis 项目
1. 创建 Maven 项目
首先,我们需要创建一个 Maven 项目。在 pom.xml 文件中添加以下依赖:
<dependencies>
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- MySQL 驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- 数据库连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
2. 配置 MyBatis
在 resources 目录下创建 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/test?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3. 创建实体类和 Mapper 接口
创建实体类 User.java:
package com.example.entity;
public class User {
private Integer id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
创建 Mapper 接口 UserMapper.java:
package com.example.mapper;
import com.example.entity.User;
public interface UserMapper {
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
int deleteByPrimaryKey(Integer id);
}
4. 创建 Mapper 映射文件
在 resources 目录下创建 UserMapper.xml 文件,配置 SQL 语句:
<?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">
<resultMap id="BaseResultMap" type="com.example.entity.User">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id, name, age
</sql>
<insert id="insert" parameterType="com.example.entity.User">
insert into user (id, name, age)
values (#{id}, #{name}, #{age})
</insert>
<insert id="insertSelective" parameterType="com.example.entity.User">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id},
</if>
<if test="name != null">
#{name},
</if>
<if test="age != null">
#{age},
</if>
</trim>
</insert>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
select
<include refid="Base_Column_List"/>
from user
where id = #{id}
</select>
<update id="updateByPrimaryKeySelective" parameterType="com.example.entity.User">
update user
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
where id = #{id}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.entity.User">
update user
set name = #{name},
age = #{age}
where id = #{id}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
</mapper>
四、使用 MyBatis 实现 CRUD 操作
1. 创建 MyBatis 会话工厂
package com.example.util;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "mybatis-config.xml";
try {
return new SqlSessionFactoryBuilder().build(ResourceBundle.getBundle(resource));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2. 使用 MyBatis 会话工厂执行 CRUD 操作
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class UserService {
private static SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
public static void main(String[] args) {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper userMapper = session.getMapper(UserMapper.class);
// 创建用户
User user = new User();
user.setName("张三");
user.setAge(20);
userMapper.insert(user);
// 查询用户
User user1 = userMapper.selectByPrimaryKey(1);
System.out.println(user1.getName() + ", " + user1.getAge());
// 更新用户
user1.setName("李四");
user1.setAge(21);
userMapper.updateByPrimaryKeySelective(user1);
// 删除用户
userMapper.deleteByPrimaryKey(1);
}
}
}
通过以上步骤,我们成功使用 MyBatis 实现了数据库的 CRUD 操作。MyBatis 的强大之处在于其简洁的配置和易用的 API,这使得我们能够快速搭建数据库并实现各种操作。希望本文能帮助你更好地了解 MyBatis,并在实际项目中发挥其优势。
