MyBatis 框架概述
- mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 Jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动,创建连接,创建 statement 等繁杂的过程。
- mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 Mybatis 框架执行 sql 并将结果映射为 Java 对象并返回。
- 采用 ORM 思想解决了实体和数据库映射的问题,对 Jdbc 进行了封装,屏蔽了 Jdbc api 底层访问细节,使我们不用于 jdbc api 打交道,就可以完成对数据库的持久化操作。
正式使用 MyBatis
- 导入该依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
- 在 resources 中创建 mybatis 主配置文件 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>
<!--配置环境-->
<environments default="mysql">
<!--配置Mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/eesy_mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL"/>
<property name="username" value="root"/>
<property name="password" value="666666"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="com/oym/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
- 创建映射配置文件 IUserDao.xml (在resources中文件路径与在 java 文件中对应)
<?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.oym.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.oym.domain.User">
select * from user
</select>
</mapper>
注意事项:
- 创建 IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
在MyBatis 中它是把持久层的操作接口名称和映射文件也叫作: Mapper
所以, IUserDao 和 IUserMapper 是一样的。 - 在 IDEA 中创建目录时,它和包是不一样的(即在 resources下创建时)
包在创建时, com.oym.dao 是三级结构
目录在创建时:com.oym.dao 是一级目录 - mybatis 的映射配置文件位置必须和 dao 接口的包结构相同
- 映射配置文件的 mapper标签 namespace属性的取值必须是 dao接口的全限定类名
- 映射配置文件的操作配置,id属性的取值必须是 dao接口的方法名
当我们遵从了第三,四,五点之后,我们在开发中就不须再写 dao的实现类。
- 入门案例:
/*
* mybatis的入门案例*/
public class MybatisTest {
/*
入门案例*/
public static void main(String[] args)throws Exception {
//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接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
-
mybatis 的入门案例
第一步:读取配置文件
第二步:创建SqlSessionFactory工厂
第三步:创建SqlSession
第四步:创建Dao接口的代理对象
第五步:执行dao中的方法
第六步:释放资源 -
注意事项:
不要忘记在映射配置中告知mybatis要封装到哪个实体类中
配置的方式:指定实体类的全限定类名
- mybatis基于注解的入门案例:
把 IUserDao.xml 移除,在 dao接口的方法上使用 @Select 注解,并且指定 SQL语句
同时需要在 SqlMapConfig.xml 中的 mapper 配置时,使用 class属性指定 dao接口的全限定类名。
/*用户的持久层接口*/
public interface IUserDao {
/*查询所有操作*/
@Select("select * from user")
List<User> findAll();
}
在SqlMapConfig.xml 中的 mapper 配置:
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
如果是用注解来配置的话,此处应该使用class属性指定被注解的dao全限定类名
-->
<mappers>
<mapper class="com.oym.dao.IUserDao"></mapper>
</mappers>
- 明确:
我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
不管使用XML还是注解配置。
但是Mybatis它是支持写dao实现类的。
- 以下是转载的黑马视频的重要图解(bilibili@一只学弱狗)
- Mybatis 分析:
- 查询所有的分析:
- 入门案例分析:
- 自定义 Mybatis 分析: