数据持久化框架-MyBatis
一、Mybatis简介
1、Mybatis概念
Mybatis是一款优秀的持久层框架,用于简化JDBC开发。
Mybatis官网:https://mybatis.org/mybatis-3/
Mybatis中文官网:https://mybatis.org/mybatis-3/zh/index.html
2、Mybatis的历史
Mybatis前身是Apache的一个开源项目iBatis,2010年该项目由Apache迁移到google code,并且改名为Mybatis。2013年11月迁移到GitHub。
3、使用Mybatis简化JDBC的原因
使用JDBC的缺点:
- 硬编码 — 解决方案:Mybatis使用
配置文件
完成- 注册驱动
- 获取连接
- SQL语句
- 操作繁琐 — 解决方案:Mybatis配置之后自动完成
- 手动设置参数
- 手动封装结果集
二、Mybatis快速入门
查询教师表中的所有数据
1、创建数据库
- 创建数据库
teacher_db
- 创建
teacher
表,添加数据
create table teacher
(
id int comment '教师编号',
name varchar(20) not null comment '教师姓名',
sex varchar(4) not null comment '教师性别',
age int not null comment '教师年龄',
position varchar(20) not null comment '教师职务',
primary key (id)
);
insert into teacher values (1001,'张三','男',29,'讲师');
insert into teacher values (1002,'李四','女',25,'班主任');
insert into teacher values (1003,'王五','女',33,'班主任');
insert into teacher values (1004,'李红','女',34,'讲师');
insert into teacher values (1005,'张斯','男',28,'讲师');
insert into teacher values (1006,'张慧','女',29,'班主任');
insert into teacher values (1007,'刘欣','女',25,'讲师');
2、创建动态web项目
-
导入jar包
-
连接数据库的jar包
-
MyBatis需要使用的jar包
-
jstl需要的jar包
-
-
创建包结构
-
创建package
entity
包:实体类mapper
包:SQL映射文件servlet
包:请求、响应处理test
包:测试类
-
创建Source Folder(源文件夹),用于存放
配置文件
src/main/resources
-
-
编写实体类
在com.ynnz.entity下创建Java类:
Teacher.java
package com.ynnz.entity; public class Teacher { private int id; private String name; private String sex; private int age; private String position; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } @Override public String toString() { return "Teacher [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", position=" + position + "]"; } }
-
编写Mybatis核心配置文件
在src/main/resources下新建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/teacher_db?characterEncoding=utf-8&useSSL=false"/>
<!-- 数据库用户名 -->
<property name="username" value="root"/>
<!-- 数据库密码 -->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 配置SQL映射 -->
<mapper resource="com/ynnz/mapper/TeacherMapper.xml"/>
</mappers>
</configuration>
-
编写SQL映射文件
在com.ynnz.mapper下创建xml文件:
TeacherMapper.xml
官网位置说明:
入门
参数说明:
namespace
:命名空间,用于标记SQL映射文件id
:标记SQL语句resultType
:数据返回值类型
<?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="test">
<select id="selectAll" resultType="com.ynnz.entity.Teacher">
select * from teacher
</select>
</mapper>
-
加载核心配置文件
官网位置说明:
入门
-
方式一:在
控制台
输出在com.ynnz.test下创建测试类:
TeacherTest.java
package com.ynnz; 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; import java.util.List; public class MybatisTest { public static void main(String[] args) throws IOException { // 设置核心配置文件mybatis-config.xml的路径 String resource = "mybatis-config.xml"; // 使用io流读取核心配置文件的内容 InputStream inputStream = Resources.getResourceAsStream(resource); // 将读取到的内容交给sqlSessionFactory对象统一管理 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建sqlSession对象来执行具体的SQL语句 SqlSession sqlSession = sqlSessionFactory.openSession(); // 执行SQL语句 List<Teacher> list = sqlSession.selectList("test.queryTea"); System.out.println(list); // 关闭资源 sqlSession.close(); } }
-
方式二:将数据显示在
网页
中技术分析:
JavaBean + JSP + Servlet + MyBatis
-
创建查询数据的servlet:
QueryTeachers.java
package com.ynnz.servlet; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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 com.ynnz.entity.Teacher; @WebServlet("/queryTeachers") public class QueryTeachers extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置核心配置文件mybatis-config.xml的路径 String resource = "com/ynnz/config/mybatis-config.xml"; // 使用io流读取核心配置文件的内容 InputStream inputStream = Resources.getResourceAsStream(resource); // 将读取到的内容交给sqlSessionFactory对象统一管理 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().
-
-