jdbc与mybatis的区别

编程实验

72人已加入

描述

MyBatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)

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

数据库

jdbc

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。

Mybatis和JDBC区别

JDBC是Java提供的一个操作数据库的API;

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

MyBatis是对JDBC的封装。相对于JDBC,MyBatis有以下优点:

1. 优化获取和释放

我们一般在访问数据库时都是通过数据库连接池来操作数据库,数据库连接池有好几种,比如C3P0、DBCP,也可能采用容器本身的JNDI数据库连接池。我们可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。

C3P0 xml配置:

《bean id=“dataSource” class=“com.mchange.v2.c3p0.ComboPooledDataSource”

destroy-method=“close”》

《property name=“driverClass” value=“ oracle.jdbc.driver.OracleDriver ”/》

《property name=“jdbcUrl” value=“ jdbc:oracle:thin:@localhost:1521:ora9i ”/》

《property name=“user” value=“admin”/》

《property name=“password” value=“1234”/》

《/bean》

DBCP xml配置:

《bean id=“dataSource” class=“org.apache.commons.dbcp.BasicDataSource”

destroy-method=“close”》

《property name=“driverClassName” value=“com.mysql.jdbc.Driver” /》

《property name=“url” value=“jdbc:mysql://localhost:3309/sampledb” /》

《property name=“username” value=“root” /》

《property name=“password” value=“1234” /》

《/bean》

DURID xml配置:

《bean name=“dataSource” class=“com.alibaba.druid.pool.DruidDataSource”》

《property name=“driverClassName”》

《value》com.mysql.jdbc.Driver《/value》

《/property》

《property name=“url”》

《value》${jdbc_url_gx}《/value》

《/property》

《property name=“username”》

《value》${jdbc_username_gx}《/value》

《/property》

《property name=“password”》

《value》${jdbc_password_gx}《/value》

《/property》

《/bean》

2.SQL统一管理,对数据库进行存取操作

我们使用JDBC对数据库进行操作时,SQL查询语句分布在各个Java类中,这样可读性差,不利于维护,当我们修改Java类中的SQL语句时要重新进行编译。

Mybatis可以把SQL语句放在配置文件中统一进行管理,以后修改配置文件,也不需要重新就行编译部署。

3.生成动态SQL语句

我们在查询中可能需要根据一些属性进行组合查询,比如我们进行商品查询,我们可以根据商品名称进行查询,也可以根据发货地进行查询,或者两者组合查询。如果使用JDBC进行查询,这样就需要写多条SQL语句。

Mybatis可以在配置文件中通过使用《if test=””》《/if》标签进行SQL语句的拼接,生成动态SQL语句。比如下面这个例子:

《select id=“getCountByInfo” parameterType=“User” resultType=“int”》

select count(*) from user

《where》

《if test=“nickname!=null”》

and nickname = #{nickname}

《/if》

《if test=“email!=null”》

and email = #{email}

《/if》

《/where》

《/select》

就是通过昵称或email或者二者的组合查找用户数。

4.能够对结果集进行映射

我们在使用JDBC进行查询时,返回一个结果集ResultSet,我们要从结果集中取出结果封装为需要的类型

在Mybatis中我们可以设置将结果直接映射为自己需要的类型,比如:JavaBean对象、一个Map、一个List等等。像上个例子中就是将结果映射为int类型。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分