MyBatis框架
前言:
MyBatis框架相比JDBC来说大大提升了我们写代码的效率,但是对初学者来说框架还是有点难以理解,所以本篇博客会十分详细的讲解MyBatis框架
目录
一.MyBatis概述
1.什么是映射?
2.什么是XML?
二.MyBatis框架搭建
1.创建一张表和表对应的实体类
2.导入MyBatis Jar包和mysql数据库驱动包
3.创建MyBatis全局配置文件
三.测试MyBatis
四.总结
一.MyBatis概述
MyBatis是一款优秀的持久层(数据访问层)框架.
MyBatis避免了JDBC代码手动设置参数以及手动获取结果集的操作,自动将ResultSet结果映射到对应的数据库表对象
MyBatis可以使用XML或注解,将数据库中的记录映射成java对象
1.什么是映射?
就是将我们查询到的结果封装到我们与数据库表的对应对象的操作
例如:在数据库中我们有一个学生表,我们用sql语句查询到一个学生,学生信息都保存在了ResultSet对象中,我们要将信息提取到我们对应的学生类中
while(resultset.next())//指向结果集中的数据
{student.setId(resultset.getInt("id"));student.setName(resultset.getString("name"));student.setGender(resultset.getString("gender"));student.setPhone(resultset.getString("phone"));student.setBirthday(resultset.getDate("birthdy"));student.setRegtime(resultset.getTimestamp("regtime"));
}
2.什么是XML?
XML 文件(可扩展标记语言,Extensible Markup Language)是一种用于存储和传输结构化数据的文本文件格式
XML 配置和注解配置是两种定义 SQL 映射的方式
用语言来表述难以理解对初学者来说,在下面MyBatis框架搭建中博主会具体解释怎么使用,为什么使用
二.MyBatis框架搭建
首先在src文件下面创建一个包(Demo),在这个包下面创建一个dao包(存放接口)和一个model包(存放实体类)
DAO(Data Access Object,数据访问对象)是一种设计模式,用于将业务逻辑与数据访问逻辑分离,提供对数据库操作的抽象接口
1.创建一张表和表对应的实体类
在数据库中创建一个名为admin的表
create database if not exists mybatis_db charset utf8create table admin(id int primary key auto_increment,account varchar(20),password varchar(20),gender char(1),reg_time datetime
)
在java中创建与表对应的实体类(model包下面),这里的实体类也就是用来接受映射结果的类,需要注意的是这里需要生成set和get方法,由于篇幅原因这里没有写出来
public class Admin {//模型类,与数据库的表是对应的,用来封装admin信息private int id;private String account;private String password;private String gender;private Date reg_time;
}
2.导入MyBatis Jar包和mysql数据库驱动包
博主这里用的数据库是mysql,所以导入的是mysql驱动包,这一步就不详细演示了,上一片博客里面有,如果有需要Jar包的同学可以私信我
3.创建MyBatis全局配置文件
<在项目名下创建resource目录(Directory),右键设置为资源目录>
<在resource下面创建一个mybatis.xml的类(xml是一种配置文件,主要用来存储配置信息),里面的信息需要自己补全,就是JDBC中获取数据库链接的配置>
<?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.cj.jdbc.Driver" /><property name="url" value="自己补全...?serverTimezone=Asia/Shanghai" /><property name="username" value="数据库名" /><property name="password" value="数据库密码"/></dataSource></environment></environments>
</configuration
<定义操作接口>
在dao包下创建一个接口(AdminDao)
public interface AdminDao {//定义功能//在接口中定义一个通过id查询admin的方法Admin findAdminById(int id);}
<创建sql映射文件>
在resource目录下创建一个mappers包(对应的是Dao包中的接口),在mappers包下,创建一个adminMapper.xml的类
Mapper(数据映射器):定义SQL操作,映射结果,将sql语句从java语句中分离
namespace是接口的地址,id是接口名,parameterType是数据类型,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">
<!-- 专门写sql语句的文件 -->
<!-- 接口的完整地址 -->
<mapper namespace="Demo.dao.AdminDao"><select id="findAdminById" parameterType="int" resultType="Demo.model.Admin">select id,account,password,gender,reg_time from admin where id = #{id}<!-- 将查询结果自动封装到一个对象中 --></select>
</mapper>
<注册sql映射文件将Mapper加入到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">
<!-- xml是一种配置文件,主要用来存储配置信息 -->
<!-- 配置与数据库的连接信息 -->
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_db?serverTimezone=Asia/Shanghai" /><property name="username" value="root" /><property name="password" value="root"/></dataSource></environment></environments><!-- 注册sql映射文件,里面的文件对应的就是sql中的表 --><mappers><mapper resource="mappers/AdminMapper.xml"/></mappers>
</configuration>
三.测试MyBatis
在src文件下面创建一个Text类用来测试MyBatis
public static void main(String[] args) throws IOException {//读取配置文件Reader reader = Resources.getResourceAsReader("mybatis.xml");//创建SqlSessionFactory 用来创建sqlSession,类是jdbc中的ConnectionSqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//创建SqlSession 与数据库的会话对象,建立数据库的链接对象SqlSession sqlSession = sessionFactory.openSession();//获得接口代理对象//jdbc与mybatis的区别//mybatis没有做任何的结果映射(封装),自动处理,返回一个对象AdminDao adminDao = sqlSession.getMapper(AdminDao.class);Admin admin = adminDao.findAdminById(1);System.out.println(admin);sqlSession .close();//关闭
}
四.总结
下图表示MyBatis框架整体流程