MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
一、MyBatis 简介
1.1 MyBatis 的优势
- 简化数据库操作:MyBatis 提供了强大的映射功能,可以将 SQL 语句与 Java 对象进行映射,简化了数据库操作。
- 灵活的配置:MyBatis 支持使用 XML 或注解进行配置,灵活方便。
- 支持自定义 SQL:MyBatis 支持自定义 SQL,可以满足复杂的查询需求。
- 插件机制:MyBatis 提供了插件机制,可以扩展其功能。
1.2 MyBatis 的适用场景
- 中小型项目:MyBatis 简单易用,适合中小型项目。
- 复杂查询:MyBatis 支持自定义 SQL,可以满足复杂查询需求。
- 分层开发:MyBatis 支持分层开发,可以将业务逻辑与数据访问层分离。
二、MyBatis 入门
2.1 环境搭建
- 下载 MyBatis:从 MyBatis 官网下载 MyBatis 的 jar 包。
- 添加依赖:在项目的 pom.xml 文件中添加 MyBatis 的依赖。
- 配置 MyBatis:在项目的 resources 目录下创建 mybatis-config.xml 文件,配置 MyBatis 的环境。
<?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.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/myproject/mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.2 创建 Mapper 接口
在项目的 com.myproject.mapper 包下创建 UserMapper 接口。
package com.myproject.mapper;
public interface UserMapper {
User getUserById(int id);
}
2.3 创建 Mapper XML
在项目的 resources 目录下创建 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.myproject.mapper.UserMapper">
<select id="getUserById" resultType="com.myproject.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
2.4 使用 MyBatis
在项目的 com.myproject.mapper 包下创建 MyBatisUtil 类,用于获取 SqlSessionFactory。
package com.myproject.util;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
public static SqlSessionFactory getSqlSessionFactory() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
}
在项目的 com.myproject.mapper 包下创建 UserMapperTest 类,用于测试 MyBatis。
package com.myproject.mapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
public class UserMapperTest {
@Test
public void testGetUserById() throws Exception {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
} finally {
sqlSession.close();
}
}
}
三、MyBatis 实战
3.1 实战项目
以下是一个简单的 MyBatis 实战项目,用于演示如何使用 MyBatis 进行数据库操作。
- 创建数据库:创建一个名为 mydb 的数据库,并创建一个名为 user 的表。
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
- 创建实体类:在项目的 com.myproject.entity 包下创建 User 类。
package com.myproject.entity;
public class User {
private int id;
private String name;
private int age;
// 省略 getter 和 setter 方法
}
- 创建 Mapper 接口:在项目的 com.myproject.mapper 包下创建 UserMapper 接口。
package com.myproject.mapper;
public interface UserMapper {
void addUser(User user);
User getUserById(int id);
void updateUser(User user);
void deleteUser(int id);
}
- 创建 Mapper XML:在项目的 resources 目录下创建 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.myproject.mapper.UserMapper">
<insert id="addUser" parameterType="com.myproject.entity.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<select id="getUserById" resultType="com.myproject.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<update id="updateUser" parameterType="com.myproject.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
- 使用 MyBatis:在项目的 com.myproject.mapper 包下创建 UserMapperTest 类,用于测试 MyBatis。
package com.myproject.mapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
public class UserMapperTest {
@Test
public void testAddUser() throws Exception {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setName("张三");
user.setAge(20);
userMapper.addUser(user);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
@Test
public void testGetUserById() throws Exception {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
} finally {
sqlSession.close();
}
}
@Test
public void testUpdateUser() throws Exception {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(1);
user.setName("李四");
user.setAge(21);
userMapper.updateUser(user);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
@Test
public void testDeleteUser() throws Exception {
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser(1);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
}
四、总结
本文详细介绍了 Java 开源框架 MyBatis,从入门到实战。通过本文的学习,读者可以了解到 MyBatis 的优势、适用场景、入门步骤以及实战项目。希望本文能帮助读者更好地掌握 MyBatis,并将其应用到实际项目中。
