目录

  • `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 字段关系映射; 提供对象关系映射标签, 支持对象关系组件维护

MyBatisHibernate 有哪些不同

  • MyBatisHibernate 不同,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入门使用及其四大核心对象相关推荐

  1. Mybatis四大核心对象及四大内置对象

    一.MyBatis四大核心对象 MyBatis完成一次数据库操作需要经过的步骤,如下: 1.加载配置文件 2.获取SqlSessionFactoryBuiler对象 3.通过SqlSessionFac ...

  2. MyBatis 编程式开发中的核心对象及其作用?

    SqlSessionFactoryBuilder 创建工厂类 SqlSessionFactory 创建会话 SqlSession 提供操作接口 MapperProxy 代理Mapper 接口后,用于找 ...

  3. MyBatis 实际使用案例-核心对象的生命周期

    在编程式使用的这个demo 里面,我们看到了MyBatis 里面的几个核心对象:SqlSessionFactoryBuiler.SqlSessionFactory.SqlSession 和Mapper ...

  4. MyBatis 核心对象,工作原理及源码解读

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) Mybatis工作原理 InputStream inputStream = Resources.getResourceAsStream(reso ...

  5. 笔记·mybatis核心对象和全局配置文件

    jar包官网: https://mvnrepository.com/artifact/org.mybatis 介绍: 持久化: 持久,即把数据(如内存中的对象)保存到可以永久保存的存储设备中,持久化的 ...

  6. MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession

    MyBatis有两个核心对象:SqlSessionFactory.SqlSession   

  7. MyBatis四大核心概念

    本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.Mapper). MyBatis 作为互联网数据库映 ...

  8. 【Java进阶营】MyBatis四大核心概念

    本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.Mapper). 图片描述 MyBatis 作为互联 ...

  9. 手写自己的MyBatis框架-核心对象

    1.存放参数和结果映射关系.存放SQL 语句,我们需要定义一个配置类: 2.执行对数据库的操作,处理参数和结果集的映射,创建和释放资源,我们需要定义一个执行器: 3.有了这个执行器以后,我们不能直接调 ...

  10. mybatis入门(一)之基础安装

    转载自  mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...

最新文章

  1. github READme 的使用教程
  2. 一个逻辑清晰的购物车模型
  3. 一个 P4 的 Bug,就难倒了 JDK 吗 ?
  4. 使用HTML+CSS实现鼠标划过的二级菜单栏
  5. c++代码小游戏_用Python编写一个打乒乓球小游戏
  6. 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
  7. 雅虎借道阿里巴巴意在控股淘宝
  8. arduino液位传感器_如何使用Arduino + VL53L0X来制作液位感应设备
  9. mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》
  10. 【记录贴】cs231n课程作业一遇到问题总结
  11. vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案
  12. golang协程池设计
  13. mysql游标是什么特性_[转]MySQL游标特性
  14. 用好Windows 7自带文件加密工具
  15. 路由端口的限制与破解
  16. 管理定律——管理学中常见的定律集合
  17. Win10如何使用BC3.1精简版
  18. LCD自适应LED背光控制技术
  19. mysql workbench 安全模式_MySQL Workbench解决安全模式
  20. MT【299】对数型数列不等式

热门文章

  1. 容器技术Docker K8s 50 容器镜像服务(ACR)详解-使用与实践
  2. 算法:Reverse Words in a String(翻转字符串里的单词)
  3. 上验证cudnn是否安装成功_ubuntu18.04 安装cuda、cudnn、tensorflow和pytorch其实很简单...
  4. 相同的树 深度优先搜索
  5. 深度神经网络的正则化
  6. 浪潮信息能制造超级计算机吗,浪潮信息为中国航天探索事业出力 高性能计算技术领衔...
  7. 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
  8. 中文分词与马尔科夫模型之二(隐马尔科夫模型与维特比)
  9. 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
  10. OpenCV-Python教程(5、初级滤波内容)