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. 为元素绑定监听键盘上的enter键被按下事件的方法

    $("someElement").on("keydown", function(event){ var key = event.which; if(key == ...

  2. JSP自定义标签开发入门《转》

    JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...

  3. 【APIO2016】Fireworks[DP 可并堆维护凸包优化]

    4585: [Apio2016]烟火表演 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 100  Solved: 66[Submit][Status] ...

  4. CodeForces - 459E Pashmak and Graph[贪心优化dp]

    E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Egret3D初步笔记二 (Unity导出场景使用)

    一 Scene 根据上一节的继续.在导入unity4.7.1_Egret3D_Dll.unitypackage后. 在Unity中双击打开Assets/Egret3D/Example下的Example ...

  6. C/C++程序编译流程

    单个文件的编译过程 多个文件的编译过程

  7. 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包

    [BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + ...

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

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

  9. windows 文件查找 大小:>250M

    win7怎么快速查找大文件_百度经验 https://jingyan.baidu.com/article/acf728fd299ffff8e510a333.html

  10. PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5+phpMyAdmin)和Discuz安装

    以下文章参考的3个来源,在加上本人搭建过程中遇到的问题的修复完善笔记: <PHP环境的搭建和Discuz!安装> http://www.myxzy.com/post-386.html ht ...