MyBatis入门使用及其四大核心对象
目录
- `MyBatis` 简介
- `MyBaits` 的优点
- `MyBatis` 与 `Hibernate` 有哪些不同
- `MyBatis` 四大核心对象
- `SqlSessionFactoryBuilder`
- `SqlSessionFactory`
- `SqlSession`
- `Mapper`
- `MyBatis` 入门使用
- 创建实体类
- 创建全局配置文件 `mybatis-config.xml`
- 创建 `Mapper` 接口
- 创建 `Mapper` 映射文件
- 创建测试类
MyBatis
简介
MyBatis
是一个半ORM
( 对象关系映射)框架,它内部封装了JDBC
,开发时只需要关注SQL
语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement
等繁杂的过程。开发人员直接编写原生态SQL
,可以严格控制SQL
执行性能, 灵活度高MyBatis
可以使用XML
或注解来配置和映射原生信息, 将POJO
映射成数据库中的记录, 避免了几乎所有的JDBC
代码和手动设置参数以及获取结果集
MyBaits
的优点
- 基于
SQL
语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL
写在XML
里,解除SQL
与程序代码的耦合,便于统一管理;提供XML
标签, 支持编写动态SQL
语句, 并可重用 - 与
JDBC
相比,减少了50%
以上的代码量,消除了JDBC
大量冗余的代码,不需要手动开关连接 - 能够与
Spring
很好的集成 - 提供映射标签, 支持对象与数据库的
ORM
字段关系映射; 提供对象关系映射标签, 支持对象关系组件维护
MyBatis
与 Hibernate
有哪些不同
MyBatis
和Hibernate
不同,MyBatis
是一个半自动的ORM
框架,因为MyBatis
需要程序员自己编写SQL
语句,而Hibernate
是一个全自动的ORM
框架MyBatis
无法做到数据库无关性,不同的数据库需要不同的SQL
语句,数据库移植性较差;可编写原生态SQL
,可以严格控制SQL
执行性能,灵活度高Hibernate
对象/关系映射能力强, 数据库无关性好,数据库移植性很好
MyBatis
四大核心对象
SqlSessionFactoryBuilder
这个类是用来创建 SqlSessionFactory
的,它可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory
,就不再需要它了。因此 SqlSessionFactoryBuilder
实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder
来创建多个 SqlSessionFactory
实例,但是最好还是不要让其一直存在,以保证所有的 XML
解析资源可以被释放给更重要的事情
SqlSessionFactory
SqlSessionFactory
一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。使用 SqlSessionFactory
的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory
被视为一种代码坏味道(bad smell
)。因此 SqlSessionFactory
的最佳作用域是应用作用域。有很多方法可以做到,常见的就是使用单例模式来创建
SqlSessionFactory
接口源码
public interface SqlSessionFactory {SqlSession openSession();SqlSession openSession(boolean autoCommit);SqlSession openSession(Connection connection);SqlSession openSession(TransactionIsolationLevel level);SqlSession openSession(ExecutorType execType);SqlSession openSession(ExecutorType execType, boolean autoCommit);SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);SqlSession openSession(ExecutorType execType, Connection connection);Configuration getConfiguration();
}
SqlSession
每个线程都应该有它自己的 SqlSession
实例。SqlSession
的实例是线程不安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 每次收到 HTTP
请求,就打开一个 SqlSession
,当返回一个响应时,就关闭它。 这个关闭操作是很重要的,你应该把这个关闭操作放到 finally
块中以确保每次都能执行关闭
public interface SqlSession extends Closeable {<T> T selectOne(String statement);<T> T selectOne(String statement, Object parameter);<E> List<E> selectList(String statement);<E> List<E> selectList(String statement, Object parameter);<E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds);<K, V> Map<K, V> selectMap(String statement, String mapKey);<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey);<K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds);<T> Cursor<T> selectCursor(String statement);<T> Cursor<T> selectCursor(String statement, Object parameter);<T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds);void select(String statement, Object parameter, ResultHandler handler);void select(String statement, ResultHandler handler);void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);int insert(String statement);int insert(String statement, Object parameter);int update(String statement);int update(String statement, Object parameter);int delete(String statement);int delete(String statement, Object parameter);void commit();void commit(boolean force);void rollback();void rollback(boolean force);List<BatchResult> flushStatements();@Overridevoid close();void clearCache();Configuration getConfiguration();<T> T getMapper(Class<T> type);Connection getConnection();
}
Mapper
Mapper
映射器是一些由你创建的、绑定你映射的语句的接口。映射器接口的实例是从 SqlSession
中获得的
类名称 | 作用域 |
---|---|
SqlSessionFactoryBuilder | method |
SqlSessionFactory | application |
SqlSession | request 或 method (可以认为是线程级) |
Mapper | method |
MyBatis
入门使用
创建实体类
public class Person {private String id;private String name;// 省略 set/get 方法......
}
创建全局配置文件 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> <!-- 对事务的管理和连接池的配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/test" /><property name="username" value="root" /><property name="password" value="root" /> </dataSource> </environment> </environments> <!-- mapping 文件路径配置 --> <mappers> <mapper resource="resource/PersonMapper.xml" /> </mappers>
</configuration>
创建 Mapper
接口
public interface PersonDao {public List<Person> query();public void save(Person p);public void delete(String id);
}
创建 Mapper
映射文件
映射文件对应于 MyBatis
全局配置中的 mappers
配置属性,主要用于建立对应数据库操作接口的 SQL
映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.itaem.dao.PersonDao" ><resultMap id="resultMap" type="net.itaem.po.Person" ><result column="id" property="id" jdbcType="CHAR" /><result column="name" property="name" jdbcType="CHAR" /></resultMap><!--添加--> <insert id="save" parameterType="net.itaem.po.Person">insert into person(id,name) value(#{id,jdbcType=CHAR},#{name,jdbcType=CHAR})</insert><!--查询--><select id="query" resultMap="resultMap">select * from person</select><!--删除--><delete id="delete" parameterType="java.lang.String">delete from person where id=#{id,jdbcType=CHAR}</delete>
</mapper>
创建测试类
public class Test {public static void main(String[] args) throws Exception {Reader reader = Resources.getResourceAsReader("resource/mybatis-config.xml");// 获取 SqlSessionFactory 对象SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 获取 SqlSession 对象SqlSession session = sessionFactory.openSession();PersonDao personDao = session.getMapper(PersonDao.class);Person person = new Person("11","Fighter168");personDao.save(person);// 增删改,一定一定要加上commit操作session.commit();session.close();}
}
MyBatis入门使用及其四大核心对象相关推荐
- Mybatis四大核心对象及四大内置对象
一.MyBatis四大核心对象 MyBatis完成一次数据库操作需要经过的步骤,如下: 1.加载配置文件 2.获取SqlSessionFactoryBuiler对象 3.通过SqlSessionFac ...
- MyBatis 编程式开发中的核心对象及其作用?
SqlSessionFactoryBuilder 创建工厂类 SqlSessionFactory 创建会话 SqlSession 提供操作接口 MapperProxy 代理Mapper 接口后,用于找 ...
- MyBatis 实际使用案例-核心对象的生命周期
在编程式使用的这个demo 里面,我们看到了MyBatis 里面的几个核心对象:SqlSessionFactoryBuiler.SqlSessionFactory.SqlSession 和Mapper ...
- MyBatis 核心对象,工作原理及源码解读
相关内容: 架构师系列内容:架构师学习笔记(持续更新) Mybatis工作原理 InputStream inputStream = Resources.getResourceAsStream(reso ...
- 笔记·mybatis核心对象和全局配置文件
jar包官网: https://mvnrepository.com/artifact/org.mybatis 介绍: 持久化: 持久,即把数据(如内存中的对象)保存到可以永久保存的存储设备中,持久化的 ...
- MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession
MyBatis有两个核心对象:SqlSessionFactory.SqlSession
- MyBatis四大核心概念
本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.Mapper). MyBatis 作为互联网数据库映 ...
- 【Java进阶营】MyBatis四大核心概念
本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.Mapper). 图片描述 MyBatis 作为互联 ...
- 手写自己的MyBatis框架-核心对象
1.存放参数和结果映射关系.存放SQL 语句,我们需要定义一个配置类: 2.执行对数据库的操作,处理参数和结果集的映射,创建和释放资源,我们需要定义一个执行器: 3.有了这个执行器以后,我们不能直接调 ...
- mybatis入门(一)之基础安装
转载自 mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...
最新文章
- github READme 的使用教程
- 一个逻辑清晰的购物车模型
- 一个 P4 的 Bug,就难倒了 JDK 吗 ?
- 使用HTML+CSS实现鼠标划过的二级菜单栏
- c++代码小游戏_用Python编写一个打乒乓球小游戏
- 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
- 雅虎借道阿里巴巴意在控股淘宝
- arduino液位传感器_如何使用Arduino + VL53L0X来制作液位感应设备
- mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》
- 【记录贴】cs231n课程作业一遇到问题总结
- vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案
- golang协程池设计
- mysql游标是什么特性_[转]MySQL游标特性
- 用好Windows 7自带文件加密工具
- 路由端口的限制与破解
- 管理定律——管理学中常见的定律集合
- Win10如何使用BC3.1精简版
- LCD自适应LED背光控制技术
- mysql workbench 安全模式_MySQL Workbench解决安全模式
- MT【299】对数型数列不等式
热门文章
- 容器技术Docker K8s 50 容器镜像服务(ACR)详解-使用与实践
- 算法:Reverse Words in a String(翻转字符串里的单词)
- 上验证cudnn是否安装成功_ubuntu18.04 安装cuda、cudnn、tensorflow和pytorch其实很简单...
- 相同的树 深度优先搜索
- 深度神经网络的正则化
- 浪潮信息能制造超级计算机吗,浪潮信息为中国航天探索事业出力 高性能计算技术领衔...
- 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
- 中文分词与马尔科夫模型之二(隐马尔科夫模型与维特比)
- 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
- OpenCV-Python教程(5、初级滤波内容)