Mybatis持久层框架。
一、持久化概念:
1.1数据持久化:
持久化就是将程序的数据在持久状态和瞬时状态转化的过程。
内存:断电即失。
数据库:jdbc可以持久化,io文件持久化。
1.2为什么需要持久化?
有一些对象,不能让他丢掉
内存太贵了。
1.3 持久层
1.完成持久化工作的代码块。
层界限十分明显。
1.4为什么需要Mybatais?
1.方便。
2.传统的JDBC代码太复杂了。简化。框架。自动化。
3.sql和代码的分离(以前都是写在dao的实现类中:连接数据库-写sql-执行sql)。直接写在xml中。提高了可维护性。
二、创建工程
1.NEW一个普通的maven项目。
2.重点记录的几个文件。
1.UserMapper.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.hl.dao.UserMapper">
<select id="getUserList" resultType="com.hl.pojo.User" >
select * from user
</select>
</mapper>
2.MybatisUtils 工具类
获取SqlSessionFactory 使用mybatis的必须获取的,写死。
package com.hl.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;
/**
* @author hl
* @create 2023/11/23
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
/**
* 使用三部曲:写死。
* 使用Mybatis 第一步获取:sqlSessionFactory对象
*
*/
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
3.配置文件mybatis-config.xml。
每一个mapper.xml都需要注入到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.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!--每一个mapper.xml都需要被注入mybatis-config.xml-->
<mappers>
<mapper resource="com/hl/dao/UserMapper.xml" />
</mappers>
</configuration>
4.测试UserMapperTest
package dao;
import com.hl.dao.UserMapper;
import com.hl.pojo.User;
import com.hl.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
/**
* @author hl
* @Description
* @create 2023/11/23
*/
public class UserMapperTest {
@Test
public void test(){
/**
* 第一步:获取sqlSession对象
*/
SqlSession sqlSession = MybatisUtils.getSqlSession();
/**第二步得到sqlSession 就需要与UserMapper或是UserMapper.xm建立关系,查询数据库。
面向对象编程:所以只需要建立与UserMapper层联系就行。
getMapper(getDao接口层)
*/
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
/**
* 第三步调用mapper(dao)中的getUserList
*
*/
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}
}
三、测试:
四、问题记录总结。
1.报错UserMapper.xml找不到。解决:
首先mybatis-config.xml中记得引入:
其次pom.xml 中加入:(因为maven是约定大于配置 会经常出现配置文件没被打包)
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
如果依然还报找不到:刷新maven即可。
2.日志报错(不影响项目运行。)
![](https://img-blog.csdnimg.cn/5b151158bb45439aa04787aae68e97e7.png)
解决加入下面的依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.2</version>
</dependency>
3.ERROR StatusLogger No Log4j 2 configuration file found(log4j2文件找不到)
解决:
在resource下新建一个log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>