MyBatis入门1
概述
-
mybatis是什么?有什么特点?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低
-
什么是ORM?
- Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据
-
为什么mybatis是半自动的ORM框架?
- 用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多
-
MyBatis开发流程:
- 引入MyBatis依赖
- 创建核心配置文件
- 创建实体(Entity)类
- 创建Mapper映射文件
- 初始化SessionFactory
- 利用SqlSession对象操作数据
JUnit4配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc</groupId>
<artifactId>mybaties</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
引入MyBatis依赖
目的是把需要的jar包都自动导入
pom.xml
创建核心配置文件mybatis-config.xml
- MyBatis采用XML格式配置数据库环境信息
- MyBatis环境配置标签
<environment>
<environment>
包含数据库驱动、URL、用户名与密码
在src > main > resource 目录下创建文件 mybatis-config.xml
mybatis-config.xml
使用MyBatis连接数据库
SqlSessionFactory
- SqlSessionFactory是MyBatis的核心对象
- 用于初始化MyBatis,创建SqlSession对象
- 保证SqlSessionFactory在应用中全局唯一
SqlSession
- SqlSession是MyBatis操作数据库的核心对象
- SqlSession使用JDBC方式与数据库交互
- SqlSession对象提供了对数据表CRUD
测试:MyBatis数据库连接
MyBatisTestor.java
public class MyBatisTestor {
@Test
public void testSqlSessionFactory(){
try {
// 利用Reader加载classpath下的mybatis-config.xml核心配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 初始化SqlSessionFactory对象,同时解析mybatis-config.xml文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
System.out.println("SessionFactory加载成功");
SqlSession sqlSession = null;
try {
// 创建SqlSession对象,SqlSession是JDBC的扩展类,用于与数据库交互
sqlSession = sqlSessionFactory.openSession();
// 创建数据库连接(测试用)
Connection connection = sqlSession.getConnection();
System.out.println(connection);
} catch (Exception e){
e.printStackTrace();
} finally{
if (sqlSession != null){
// 如果type="POOLED", 代表使用连接池, close则是将连接回收到连接池中
// 如果type="UNPOOLED", 代表直连, close则会调用Connection.close()方法关闭连接
sqlSession.close();
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
运行结果:
初始化工具类MyBatisUtils
主要负责SqlSession的创建和关闭操作
MyBatisUtils.java
package com.imooc.mybatis.utils;
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.Reader;
/**
* ClassName: MyBatisUtils
* Package: com.imooc.mybatis.utils
* Description: MyBatisUtils工具类, 创建全局唯一的SqlSessionFactory对象
*
* @Author maning
* @Create 2024/4/24 15:44
* @Version 1.0
*/
public class MyBatisUtils {
// 利用static属于类不属于对象,且全局唯一
private static SqlSessionFactory sqlSessionFactory = null;
// 利用静态块在初始化类时实例化sqlSessionFactory
static{
Reader reader = null;
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
// 初始化错误时,通过抛出异常ExceptionInInitializerError通知调用者
throw new ExceptionInInitializerError(e);
}
}
// 创建一个新的SqlSession对象
public static SqlSession openSession(){
return sqlSessionFactory.openSession();
}
// 释放一个有效的SqlSession对象
public static void closeSession(SqlSession session){
if(session != null){
session.close();
}
}
}
测试:MyBatis工具类的使用
MyBatisTestor
public class MyBatisTestor{
@Test
public void testMyBatisUtils(){
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtils.openSession();
Connection connection = sqlSession.getConnection();
System.out.println(connection);
}catch(Exception e){
throw e;
}finally {
MyBatisUtils.closeSession(sqlSession);
}
}
}
运行结果:
本文参考:
- csdn博主 抠脚的大灰狼 的文章《mybatis看这一篇就够了,简单全面一发入魂》
- 慕课网 Java必知必会框架入门-MyBatis