什么是 MyBatis?
- MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- 官方文档
预备知识
- pojo就是不依赖任何框架的纯java类,例如如果一个类实现了某个框架的某个接口,那么这个类就是框架相关的类了,就不是pojo。
- dao是data access object,即数据访问对象。数据可能保存到各种数据库,或者各种文件,或者内存。dao层隐藏了这种实现细节,更换数据库或者文件或者内存,对调用dao的更高层来说不受影响。
- mapper和dao不同,mapper的目的是为了把关系数据库映射成java类(对象)。因此,如果只有mapper没有dao层,那么一旦项目需要把数据保存到文件或者内存,那么调用mapper的高层就会受到影响。
一般的项目可能只会使用数据库作为数据存储,所以mapper和dao可以说上就是一个东西了。
基本步骤
- 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
- 创建数据库
CREATE TABLE `people` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`age` int NOT NULL,
`address` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
- 创建数据库对应的实体类
public class People {
private int id;
private String name;
private int age;
private String address;
public People() {
}
public People(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- 在resource目录下创建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/school?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers><!--指定映射器,就是含有sql语句的xml文件-->
<mapper resource="com/mybatis/DAO/PeopleMapper.xml"/>
</mappers>
</configuration>
记住在config中要注册mappers
- 编写PeopleMapper.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.mybatis.DAO.PeopleMapper">
<select id="getPeopleList" resultType="com.mybatis.pojo.People">
select * from mybatis.people;
</select>
</mapper>
- 编写PeopleMapper.java
public interface PeopleMapper {
List<People> getPeopleList();
}
- 编写工具类获取SqlSession(类型JDBC中的Connection)
public class MybatisUtils {
static String resource = "mybatis-config.xml";
static InputStream inputStream;
static SqlSessionFactory sqlSessionFactory;
static {
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
- 配置pom.xml
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
要记住在pom.xml中include资源,不然main中的xml文件无法加载
- 编写测试类
public class PeopleDAOtest {
@Test
public void test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
PeopleMapper peopleMapper = sqlSession.getMapper(PeopleMapper.class);
List<People> people = peopleMapper.getPeopleList();
for (People p :people){
System.out.println(p);
}
sqlSession.close();
}
}
-
结果
-
项目结构图