参考:唐浩荣(Mybatis3详解(一)----Mybatis的介绍)
MyBatis是一个持久层(将数据存到数据库中的)框架,能够自定义SQL语句,存储过程(一系列可以完成某个功能的SQL语句存储到数据库中),高级映射(一对一,一对多,多对多)。
Mybatis是一个基于持久层和ORM的框架,所以得了解持久层和ORM
持久化是将数据(比如内存中的对象)保存到可永久保存的设备中(如硬盘,但主要是保存到数据库中)。
持久层就是系统中专注于实现将数据持久化保存的相对独立的层面
object-relational mapping对象关系映射
对象关系映射用于实现关系数据库中表和面向对象编程语言中对象的相互转化
就是表和对象的相互转化
映射关系
类 | 表 |
---|---|
对象 | 记录(行) |
属性 | 字段(列) |
即一个类对应表,一个对象对应一行,一个属性对应一列
然后将关系数据库中的表映射成对象,这样对数据库的操作就可以转变成对表的操作
Mybatis和JDBC相比的优势
参考: AI课工场–MyBatis的执行流程详解
全菜工程师小辉–彻底搞懂JDBC的运行过程
jdbc–Java database connection java数据库连接
,使用jdbc来操作关系型数据库
import java.sql.*;
Class.forName(JDBC_DRIVER);
DriverManager.getConnection()
方法Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
conn.createStatement()
方法创建该对象,然后提交一个sql语句到数据库进行查询Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql);//提交了一个sql语句到数据库进行查询,结果放在ResultSet类对象中
while (rs.next()) { // 根据列名获取数据 int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); // 显示结果 System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last)
随后该全局配置文件加载映射文件(mapper.xml)
SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = builder.openSession();
插入内容
SqlSession相当于jdbc中的Connection对象,可以用SqlSession的实例获取相对应的Mapper
Executor执行器,Mybatis中所有的Mapper语句的执行都是通过Excutor执行的。
Mapper 由mapper.xml文件和mapper.java接口组成
mapper.xml中有MappedStatement对象
<select id="selectUserList" resultType="com.mybatis.User"> //id是对于的mapper中的方法名相同,resultType是输出结果的类型 select * from t_user </select>
MappedStatement对象封装了Statement的相关信息,包括SQL语句,输入参数和输出结果等
mapper.java接口中有方法,方法名就是MappedStatement对象的id的值,相当于调用该MappedStatement对象(不一定对啊)
Executor执行器,MyBatis的核心,所有Mapper语句的执行都是通过Executor执行的(Mapper由xml文件和java文件构成)
回到正题
UserMapper mapper1 = sqlSession.getMapper(Mapper.class);
List<User> users = mapper1.selectUserList();
sqlSession.close(); inputStream.close();