一、MyBatis是什么
MyBatis 是一款优秀的持久层框架
MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) —>对象关系映射
支持定制化SQL,存储过程以及高级映射
它相比JDBC步骤更简洁 ,几乎避免了JDBC代码和手动设置参数以及获取结果集
MyBatis 前身是apache的一个开源项目ibatis, 2010年迁移到了,改名为MyBatis 。
2013年迁移到Github 。
GitHub : https://github.com/mybatis/mybatis-3
二、MyBatis的工作原理
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,
将接口和 Java 的 实体类映射成数据库中的记录。
工作原理:mybatis应用程序通过SqlSessionFactoryBuilder(构造器)从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)来构建SqlSessionFactory(工厂接口).;
然后,SqlSessionFactory的实例直接开启一个SqlSession(会话),再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。
说明:SqlSseeionFactoryBuilder:是一个封装对象,这个类可以被实体化,使用和丢弃,SqlSessionFactorybuilder实例的最佳作用域是方法作用域。可以重复用其创多个SqlSessionFactory实例,但用完最好不要让其一直存在,占用解析资源。
SqlSessionFactory:一旦被创建就会在应用运行期间一直存在,因此运行期间不要多次重复创建。它的最佳作用域是应用作用域。默认就是单例模式或静态单例模式
SqlSessions:SqlSession实例不是线程安全的,因此是不能被共享的。每一个HTTP请求,就可以打开一个S起来Session,返回一个响应,就关闭它。(放到finally中)
三、MyBatis的核心组件
SqlSseeionFactoryBuilder:SqlSseeionFactory(工厂接口),SqlSseeion(会话),Sql Mapper(映射器)
1. SqlSessionFactoryBuilder. 生成SqlSession,采用分布构建的builder模式
SqlSessionFactory.: 它可以生成SqlSession,采用的是工厂模式。
SqlSession.:mybatis的核心接口对象,它可以发送SQL语句返回结果,也可以获取Mapper接口。
SQL Mapper).: 它由一个Java接口和一个XML文件(或注解)构成,需要给出对应的SQL和映射规则,它可以发送SQL并返回结果。
四、MyBatis使用的思路流程
1、搭建实验数据库
CREATE DATABASE xxx
;
USE xxx
;
CREATE TABLE xxxx
(
) ;
2、导入MyBatis相关 jar 包
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
3、编写MyBatis核心配置文件
<?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">
!—每一个Mapper.xml 都需要在Mybatis核心配置文件中 —>
4、编写MyBatis工具类
package utils;
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 java.io.IOException;
import java.io.InputStream;
//SqlSessionFactory
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try{
String resource = “mybatis-config.xml”;/*根据自己路径写
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
//打印异常输出
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}<br />}<br />5、创建实体类<br />package jipo;
public class User {
private int id;
private String name;
private String pwd;
xxxxx
xxxx
(ALT+Insert)
}
6、编写Mapper接口类
import jipo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
7、编写Mapper.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="xxxx">//命名空间,一定要写正确路径
<select id="getUserList" resultType="xxx.User" >//User所在路径
select * from xxxx;
</select>
</mapper>
8、编写测试类
public class UserDaoTest {
@Test
public void test(){
//
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList){
System.out.println(user);
}
sqlSession.close();
}
}
附:要使用 MyBatis, 需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:、
maven静态资源过滤问题报错时,将build下加入以下代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>