教程
- ORM框架
- 框架:JPA,Hibernate,MyBatis ……
- MyBatis [中文官网](https://mybatis.org/mybatis-3/zh/)
- 搭建环境 [重点]
- 在Maven架构中创建resources目录,并在pom中配置引入
- 引入MyBatis框架(POM文件)
- 编辑.properties文件,用于编写数据库相关信息
- 创建MyBatis配置文件(XML)
- 创建映射配置文件(XML)
- 创建Mapper接口,用户封装数据操作方法
- 将映射配置文件与Mapper接口对接(spacename属性)
- 将映射配置文件,添加到MyBatis.xml中(标签下)
- 根据数据操作方法,配置映射配置文件(,…)
- 利用MyBatis的api(SqlSession)操作数据库
具体操作
- 创建一个新的项目,引入MyBatis框架(POM文件)
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
- 在src-main文件中新建一个文件resources,将其设置为资源文件
在resources文件中新建db.properties和log4j.properties
在pom.xml中填写build
- 右击创建一个MyBatis的模板(mybatis.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>
<!-- 加载类路径下的属性文件 -->
<properties resource="db.properties"/>
<!-- 设置一个默认的连接环境信息 -->
<environments default="mysql_developer">
<!-- 连接环境信息,取一个任意唯一的名字 -->
<environment id="mysql_developer">
<!-- mybatis使用jdbc事务管理方式 -->
<transactionManager type="jdbc"/>
<!-- mybatis使用连接池方式来获取连接 -->
<dataSource type="pooled">
<!-- 配置与数据库交互的4个必要属性 -->
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapperxmls/UsersMapper.xml"/>
</mappers>
</configuration>
然后在resources中新建mybatis.xml
-
右击创建一个mapperxmls,在其内部创建一个UsersMapper.xml(方法已经提前写好)
这里需要注意的是:namespace以及对应数据库方法操作的id和parameterType一定要写对! -
在domain中进行类的封装
- 创建mapper文件夹,在其内部创建UsersMapper接口
- 在右侧边栏database中配置一下数据库
- 在包下创建一个新的文件夹utils,创建一个MyBatisUtil工具类
工具类代码如下:
package com.lazy.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.Reader;
public class MybatisUtil {
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
private static SqlSessionFactory sqlSessionFactory;
/**
* 加载位于resources/mybatis.xml配置文件
*/
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 禁止外界通过new方法创建
*/
private MybatisUtil() {
}
/**
* 获取SqlSession
*/
public static SqlSession getSqlSession() {
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象为空
if (sqlSession == null) {
//在SqlSessionFactory非空的情况下,获取SqlSession对象
sqlSession = sqlSessionFactory.openSession();
//将SqlSession对象与当前线程绑定在一起
threadLocal.set(sqlSession);
}
//返回SqlSession对象
return sqlSession;
}
/**
* 关闭SqlSession与当前线程分开
*/
public static void closeSqlSession() {
//从当前线程中获取SqlSession对象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession对象非空
if (sqlSession != null) {
//关闭SqlSession对象
sqlSession.close();
//分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
threadLocal.remove();
}
}
}
- 最后使用App.java编写测试代码,测试MyBatis环境是否搭建成功
遇到的问题
- oading class
com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc
解决办法:
2. log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
解决办法: