Mybatis
是一款优秀的持久层框架。
如何获取Mybatis
- maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
- Github:https://github.com/mybatis/mybatis-3/releases
- 中文文档:https://mybatis.org/mybatis-3/zh/index.html
持久层:
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库(JDBC),io文件持久化
为什么要持久化:
有些对象不想让他丢失
持久层:
- Dao层,Service层,Controller层
- 完成持久化工作的代码
- 层界限十分明显
为什么需要Mybatis
- 方便
- 传统的JDBC代码太复杂了,简化,框架,自动化
1、第一个Mybatis程序
1.1、搭建环境
搭建数据库:
create database mybatis
use mybatis
create table user(
id int(20) not null,
name varchar(30) default null,
pwd varchar(30) default null,
primary key(id)
);
INSERT INTO user(id,name,pwd)values(1,'华宋雨','123456'),(2,'华宋雨2','123456'),(3,'华宋雨3','123456')
操作Mybatis
- 新建项目
- 删除src
- 导入maven依赖
!--导入依赖-->
<dependencies>
<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
</dependency>
</dependencies>
创建一个模块
- 编写Mybatis的核心配置文件
<!--核心配置文件-->
<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?useSSL=true&useUnicode=true&characterEncoding=UTR-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
- 编写Mybatis的工具类
//sqlSessionFactory sqlSession
public class MybatisUtlis {
private static SqlSessionFactory sqlSessionFactory;
static{
try{
//使用mybatis第一步,获取sqlSessionFactory对象
String resoure="mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resoure);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了,
//sqlSession完全包含了面向数据库执行了sql命令所需的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
编写代码
- 实现类
public class User {
private int id;
private String name;
private String pwd;
public User(){
}
- dao接口
public interface UserDao {
List<User> getUserList();
}
- 接口实现类
<?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是绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.hua.dao.UserDao">
<!-- resultType返回一个结果
resultMap返回一个集合-->
<!--查-->
<select id="getUserList" resultType="com.hua.dao.UserDao">
select * from mybatis.user;
</select>
</mapper>
测试
遇到错误
org.apache.ibatis.binding.BindingException: Type interface com.hua.dao.UserDao is not known to the MapperRegistry.
解决
<!--每一个配置文件都要在Mybatis核心配置文件中配置-->
<mappers>
<mapper resource="com/hua/dao/UserMapper.xml"></mapper>
</mappers>
遇到错误
java.lang.ExceptionInInitializerError
解决
<!--在build中配置resuorces,来防止我们的资源导出失败-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>