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. this、target、currentTarget

    this:绑定事件所触发行为的对象 target:最开始冒泡的的对象 currentTarget:事件触发行为的对象 this == target currentTarget和this 是target ...

  2. linux 中 ll 命令显示 的大小 是什么单位的啊?

    ll显示的是字节,可以使用-h参数来提高文件大小的可读性,另外ll不是命令,是ls -l的别名 ls -al   是以字节单位显示文件或者文件夹大小: 字节b,千字节kb, 1G=1024M=1024 ...

  3. ehcache加载配置文件ehcache.xml的源码

    package net.sf.ehcache.config; public final class ConfigurationFactory { public static Configuration ...

  4. SMGP关键代码

    从网上下载java的API就可以开发了我们需要修改的类是: import java.io.IOException; import cn.com.zjtelecom.smgp.Client; impor ...

  5. HDU 4238 You Are the One

    You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  6. Golang OOP、继承、组合、接口

    http://www.cnblogs.com/jasonxuli/p/6836399.html   传统 OOP 概念   OOP(面向对象编程)是对真实世界的一种抽象思维方式,可以在更高的层次上对所 ...

  7. Team Formation---zoj3870(异或)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518 题意就是有n个数,如果满足a^b > MAX(a, b) ...

  8. SQL Server批量数据导出导入BCP&Bulk使用

    数据导出导入,首先考虑使用什么技术实现导出与导入利用BCP结合Bulk技术实现数据的导出与导入 1.bcp数据导出(这里是命令行方式),导出的数据需是格式化的,有两种方式可选 a.对传输的数据格式要求 ...

  9. MySQL的知识海洋

    第一篇:初识数据库 第二篇:库操作 第三篇:表操作 第四篇:数据操作 第五篇:视图.触发器.存储过程.函数.事物与数据库锁 第六篇:索引原理与慢查询优化 第七篇:pymysql(用python连接以及 ...

  10. 有关ros::spin()和ros::spinonce()若干感受

    ros::spinonce()一般与loop_rate.sleep()同时出现,用来控制处理回调函数的频率,并且没有消息就收来时,就会程序堵塞,不会占用CPU资源. ros::spin(),用于回调函 ...