1.MyBaits 3.2 简介
2015-06-20 10:23
387 查看
MyBatis 介绍
mybatis原本叫ibatis,是Apache组织的一个项目。后来被托管到googlecode下,并且改名为mybatis,当然mybatis和ibatis不只是改了个名字,它在ibatis的基础之上更是优化了一些东西,使程序员更容易学习和使用mybatis。现在mybatis被托管到github。
Dao数据访问层
Dao层已经有jdbc和hibernate技术了,为啥还学习mybatis?
有两个方面考虑:
1、原生态jdbc程序存在问题; 2、Hibernate框架有些场景不好用。
[b]1.1.6 Jdbc问题总结[/b]1、加载数据库驱动,存在硬编码;
2、通过驱动管理器创建数据库连接,存在硬编码。且频繁的创建数据库连接,会造成数据库的性能降低;
3、编写业务SQL,并设置占位符,存在硬编码;
4、 没毛病;
5、通过PreparedStatement设置预处理SQL的参数,存在硬编码;
6、 没毛病;
7、遍历并输出结果集信息,存在硬编码;
8、频繁的关闭数据库连接,会造成数据库的资源浪费且会造成数据库的性能降低。
[b]1.1.7 Mybatis可以解决jdbc的问题
[/b]MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。如何解决jdbc的问题:一、Jdbc编程步骤中的1、2、8,mybatis通过SqlMapConfig.xml配置来进行管理,并采取了连接池来获取连接,避免了资源的频繁创建与关闭。二、jdbc编程步骤中的3、5、7,mybatis通过mapper映射文件来让程序员进行SQL的编写,参数的设置以及结果集的映射。
[b]1.1.8 Mybatis和hibernate的不同特点及各自应用场景
[/b] 是不是只有mybatis可以解决jdbc的问题呢?当然不是,hibernate也可以解决JDBC的这些问题。那既然有可以解决jdbc问题的持久层框架了,为什么还要学mybatis呢? 下面讲解一下mybatis和hibernate各自的技术特点及最佳应用场景。 Mybatis技术特点: 1、 通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、 需要编写结果映射。
Hibernate技术特点: 1、 标准的orm框架,程序员不需要编写SQL语句。
2、 具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、 学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、 程序员不能自主的去进行SQL性能优化。
Mybatis应用场景: 需求多变的互联网项目,例如电商项目。 Hibernate应用场景: 需求明确、业务固定的项目,例如OA项目、ERP项目等。
1.1.1 Mybatis是什么?
Mybatis是一个基于jdbc的支持普通SQL、存储过程以及高级映射的持久化框架技术。mybatis原本叫ibatis,是Apache组织的一个项目。后来被托管到googlecode下,并且改名为mybatis,当然mybatis和ibatis不只是改了个名字,它在ibatis的基础之上更是优化了一些东西,使程序员更容易学习和使用mybatis。现在mybatis被托管到github。
1.1.2 为什么学习mybatis?
首先要知道mybatis在项目中的使用是处于哪一层?Dao数据访问层
Dao层已经有jdbc和hibernate技术了,为啥还学习mybatis?
有两个方面考虑:
1、原生态jdbc程序存在问题; 2、Hibernate框架有些场景不好用。
1.1.3 分析原生态jdbc程序中存在的问题
Mybatis是对JDBC的一种封装,我们看看jdbc存在哪些问题,为什么要封装它。1.1.4 Jdbc程序代码public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //1、加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //2、通过驱动管理类获取数据库链接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root"); //3、定义sql语句 ?表示占位符 Stringsql = "select * from user whereusername = ?"; //4、获取预处理statement preparedStatement = connection.prepareStatement(sql); //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 preparedStatement.setString(1, "王五"); //6、向数据库发出sql执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); //7、遍历查询结果集 while(resultSet.next()){ System.out.println(resultSet.getString("id")+" "+resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); }finally{ //8、释放资源 if(resultSet!=null){ try { resultSet.close(); } catch (SQLException e){ // TODO Auto-generatedcatch block e.printStackTrace(); } } if(preparedStatement!=null){ try { preparedStatement.close(); } catch (SQLException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } if(connection!=null){ try { connection.close(); } catch (SQLException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } }1.1.5 Jdbc编程步骤(预处理preparedStatement)1、 加载数据库驱动; 2、 通过驱动管理器创建数据库连接; 3、 编写业务SQL语句,并设置占位符; 4、 通过数据库连接创建PreparedStatement; 5、 通过PreparedStatement设置预处理SQL的参数; 6、 执行PreparedStatement; 7、 遍历并输出结果集信息; 8、 关闭连接等资源信息。
[b]1.1.6 Jdbc问题总结[/b]1、加载数据库驱动,存在硬编码;
2、通过驱动管理器创建数据库连接,存在硬编码。且频繁的创建数据库连接,会造成数据库的性能降低;
3、编写业务SQL,并设置占位符,存在硬编码;
4、 没毛病;
5、通过PreparedStatement设置预处理SQL的参数,存在硬编码;
6、 没毛病;
7、遍历并输出结果集信息,存在硬编码;
8、频繁的关闭数据库连接,会造成数据库的资源浪费且会造成数据库的性能降低。
[b]1.1.7 Mybatis可以解决jdbc的问题
[/b]MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。如何解决jdbc的问题:一、Jdbc编程步骤中的1、2、8,mybatis通过SqlMapConfig.xml配置来进行管理,并采取了连接池来获取连接,避免了资源的频繁创建与关闭。二、jdbc编程步骤中的3、5、7,mybatis通过mapper映射文件来让程序员进行SQL的编写,参数的设置以及结果集的映射。
[b]1.1.8 Mybatis和hibernate的不同特点及各自应用场景
[/b] 是不是只有mybatis可以解决jdbc的问题呢?当然不是,hibernate也可以解决JDBC的这些问题。那既然有可以解决jdbc问题的持久层框架了,为什么还要学mybatis呢? 下面讲解一下mybatis和hibernate各自的技术特点及最佳应用场景。 Mybatis技术特点: 1、 通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、 学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、 由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、 不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、 需要编写结果映射。
Hibernate技术特点: 1、 标准的orm框架,程序员不需要编写SQL语句。
2、 具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、 学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、 程序员不能自主的去进行SQL性能优化。
Mybatis应用场景: 需求多变的互联网项目,例如电商项目。 Hibernate应用场景: 需求明确、业务固定的项目,例如OA项目、ERP项目等。
相关文章推荐
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
- RAID0 RAID1 RAID3 RAID5 RAID6 RAID10 RAID50概念详解
- Exchange发送邮件后卡在草稿箱
- error: server certificate verification failed 解决方案
- Algorithms—42.Trapping Rain Water
- AlphaMobileControls 控件的使用 AlphaImageButton
- 偶尔转帖:AI会议的总结(by南大周志华)
- MonkyTalk学习-6-Verify-WaitFor & WaitForNot
- pthread_cond_wait
- grails domain里面beforeinsert无效
- MacBook Air 安装 Ubuntu 双系统
- A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
- 【Training versus Testing】林轩田机器学习基石
- 短信接收Main函数
- 朴素贝叶斯分类法 Naive Bayes ---R
- poj 2305 Basic remains 高精度取余
- 地形算法(Terrain)
- 实时查看日志文件 tail -f gallerylogs.log
- LeetCode 217 Contains Duplicate
- 【codechef】Chef and Bracket-Pairs (分层dp)