MyBatis知多少(17)MyBatis和JDBC

有了MyBatis,就不再需要编写JDBC代码了。像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐。代码清单给出了一个使用JDBC的示例。

从这个例子中很容易看出,JDBC API会产生许多额外的开销。尽管如此,每一行代码又都是必不可少的,所以要减少代码量还真不是一件容易的事情。最多也只不过是将其中的一些代码 挪到某个实用方法中,最明显的就是那些关闭资源(如PreparedStatement和 ResultSet)的代码。

其实,如果使用MyBatis,MyBatis在后台也是运行几乎相同的JDBC代码。MyBatis会获取数据 库连接,设置其参数,执行其语句,获取执行结果,并在最后关闭所有的资源。然而,需要自己亲自编写的代码量却大大地减少了。代码清单给出了使用MyBatis运行相同的SQL语句时你需要编写的代码。

MyBatis显然比JDBC要精简得多

 <select id="getEmployee" parameterClass="j ava•lang.Integer" resultClass="Employee">
 SELECT ID as id,
     EMPLOYEE_NUMBER  as employeeNumber,      FIRST_NAME      as firstName,
     LAST一NAME      as lastName,
     TITLE         as title
 FROM EMPLOYEE
 WHERE EMPLOYEE_NUMBER = #empNum#
 </select>

根本无需比较,MyBatis代码明显更加简洁,更容易阅读,因此也更容易维护。稍后会讨论更多关于使用MyBatis的好处。但是现在,你最关心的可能是如何用Java代码运行以上的语句。 如前例所示,运行它仅仅需要一行简单代码:

Employee emp = (Employee) sqlMap.queryForObject("getEmployee",new Integer(5));

无需多说,这行代码会执行相应的SQL语句,设置其参数,并以一个真实的Java对象的形式作为结果返回。SQL语句被“干干净净”地封装在Java代码之外的一个XML文件中。iBATIS负责 管理幕后的所有资源,其运行的实际效果与我们之前在代码清单中所见的JDBC代码示例是完全一样的。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型

MyBatis知多少(6)表现层与业务逻辑层

MyBatis知多少(7)持久层

MyBatis知多少(8)关系型数据库

MyBatis知多少(9)不同类型的数据库

MyBatis知多少(10)应用程序数据库

MyBatis知多少(11)企业数据库

MyBatis知多少(12)私有数据库

MyBatis知多少(13)MyBatis如何解决数据库的常见问题

MyBatis知多少(14)分散的数据库系统

MyBatis知多少(15)数据模型

MyBatis知多少(16)MyBatis映射

时间: 2024-12-14 18:42:05

MyBatis知多少(17)MyBatis和JDBC的相关文章

MyBatis知多少(17)MyBatis读取操作

上篇展示了如何使用MyBatis执行创建操作表.本章将告诉你如何使用MyBatis来读取表. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCHAR(20) default NULL, 5 salary INT default NULL, 6 PRIMARY KEY (i

MyBatis知多少(18)MyBatis系统

小型.简单系统 小型应用程序通常只涉及单个数据库,只有一些相当简单的用户界面和领域模型.它的业务逻辑非常简单,甚至对一些简单的CRUD (Create, Read, Update, Delete:增删查改)应用程序来说可能根本就不存在.MyBatis之所以非常适合于小型应用程序,有3个原因. 第一,MyBatis本身就很小并且简单.它不需要服务器或者其他任何类型的中间件.根本不需要任何额外的基础设施.MyBatis也没有任何第三方依赖.MyBatis的最简安装只需 要2个JAR文件,总计不过37

MyBatis知多少(25)动态SQL

使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的动态SQL标签. 所有的逻辑是使用一些额外的标签放在:XML文件.下面是一个例子,其中的SELECT语句将努力在两个方面: 如果想传递一个ID,然后它会返回所有与该ID的记录, 否则,将返回所有雇员ID为NULL的记录. <?xml version="1.0" encoding=&q

MyBatis知多少(19)MyBatis操作

若要使用iBATIS执行的任何CRUD(创建,写入,更新和删除)操作,需要创建一个的POJO(普通Java对象)类对应的表.本课程介绍的对象,将“模式”的数据库表中的行. POJO类必须实现所有执行所需的操作所需的方法. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCH

MyBatis知多少(26)MyBatis和Hibernate区别

iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱动的. 你的项目工作有复杂架构的. 简单地要使用Hibernate,如果: 你的环境是由对象模型驱动的,并希望自动生成的SQL. 要计算的一些区别: MyBatis: 简单 更快的开发时间 灵活 封装尺寸更小 Hibernate: 为你生成SQL,这意味着你不用花时间在SQL上. 提供了许多更先进的

MyBatis知多少(26)调试

这是很容易,同时与iBATIS的工作程序进行调试. iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们. Jakarta Commons日志记录(JCL). Log4J JDK 日志 可以使用任何上面列出的库在iBATIS. 调试和Log4J: 假设你要使用Log4J,这是最好用的日志记录.继续操作之前,需要交叉检查以下几点: Log4J JAR 文件 (log4j-{version}.jar) 应在CLASSPATH中. 必须在CLASSPATH中提供log4j.prope

MyBatis知多少(24)存储过程

使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT defa

MyBatis知多少(18)更新操作

上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: 1 CREATE TABLE EMPLOYEE ( 2 id INT NOT NULL auto_increment, 3 first_name VARCHAR(20) default NULL, 4 last_name VARCHAR(20) default NULL, 5 salary INT default NULL, 6 PRIMARY

MyBatis知多少(23)MyBatis结果映射

resultMap的元素是在MyBatis的最重要和最强大的元素.您可以通过使用MyBatis的结果映射减少高达90%的JDBC编码,在某些情况下,可以让你做JDBC不支持的事情. ResultMaps的设计是这样的简单语句不需要明确的结果映射,以及更复杂的报表要求不超过绝对必要说明的关系. 本章将只给你一个简单的介绍iBATIS的结果映射. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( id INT NOT NULL auto_increment