1.什么是MyBatis?
- MyBatis是一款优秀的持久层开发框架,用于简化JDBC开发
- 使开发人员只专注于SQL语句,而无需关注JDBC的API执行细节。
持久层
- 负责将数据保存到数据库的那一层代码
- JavaEE三层架构:表现层、业务层、持久层
框架
- 框架就是一个半成品,是一套可重复使用的、通用的、软件基础代码模型
- 在框架的基础上构建软件使得编写更加高效、规范、通用、可扩展
2.为什么要使用MyBatis?
3.MyBatis框架创建
步骤
- 创建user表,添加数据
- 创建模块,导入坐标
- 编写MyBatis核心文件 (替换连接信息,解决硬编码问题)
- 编写SQL映射文件(统一管理SQL语句,解决硬编码问题)
- 编码
- 定义POJO类
- 加载核心配置文件,获取SqlSessionFactory对象
- 获取SqlSession对象,执行SQL语句
- 释放资源
4.MyBatis案例
1.导入所需依赖
创建一个maven项目,在配置文件pom.xml导入MyBatis依赖包、JDBC依赖包以及其他依赖
<dependencies>
<dependency>
<!--添加MyBatis依赖-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--添加slf4j日志api-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!--添加logback-classic依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--添加logback-core依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>mybatis-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
2.编写MyBatis配置文件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>
<!--类型别名-->
<typeAliases>
<package name="com.pojo"/>
</typeAliases>
<!--
environments:配置数据库连接环境信息,可以配置多个environment,通过default属性来切换不同的environment
-->
<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/STUDENT?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--Mapper代理方式-->
<package name="com.mapper"/>
</mappers>
</configuration>
3.编写StudentMapper接口
public interface StudentMapper {
List<student> selectAll();
}
4.编写接口的实现类Mapper映射文件
<mapper namespace="com.mapper.StudentMapper">
<resultMap id="studentResultMap" type="student">
<!--数据库表的字段名称 和 实体类的属性名称 不一致, 则不能自动封装数据
*resultMap:
id:唯一标识
type:映射的类型,支持别名
1.定义<resultMap>标签
2.在<select>标签中,使用resultMap属性替换resultType属性
-->
<result column="class" property="classes"></result>
</resultMap>
<!--id表示接口的方法 -->
<select id="selectAll" resultMap="studentResultMap">
select *
from student;
</select>
</mapper>
5.编写pojo对象并自动创建getter和setter方法
public class student {
private String name;
private String dept;
private String classes;
private String sno;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", dept='" + dept + '\'' +
", classes='" + classes + '\'' +
", sno='" + sno + '\'' +
", age='" + age + '\'' +
'}';
}
}
6.加载核心配置文件,获取SQLSessionFactory
//加载mybatis的核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
7.获取SqlSession对象,执行SQL语句
//获取SqlSession对象,用于执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
8. 获取UserMapper的代理对象
//获取UserMapper的代理对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
List<student> students = studentMapper.selectAll();
9.释放资源
//释放资源
sqlSession.close();
10.编写测试方法
@Test
//查询所有数据
public void testSelectAll() throws IOException {
//1.获取sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取mapper接口的代理对象
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
//4.执行方法
List<student> students = studentMapper.selectAll();
System.out.println(students);
//5.释放资源
sqlSession.close();
}