MyBatis简介

MyBatis是什么

  MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old JavaObjects,普通的Java对象)映射成数据库中的记录。

MyBatis历史

  MyBatis原是Apache的一个开源项目iBatis。2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis ,代码于2013年11月迁移到Github。
  iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

为什么要使用MyBatis?

  MyBatis是一个半自动化的持久化层框架。sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。
  在JDBC中,SQL夹在Java代码块里,耦合度高导致硬编码内伤。维护不易且实际开发需求中sql是有变化,频繁修改的情况多见。
  Hibernate和JPA,长难复杂SQL,对于Hibernate而言处理也不容易。内部自动生产的SQL,不容易做特殊优化。基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。

去哪里找MyBatis?

https://github.com/mybatis/mybatis-3/
http://www.mybatis.org/mybatis-3/

MyBatis-HelloWorld

HelloWorld简单版

一、创建一张测试表,命名为tbl_employee

二、创建对应的javaBean

package com.mybatis.bean;public class Employee {private Integer id;private String lastName;private String email;private String gender;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}@Overridepublic String toString() {return "Employee [id=" + id + ", lastName=" + lastName + ", email="+ email + ", gender=" + gender + "]";}
}

三、创建mybatis配置文件,sql映射文件

1、创建MyBatis全局配置文件
  MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息、如数据库连接池信息等。指导着MyBatis进行工作。我们可以参照官方文件的配置示例。
  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><!--开启驼峰命名--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><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/mybatis" /><property name="username" value="root" /><property name="password" value="1234" /></dataSource></environment></environments><!-- 将我们写好的sql映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中 --><mappers><mapper resource="mapper/EmployeeMapper.xml" /></mappers>
</configuration>

2、创建SQL映射文件
  映射文件的作用就相当于是定义Dao接口的实现类如何工作。这也是我们使用MyBatis时编写的最多的文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace:名称空间;指定为接口的全类名-->
<mapper namespace="com.mybatis.dao.EmployeeMapper">
<!--
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值public Employee getEmpById(Integer id);--><select id="getEmpById" resultType="com.mybatis.bean.Employee">select id,last_name,email,gender from tbl_employee where id = #{id}</select>
</mapper>

四、测试

1、根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory

public SqlSessionFactory getSqlSessionFactory() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);return new SqlSessionFactoryBuilder().build(inputStream);}

2、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查。一个sqlSession就是代表和数据库的一次会话,用完关闭。

SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession openSession = sqlSessionFactory.openSession();

3、使用 SqlSession 根据 方法id 进行操作

    try {Employee employee = openSession.selectOne("com.mybatis.dao.EmployeeMapper.getEmpById", 1);System.out.println(employee);} finally {openSession.close();}

测试结果如下所示:

Employee [id=1, lastName=tom, email=912324@qq.com, gender=0]

HelloWorld-接口式编程

一、创建一个Dao接口

package com.mybatis.dao;import com.mybatis.bean.Employee;public interface EmployeeMapper {Employee getEmpById(Integer id);}

二、修改Mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace:名称空间;指定为接口的全类名-->
<mapper namespace="com.mybatis.dao.EmployeeMapper">
<!--
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值public Employee getEmpById(Integer id);--><select id="getEmpById" resultType="com.mybatis.bean.Employee">select id,last_name,email,gender from tbl_employee where id = #{id}</select>
</mapper>

三、测试
使用SqlSession获取映射器进行操作

        try {EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpById(1);System.out.println(employee);} finally {openSession.close();}

SqlSession

  SqlSession 的实例不是线程安全的,因此是不能被共享的。
  
  SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的。
  
  SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作。

MyBatis(一)——初识MyBatis相关推荐

  1. 1 初识Mybatis

    初识MyBatis 文章目录 初识MyBatis 1.MyBatis简短介绍 2.持久化与ORM 3.搭建MyBatis开发环境 4.使用Mybatis查询数据库内容 1.找不到mapper的映射xm ...

  2. 初识mybatis源码

    初识mybaits的时候,我还是只小菜鸟,而你也总喜欢找我问问题.而如今我懂了很多,但是找我问问题 的人再也不是你了. 遥想公瑾当年,小乔初嫁了,雄姿英发. 羽扇纶巾,谈笑间,樯橹灰飞烟灭. 春去秋来 ...

  3. 【Mybatis框架】初识Mybatis

    CSDN话题挑战赛第2期 参赛话题:学习笔记 MyBatis 1.MyBatis简介 1.1.MyBatis历史 1.2.MyBatis特性 2. 搭建MyBatis 2.1 创建一个Maven项目 ...

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

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

  5. 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

    MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上.MyBatis提供了一级缓存.二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能.本 ...

  6. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

  7. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现

    本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论. MyBatis将数据缓存设计成两级结构,分为一级缓存 ...

  8. java整合mybatis,springboot集成mybatis

    # springboot集成mybatis springboot基础mybatis还是很简单的,比之前springmvc集成mybatis要少很多配置,只要大家按照步骤一步一步来,几分钟就 能实现.具 ...

  9. mybatis实战教程(mybatis in action),mybatis入门到精通

     目录(?) [-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程 ...

  10. 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

    文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...

最新文章

  1. 用开放地址法中的线性探查法解决冲突实现哈希表的运算
  2. 基于itchat的个人情感分析
  3. [android开发之内容更新类APP]二、这几日的结果
  4. spring boot实战(第二篇)事件监听
  5. linux 多线程实现倒计时,Linux用脚本实现“时分秒“倒计时功能
  6. UE3 Lightmass静态全局光照
  7. ubuntu如何调出python_ubuntu|linux下 如何用python 模拟按键
  8. Julia: 一行代码可以写出什么优雅?
  9. gjb150a盐雾试验标准-产品检验标准国标
  10. python爬虫之喜马拉雅非vip音频下载
  11. Android常用代码集
  12. linux 移动硬盘 mac,Macbook pro使用原生EFI在移动硬盘安装Windows+Fedora双系统
  13. 如何使用QQ邮箱账号发送加密邮件
  14. 华为认证Datacom和Routing Switching方向的优势
  15. “博客之星”年度评选
  16. 线性代数的视角理解LSR(least square regression)的参数评估算法本质
  17. 高考还有几天c语言作业,高考考几天
  18. 钰泰半导体ETA4034爆款OVP+OCP+NTC+OTP+FAULT五合一方案, 兼容BQ24314
  19. Convex Optimization-chapter1
  20. vue H5app plus调取手机相册,限制图片大小,图片转base64

热门文章

  1. Go语言基础(十二):并发编程
  2. 数据源(DataSource)是什么以及SpringBoot中数据源配置
  3. 仿抖音短视频APP源码,底部弹窗对话框
  4. PaddleOCR使用笔记-文字检测训练、评估、推理
  5. 李宏毅的机器学习课程!
  6. python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...
  7. 在ubuntu20.10系统下实现一键OCR识别图片截图中的内容使之转换为文本可以复制粘贴
  8. Python到底有多强?双十一的时候带你领略它的强大之处!
  9. K-means 实现鸢尾花
  10. 【零代码平台】基于Vue实现商城可视化搭建 Mall-Cook