Application是程序员开发的Java代码,蓝色为MyBatis框架.

API是MyBatis提供的增删改查等功能接口.

老式SQL写法我们在Dao中写SQL: SELECT * FROM user WHERE user_name = ?;

而在MyBatis中没有完全封装JDBC,还需要预先写一下SQL语句,不过不用像之前那样大篇幅以及多设置了:(进行了简化)

看一下老式的Dao层写法: 通过用户ID查询用户返回用户实例:

///// * 通过用户ID查询用户实例返回给showUser
public Customers queryCustomerByID(long cid) throws ClassNotFoundException, SQLException {
Customers customer = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select * from Customers where customer_id = ?";
try {
conn = JDBCUtil.getConnection();
ps = conn.prepareStatement(sql);
ps.setLong(1, cid);
rs = ps.executeQuery();
while (rs.next()) { if (customer == null) {
customer = new Customers(
rs.getLong(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getLong(6),
rs.getDouble(7));
}
}
} finally {
JDBCUtil.close(rs, ps, null);
} return customer; }/////* End queryCustomerByID

是不是很繁琐,尽管使用了有些日子,有些怀念,但是这样的冗余代码既然可以使用框架封装简化,为什么不用呢?

下面是在MyBatis中同样根据用户ID查用户返回用户实例: (customers.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="CustomersDao">
<!-- CIns为CustomerInstance缩写,即用户实例 -->
<select id="queryCInsByCid" parameterType="long" resultType="com.ykmimi.mybatis.entity.Customers">
select * from Customers where customer_id = #{cid}
</select>
</mapper>

mapper为映射,namespace是命名空间,当我们调用时就像调用某个Dao一样.

而select的 id 为 queryCInsByCid ,接收类型为long, 返回类型为Customers实例 (resultType指向了实体包中的Customers实体类)

假如这个程序里还有其他Dao层(老式写法),如: FoodsDao, PriceDao,那么只是将这些Dao类给转换了模式,变为了 namespace .这样的话好理解!

而命名空间mapper中包含的select或其他标签的 id ,即像是这个"Dao类中存在的一个方法" ,只不过简化了.

看图片知道,MyBatis进行了老式Dao层写法返回Customers实例的封装.而我们需要设置:

namespace (相当于Dao层名),

及内里功能标签的 id (相当于方法名),

parameterType (相当于方法参数类型设置) ,

resultType (相当于方法返回类型,只不过是全类名写法).

那么这个SQL语句设置好后,程序运行,就会加载到JDBC,从而可以对数据库进行操作.

两个xml文件(看图),可以自定义名称,含有SQL语句的映射配置文件需在MyBatis配置文件中进行注册.

<?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>
<!-- <typeAliases> <package name="com.xm.bean"/> </typeAliases> <properties
resource=""></properties> -->
<!-- 配置mybatis运行环境 --> <environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ordersystem" />
<property name="username" value="hr" />
<property name="password" value="system" />
</dataSource>
</environment> </environments> <!-- 配置 mapper文件 -->
<mappers>
<mapper resource="com/ykmimi/mybatis/mapper/customers.xml" />
</mappers>
</configuration>

最后,ORM表示Object, Relationship, Mapping

如图所示,

Application是Java程序代码,其中数据是对象类型

Relationship是关系型数据库/表

Mapping是框架的功能表示映射

那么,空口无凭,写一个小程序出来,看看MyBatis的作用吧!见下篇.

MyBatis基本工作原理的更多相关文章

  1. Mybatis之工作原理

    1.Mybatis的架构 1.1 Mybatis的框架分层 1.2 MyBatis的实现原理 mybatis底层还是采用原生jdbc来对数据库进行操作的,它支持定制化 SQL.存储过程以及高级映射的优 ...

  2. 每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件: SqlSession Executor Sta ...

  3. Hibernate和Mybatis的工作原理以及区别

    一.Mybatis的工作流程图 (1).原理详见: MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一 ...

  4. mybatis的工作原理

    MyBatis的框架架构 看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程.如下图所示: 原理详解: MyBatis应用程 ...

  5. MyBatis工作原理

    Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...

  6. 面试官:你分析过mybatis工作原理吗?

    Mybatis工作原理也是面试的一大考点,必须要对其非常清晰,这样才能怼回去.本文建立在Spring+SpringMVC+Mybatis整合的项目之上. 我将其工作原理分为六个部分: 读取核心配置文件 ...

  7. mybatis——mybatis打印sql 接口工作原理

    https://blog.csdn.net/Lxinccode/article/details/79218566 接口工作原理: Dao接口即Mapper接口.接口的全限名,就是映射文件中的names ...

  8. 从源码角度分析 MyBatis 工作原理

    一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示例来进行讲解.完整示例源码地址 1.1. 数据库准备 ...

  9. 深入理解Mybatis技术与原理

    目录 第1章 Mybatis简介 1.1 传统的JDBC编程 1.2 ORM模型 1.4 MyBatis 1.5 什么时候用MyBatis 第2章 MyBatis入门 2.2 MyBatis构成 2. ...

随机推荐

  1. FZU 2082(过路费)

    题目链接:传送门 题目大意:中文题,略 题目思路:树链剖分(注意要把边上的权值转移到深度较大的点上来维护) 最后当top[x]==top[y]注意id[x]+1因为是维护的点而题目是边 如果不+可能会 ...

  2. js+jquery

    改变元素的不透明度 <!DOCTYPE html> <html> <head> <script> function ChangeOpacity(x) { ...

  3. 【BZOJ3280】小R的烦恼 最小费用最大流

    [BZOJ3280]小R的烦恼 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的 ...

  4. 【BZOJ2251】[2010Beijing Wc]外星联络 后缀数组

    [BZOJ2251][2010Beijing Wc]外星联络 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是, ...

  5. 使用C#和HtmlAgilityPack解析HTML

    近期,有一个需求,需要解析HTML页面,读取一些需要的数据后,插入本地数据库.我知道可以通过正则表达式实现,然而正则表达式之于我,就像汇编语言之于我,一样.我知道它是干什么的,我也知道它能干什么,但是 ...

  6. ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署

    堪称史上最详细的< ArcGIS forJavascript API 3.14本地部署>文档,有图有真相~~~ ---------环境:Windows server 2012R2,IIS ...

  7. 去掉chrome、safari input或textarea在得到焦点时出现黄色边框的方法

    1.去掉chrome.safari input或textarea在得到焦点时出现黄色边框的方法 input{ outline:0;} 2.去掉chrome.safari textarea右下角可拖动鼠 ...

  8. 在Silverlight 5 项目中创建单元测试项目

    下载安装Silverlight ToolKit:测试框架程序集路径:C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec ...

  9. git-【二】本地git操作提交、版本回退

    一.创建版本库,提交文件 什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任 ...

  10. rtcp多媒体控制协议应用

    rtcp package send/recv demo main.c #include <stdio.h> #include <rtp.h> #include <rtcp ...