什么是MyBatis?怎么操作MyBatis?
一、简介
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&useSSL=false&useTimezone=true&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对象的方法执行数据库的操作。
- 首先,获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或者Configuration类的实例构建该对象。
- 其次,通过SqlSessionFactoryBuilder对象来获取SqlSession对象。
- 最后获取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?相关推荐
- MyBatis知多少(22)MyBatis删除操作
本节从表中使用MyBatis删除记录. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_incremen ...
- mybatis CRUD操作
mybatis CRUD操作 select select标签是mybatis最常用的标签之一. select语句有很多属性可以详细的配置每一天sql语句. id 命名空间唯一的标识. 接口中的方法名与 ...
- 通过接口操作MyBatis及数据库配置文件
优点: 不用每次实例化SqlSession 配置优于硬编码 减少sql书写错误的概率 规范代码,面向接口服务 文章目录 一.回顾 二.如何通过接口操作MyBatis 2.1. 文件结构 2.2. 依赖 ...
- JavaWeb【Mybatis】Mybatis的操作步骤
Mybatis的操作步骤 mybatis开发流程 1.创建SqlSessionFactoryBuilder对象 2.创建SqlSessionFactory对象 3.加载SqlMapConfig.xml ...
- 第一章Mybatis基础操作学习
文章目录 MyBatis简介 MyBatis历史 MyBatis特性 和其它持久化层技术对比 搭建MyBatis 开发环境 创建maven工程 创建MyBatis的核心配置文件 创建mapper接口 ...
- 实习笔记 —— MyBatis II (MyBatis基本数据库操作)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...
- 爬梯:MyBatis全操作
学习资源整理自:B站<狂神说> 扎实基础,将Mybatis全面走一遍! Mybatis中文官网 MyBatis全操作 1.Hello MyBatis 数据库表环境 CREATE TABLE ...
- IDEA第一个mybatis程序 mybatis增删查改操作 mybatis的map模糊查询
连接数据库: 端口号: 打开IDEA: 注意这个URL:jdbc:mysql://localhost:3308 对应mybatis核心配置的url: 新建IDEA的MAVEN项目 目录: 数据库: 打 ...
- 第一个Mybatis程序示例 Mybatis简介(一)
在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于"internet& ...
最新文章
- /etc/group 很好很强大
- 找不到using System.Web.Script.Services 的问题
- 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
- Arduino学习笔记-按钮控制LED实验
- java 数组转字符串 字符串转数组,java高级面试笔试题
- 继三星之后 华为折叠屏手机Mate X发售日期或将延期至9月
- Pytorch squeeze() 和 unsqueeze() 方法区别
- 2级c语言题库及答案,计算机二级C语言上机题库含答案解析
- SVN下载安装及入门使用教程,详细到不能再详细了
- 2020年计算机学什么语言,最受企业认可的十大编程语言,2020年学习不后悔
- 服务器被入侵了怎么办
- VB Label自动换行妙招
- 一款红队大量资产指纹探测工具
- 标题:我的中医自学历程(2013.8.26 更新网盘,欢迎下载和传播)
- android 怎么去掉标题,android中如何去掉标题栏
- 火车头 php 插件,插件 - 火车采集器官方博客
- 蚂蚁区块链的新计划与BAT的新动向 |链捕手
- moses binarize-all问题
- 亦舒的话,我的感触...
- 一键解锁,2022阿里顶会创新技术前沿进展
热门文章
- 华为云服务治理 | 隔离仓的作用
- LeetCode221117_125、904. 水果成篮
- MATLAB plot函数绘制二维曲线
- 深入理解计算机系统(2.8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)
- Oracle时代:Sun开源拳头产品迎不同未来
- NewStarCTF 公开赛赛道-WEEK1|REVERSE
- 500元征集网站域名和网站名称
- python修改桌面壁纸_利用Python对windows桌面自动更换壁纸
- Pr学习(3)AI CC2017/2018 如何破解?
- memcpy函数详解