一、简介

MyBatis是一个开源的、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,开发者只需要关注SQL语句本身。

一、什么是持久化?

持久化
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。

二、MyBatis的特点

MyBatis支持定制化SQL 、存储过程以及高级映射,可以在实体类和SQL语句之间建立mapping映射关系,是一种半自动化的ORM(是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供一种机制,通过JavaBean对象去操作数据库表中的数据) 实现。其封装性低于Hibernate,但性能优秀、小巧、简单易学、应用广泛。

三、MyBatis的主要思想

**MyBatis的主要思想**

就是将程序中的大量SQL语句剥离出来,使用XML文件或者注解的方式实现SQL的灵活配置,将SQL语句与程序代码分离,在不修改程序代码的情况下,之间在配置文件中修改SQL语句。MyBatis强调使用SQL。

四、MyBatis的优缺点

优点:

  • MyBatis是免费且开源的
  • 与JDBC相比,减少了50%以上的代码量
  • MyBatis是最简单的初九话框架,体积小巧并且学习门槛低。
  • MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML中,和程序逻辑代码分离,降低耦合度,便于统一管理和优化,提高了代码的可重用性。
  • 提供XML标签,支持编写动态SQL语句
  • 提供映射关系,支持实体对象与数据库的表字段关系映射。

缺点:

  • 编写SQL语句工作量很大,对开发人员编写SQL语句的功底有一定的要求。
  • SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

二、MyBatis的基本配置

一、下载并添加MyBatis依赖

官网地址:https://github.com/mybatis/mybatis-3/releases

下载并解压:

lib文件夹下的jar是MyBatis的核心包:

需要将这些jar包加入项目中。

三、MyBatis核心配置

一、创建数据表结构

依赖于数据库,所以数据库里要有我们所要用到的表。

二、创建实体类

在src目录下创建实体类。


注意 在类中声明的属性名称与数据表website的字段名称,保持完全一致。

三、SQL映射文件

在src目录下创建包,在包里创建WebsiteMapper.xml.

