一、概述
MyBatis 是一款优秀的持久层框架,Java语言开发的,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(普通的JavaBeans)为数据库中的记录。它使用了ORM思想实现了结果集的封装。
ORM:Object Relational Mapping 对象关系映射。简单地说,就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。实体类中的属性和数据库表的字段名保持一致。
二、环境搭建
2.1 使用配置文件配置
具体步骤:
- 第一步:创建Maven工程,并导入坐标
- 第二步:创建实体类和dao的接口
- 第三步:创建Mybatis的主配置文件 SqlMapConfig.xml
- 第四步:创建映射配置文件 UserDao.xml
第一步:创建Maven工程
导入坐标,pom.xml文件:
<!--打包方式-->
<packaging>jar</packaging>
<dependencies>
<!--使用mybatis,也需要导入mysql驱动jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
</dependencies>
第二步:创建实体类和dao的接口
在src/main/java/com/king/dao
目录下创建接口UserDao
在src/main/java/com/king/domain
目录下创建实体类User
第三步:创建Mybatis的主配置文件 SqlMapConfig.xml
在资源目录src/main/resources
目录下创建SqlMapConfig.xml
SqlMapConfig.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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置环境-->
<!--default是定义选择的默认值,命名没有强制要求,但是必须与environment标签的id值一致。-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--
配置数据源(连接池),取值有3个
POOLED:
-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql//localhost:3306/day01"/>
<property name="username" value="root"/>
<property name="password" value="88888888"/>
</dataSource>
</environment>
</environments>
<!--
指定映射配置文件的文件,映射配置文件指的是每个dao独立的配置文件
resource 是指定resource资源目录下的路径
-->
<mappers>
<mapper resource="com/king/dao/UserDao.xml"/>
</mappers>
</configuration>
第四步:创建映射配置文件 UserDao.xml
根据主配置文件mapper标签指定的resource路径,在资源目录resources
下创建对应的文件。第三步中mapper标签指定的resource=resource="com/king/dao/UserDao.xml"
,那么在资源目录resources
创建三级目录+文件:com/king/dao/UserDao.xml
。
UserDao.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 和 id 组合才能定位到sql语句-->
<!--namespace是UserDao的全限定类名-->
<mapper namespace="com.king.dao.UserDao">
<!--
配置查询所有
id:是dao方法的名称,不能随便写!
标签内是sql语句
resultType:指定id方法的返回值类型
-->
<select id="findAll" resultType="com.king.domain.User">
SELECT * FROM user
</select>
</mapper>
映射配置文件中,namespace 和 id 属性的作用:
mybatis需要通过namespace找到指定的dao类,再通过id定位到方法需要执行的sql语句。
即:com.king.dao.UserDao类的findAll方法要执行 SELECT * FROM user 语句
文件目录:
2、环境搭建的注意事项
- 第一:创建 UserDao.xml 和 UserDao.java 时,名称是为了和我们之前的知识保持一致。在Mybatis中,它把持久层的操作接口名称和映射文件叫做:Mapper。所以 UserDao 和 UserMapper是一样的。
- 第二:在idea中创建目录Directory时,它和包package是不一样的。
- 包package:com.king.dao 是三级目录
- 目录Directory:com.king.dao 是一级目录。
- 所以,如果使用Directory创建三级目录,需要分三次来创建。
- 第三:Mybatis的映射配置文件UserDao.xml的位置必须和dao包结构相同。
- 第四:映射配置文件的 mapper 标签 namespace 属性的取值,必须是 dao 接口的全限定类名!
- 第五:映射配置文件的操作配置,id 属性的取值必须是 dao 接口的方法名!
总结:如此配置Mybatis环境的好处:
当我们遵从了第三、四、五点之后,在开发中就无需再写dao的实现类!!!
2.2 使用注解配置,简化配置
以下都是在 2.1 使用配置文件配置 基础上进行操作!
①修改SqlMapConfig.xml
:
<mappers>
// 使用class属性指定被注解dao类的全限定类名
<mapper class="com.king.dao.UserDao"/>
</mappers>
②删除dao类的映射配置文件:resources/com/king/dao/UserDao.xml
③给dao类方法添加注解,指定sql语句
public interface UserDao {
@Select("SELECT * FROM user")
List<User> findAll();
}
三、入门
测试dao方法:
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();