您的位置:首页 > 大数据 > 人工智能

1.MyBaits 3.2 简介

2015-06-20 10:23 387 查看
MyBatis 介绍

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项目等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息