<?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="com.包名.mapper.WebsiteMapper"><!-- 添加一个网站 --><insert id="insertWebsite" parameterType="com.包名.entity.Website">insert into website(name,url,age,country)values(#{name},#{url},#{age},#{country})</insert><!-- 查询所有网站信息 --><select id="selectAllWebsite"resultType="com.包名.entity.Website">select * from website</select>
</mapper>

四、连接配置文件

MyBatis核心配置文件只要用于配置数据库连接和MyBatis运行时所需的各种特性,包含设置和影响MyBatis行为的属性。
在src目录下创建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><settings><!-- 日志 -->  <setting name="logImpl" value="LOG4J" /></settings><!-- 配置mybatis运行环境 --><environments default="development"><environment id="development"><!-- 使用JDBC的事务管理 --><transactionManager type="JDBC" /><dataSource type="POOLED"><!-- MySQL数据库驱动 --><property name="driver" value="com.mysql.cj.jdbc.Driver" /><!-- 连接数据库的URL --><property name="url"value="jdbc:mysql://localhost:3306/自己的数据库?charset=utf8mb4&amp;useSSL=false&amp;useTimezone=true&amp;serverTimezone=GMT%2B8" /><property name="username" value="数据库的登录名" /><property name="password" value="数据库的密码" /></dataSource></environment></environments><!-- 将mapper文件加入到配置文件中 --><mappers><mapper resource="com/apesource/mapper/WebsiteMapper.xml" /></mappers>
</configuration>

五、日志文件

MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,可以在classpath路径下配置其日志文件。在项目的src目录下创建log4j.properties文件,内容

# Global logging configuration
log4j.rootLogger=ERROR,stdout# MyBatis logging configuration...
log4j.logger.com.apesource=DEBUG# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

三、测试类

在src目录下创建一个包,在包里创建测试类。在测试类中首先使用输入流读取配置文件,然后根据配置信息构建SqlSessionFactory对象。接下来通过SqlSessionFactory对象创建SqlSession对象,并使用SqlSession对象的方法执行数据库的操作。

  1. 首先,获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或者Configuration类的实例构建该对象。
  2. 其次,通过SqlSessionFactoryBuilder对象来获取SqlSession对象。
  3. 最后获取SqlSessionFactory对象之后,就可以进一步的获取SqlSession实例。SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法,用该实例可以直接执行已映射的SQL语句。
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test {public static void main(String[] args) throws IOException {// 读取配置文件mybatis-config.xmlInputStream config = Resources.getResourceAsStream("mybatis-config.xml");// 根据配置文件构建SqlSessionFactorySqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);// 通过SqlSessionFactory创建SqlSessionSqlSession ss = ssf.openSession();// SqlSession执行文件中定义的SQL,并返回映射结果// 添加网站Website website = new Website();website.setName("博客");website.setUrl("https://www.boke.com");website.setAge(21);website.setCountry("CN");// 执行添加映射操作ss.insert("com.apesource.mapper.WebsiteMapper.insertWebsite", website);// 执行查询映射操作List<Website> listWeb = ss.selectList("com.apesource.mapper.WebsiteMapper.selectAllWebsite");for (Website site : listWeb) {System.out.println(site);}// 提交事务ss.commit();// 关闭 SqlSessionss.close();}
}

四、核心对象的生命周期和作用域

一、SqlSessionFantoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。因此,SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例。

二、SqlSessionFactory

SqlSessionFactory一旦被创建就一应该在应用的运行期间一直存在,没有任何理由丢弃它或者重新创建另一个实例。shiyongSqlSessionFactory的最佳实践是在应用期间不要重复创建多次,多次创建SqlSessionFactory被视为一种”坏习惯”。因此SqlSessionFactory的最佳作用域是“应用作用域”。即随着应用程序的生命周期一直存在于整个应用运行期间,并且只存在一个对象实例。例如单例模式。

三、SqlSession

每个线程都应该有它自己的SqlSession实例。SqlSession的实例不是线程安全的,因此不能被共享,所以它的最佳的作用域是请求或方法作用域。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。为了保证每次都能执行关闭操作,应该把这个关闭操作放在finally块中。下面的示例就是一个确保SqlSession关闭的标准模式:

try (SqlSession session = sqlSessionFactory.openSession()) {// 你的应用逻辑代码
}

五、MyBatis工具类

基于上述核心对象的生命周期与作用域,MyBatis工具类的简单实现版本如下:

public class MyBatisUtils {private static SqlSessionFactory factory = null;static {String config = "mybatis-config.xml";try {InputStream in = Resources.getResourceAsStream(config);factory = new SqlSessionFactoryBuilder().build(in);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {SqlSession sqlSession = null;if (factory != null) {sqlSession = factory.openSession();}return sqlSession;}
}

就这些啦,如果还有不懂得可以留言哦!欢迎互相交流!

什么是MyBatis?怎么操作MyBatis?相关推荐

  1. MyBatis知多少(22)MyBatis删除操作

    本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_incremen ...

  2. mybatis CRUD操作

    mybatis CRUD操作 select select标签是mybatis最常用的标签之一. select语句有很多属性可以详细的配置每一天sql语句. id 命名空间唯一的标识. 接口中的方法名与 ...

  3. 通过接口操作MyBatis及数据库配置文件

    优点: 不用每次实例化SqlSession 配置优于硬编码 减少sql书写错误的概率 规范代码,面向接口服务 文章目录 一.回顾 二.如何通过接口操作MyBatis 2.1. 文件结构 2.2. 依赖 ...

  4. JavaWeb【Mybatis】Mybatis的操作步骤

    Mybatis的操作步骤 mybatis开发流程 1.创建SqlSessionFactoryBuilder对象 2.创建SqlSessionFactory对象 3.加载SqlMapConfig.xml ...

  5. 第一章Mybatis基础操作学习

    文章目录 MyBatis简介 MyBatis历史 MyBatis特性 和其它持久化层技术对比 搭建MyBatis 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 ...

  6. 实习笔记 —— MyBatis II (MyBatis基本数据库操作)

    系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...

  7. 爬梯:MyBatis全操作

    学习资源整理自:B站<狂神说> 扎实基础,将Mybatis全面走一遍! Mybatis中文官网 MyBatis全操作 1.Hello MyBatis 数据库表环境 CREATE TABLE ...

  8. IDEA第一个mybatis程序 mybatis增删查改操作 mybatis的map模糊查询

    连接数据库: 端口号: 打开IDEA: 注意这个URL:jdbc:mysql://localhost:3308 对应mybatis核心配置的url: 新建IDEA的MAVEN项目 目录: 数据库: 打 ...

  9. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于"internet& ...

最新文章

  1. /etc/group 很好很强大
  2. 找不到using System.Web.Script.Services 的问题
  3. 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
  4. Arduino学习笔记-按钮控制LED实验
  5. java 数组转字符串 字符串转数组,java高级面试笔试题
  6. 继三星之后 华为折叠屏手机Mate X发售日期或将延期至9月
  7. Pytorch squeeze() 和 unsqueeze() 方法区别
  8. 2级c语言题库及答案,计算机二级C语言上机题库含答案解析
  9. SVN下载安装及入门使用教程,详细到不能再详细了
  10. 2020年计算机学什么语言,最受企业认可的十大编程语言,2020年学习不后悔
  11. 服务器被入侵了怎么办
  12. VB Label自动换行妙招
  13. 一款红队大量资产指纹探测工具
  14. 标题:我的中医自学历程(2013.8.26 更新网盘,欢迎下载和传播)
  15. android 怎么去掉标题,android中如何去掉标题栏
  16. 火车头 php 插件,插件 - 火车采集器官方博客
  17. 蚂蚁区块链的新计划与BAT的新动向 |链捕手
  18. moses binarize-all问题
  19. 亦舒的话,我的感触...
  20. 一键解锁,2022阿里顶会创新技术前沿进展

热门文章

  1. 华为云服务治理 | 隔离仓的作用
  2. LeetCode221117_125、904. 水果成篮
  3. MATLAB plot函数绘制二维曲线
  4. 深入理解计算机系统(2.8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)
  5. Oracle时代:Sun开源拳头产品迎不同未来
  6. NewStarCTF 公开赛赛道-WEEK1|REVERSE
  7. 500元征集网站域名和网站名称
  8. python修改桌面壁纸_利用Python对windows桌面自动更换壁纸
  9. Pr学习(3)AI CC2017/2018 如何破解?
  10. memcpy函数详解