1 简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
2 快速起步
2.1 安装
为了使用Mybatis,需要将 mybatis-x.x.x.jar 添加进类路径
如果你使用Maven进行包管理,只需在pom.xml中添加如下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
</dependencies>
在本文中,我将使用mysql数据库进行演示,因此需在pom.xml中添加mysql依赖 mysql-connector-java :
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
</dependencies>
类似的使用Oracle或SqlServer,需要添加相应的JDBC连接依赖包
2.2 获取所有用户信息
每个MyBatis应用程序都以SqlSessionFactory的一个实例为中心,而SqlSessionFactory可以通过SqlSessionFactoryBuilder来创建,SqlSessionFactoryBuilder 可以通过读取XML配置文件,或者自定义一个配置类,来创建SqlSessionFactory实例,然后就可以通过SqlSessionFactory获得SqlSession来进行数据库操作了
2.2.1 XML方式
在项目中创建如下图所示文件目录:
在mysql中,使用Navicat创建数据库test(字符集选utf8mb4,排序规则选utf8mb4_general_ci),在test数据库中创建tb_user表,并向表中插入一些数据
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`addr` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4;
省略插入数据sql语句
编写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"/>
<!--在value处填写自己的数据库连接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--将resources下的mapper/UserMapper.xml配置进来-->
<mappers>
<mapper resource="mapper/UserMapper.xml" />
</mappers>
</configuration>
编写User类 :
public class User {
private int id;
private String name;
private int age;
private String addr;
省略getter、setter、toString
}
编写UserMapper接口类 :
public interface UserMapper{
//查询所有用户
public List<User> selectAll();
}
编写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">
<!--此处 namespace值为对应UserMapper接口类的全名-->
<mapper namespace="com.mybatis_learn.mapper.UserMapper">
<!--此处 id与UserMapper接口类中查询所有用户接口名保持一致 resultType值为对应User类的全名-->
<select id="selectAll" resultType="com.mybatis_learn.entity.User">
select * from tb_user
</select>
</mapper>
至此基础配置已完成,下面开始测试
编写 test1 类进行测试 :
public class test1 {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
// 构建xml配置文件输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 通过SqlSessionFactoryBuilder创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 通过sqlSessionFactory创建SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// 使用SqlSession.selectList方法调用UserMapper接口类中的selectAll
// 此方法会使用对应UserMapper.xml中配置的id为selectAll的select方法,调用其sql语句进行查询并返回结果
List<User> users = session.selectList("com.mybatis_learn.mapper.UserMapper.selectAll", User.class);
for (User user : users) {
System.out.println(user.toString());
}
}
}
}
测试成功,控制台输出如下图所示 :
2.2.2 配置类方式
如果个人更偏向Java类配置方式而不是XML,或者创建自己的配置生成器,MyBatis提供了一个完整的配置类,它提供了与XML文件相同的所有配置选项,下面开始尝试使用这种方式 :
修改UserMapper接口类 :
public interface UserMapper{
@Select("select * from tb_user")
public List<User> selectAll();
}
创建并编写测试类 test2 :
public class test2 {
public static void main(String[] args) throws Exception {
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
String username = "root";
String password = "123456";
DataSource dataSource = new PooledDataSource(driver,url,username,password);
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
try (SqlSession session = sqlSessionFactory.openSession()) {
//创建UserMapper
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
for (User user : users) {
System.out.println(user.toString());
}
}
}
}
运行结果如下所示 :
本文内容来源于 : https://mybatis.org/mybatis-3/
可以尝试看官方文档,实现下CRUD