MyBatis 是一个优秀的持久层框架,它简化了与数据库的交互,避免了大量的 JDBC 代码。以下是一个使用 MyBatis 实现简单数据库操作的案例。
1.环境搭建
JDK 8+
MySQL 5.7.19
Gradle
IDEA
创建数据库和表
create table if not exists demo.user
(
id bigint auto_increment primary key,
name varchar(20) null
);
创建gradle项目,添加依赖(MyBatis核心包、数据库驱动、日志组件)
build.gradle
dependencies {
implementation 'org.mybatis:mybatis:3.5.19'
implementation 'org.slf4j:slf4j-log4j12:1.7.5'
runtimeOnly 'mysql:mysql-connector-java:8.0.22'
}
2.配置文件
配置日志文件:log4j.properties
resources/log4j.properties
log4j.rootLogger=DEBUG,A1
log4j.logger.org.apache=DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
核心配置文件mybatis-config.xml:配置数据源、Mapper扫描路径
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>
<properties resource="db.properties"/>
<typeAliases>
<package name="com.site.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
resources/db.properties
mysql.driver = com.mysql.cj.jdbc.Driver
mysql.url = jdbc:mysql://localhost:3306/demo?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
mysql.username = db_user
mysql.password = db_pass
映射文件UserMapper.xml:编写SQL语句并绑定接口方法
resources/mapper/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.site.mapper.UserMapper">
<select id="selectAll" resultType="User">
select * from user
</select>
<insert id="add" parameterType="com.site.pojo.User">
insert into user (name) values (#{name})
</insert>
</mapper>
3.代码编写
创建实体类(与数据库表字段对应)
com/site/pojo/User.java
package com.site.pojo;
public class User {
Long id;
String name;
//getter & setter
}
定义Mapper接口,如UserMapper
com/site/mapper/UserMapper.java
package com.site.mapper;
import com.site.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> selectAll();
int add(User user);
}
4.单元测试
使用JUnit验证增删改查操作
com/site/UserTests.java
package com.site;
import com.site.mapper.UserMapper;
import com.site.pojo.User;
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 org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserTests {
@Test
public void testSelectAll() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
users.forEach(user -> {
System.out.println(user);
});
sqlSession.close();
}
@Test
public void testAdd() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setName("test3");
int result = mapper.add(user);
System.out.println(result);
sqlSession.commit();
sqlSession.close();
}
}
MyBatis官网文档中还有更多的内容介绍,可以参考学习。
官网:https://mybatis.org/mybatis-3/zh_CN/getting-started.html
5.小结
本文学习了Mybatis的入门配置及操作,通过该实战能高效完成对数据库的基础操作同时也保持了对SQL的掌控。为后续学习Mybatis的更多特性及与SpringBoot整合打下基础。