目录
1.MyBatis基本用法
MyBatis是一个简化了 Java 数据持久化层(persistence layer)代码的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单、易用的API与数据库进行交互。
MyBatis的前身是ibatis,ibatis于2002年由克林顿.比让(Clinton Begin)创建。MyBatis是ibatis的全新设计,并加入了注解和高级Mapper代理,是当下非常流行的持久层框架。
MyBatis流行的主要原因在于它的简单性和易用性。在Java应用程序中,数据持久化层涉及到的操作为:将从数据库查询到的数据映射成所对应的Java对象;将Java对象中的数据通SQL持久化到数据库中。
MyBatis通过抽象底层的JDBC代码,可以将SQL查询结果集自动映射到Java对象,将Java对象的数据持久化通过SQL自动存储到数据库中,让整个Dao层的开发过程转变成对SQL的操作,使JDBC编程变得非常容易。
2.JDBC编程问题
在Java EE应用开发中,必不可免的要与数据库打交道,与数据库的交互一般都是通过定一个DAO层(数据库访问)来完成这个操作。定义DAO层的主要是原因是为了解决在开发过程中业务与数据的分离,可以在不同的层次上解决不同的问题。从而避免让所有代码冗余在一起,更有利于后期应用的升级与维护。
但是,即使在应用开发中实现了分层,使用单纯的JDBC编程仍然存在大量的问题。如下代码所示:
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "select * from user where user_name=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "zhangsan");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
User us = new User();
us.setUserId(rs.getInt("user_id"));
us.setUsername(rs.getString("user_name"));
us.setPassword(rs.getString("user_pass"));
us.setCname(rs.getString("cname"));
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
1、数据库的连接,使用时就需要连接,不需要就关闭,频繁的打开与关闭连接,势必会造成数据库资源的浪费,降低数据库的性能。
解决方案:数据库连接池。
2、将要执行的SQL语句以硬编码的方式写入到程序中,如果需求发生变动,则需要更改代码,不利于系统的维护。
解决方案:将SQL语句配置在XML文件中,即使SQL语句更改,也不需要更改Java源程序。
3、如果执行的SQL中含有占位符,则需要向执行SQL语句的PreparedStatement对象中传入参数,如果查询条件发生更改,则占位符的数目也需要改动,那么传入的参数个数会随之发生变动。
解决方案:将执行SQL语句中的占位符、参数,同样配置在XML文件中。
4、执行查询后得到的ResultSet结果集中,在获取数据时将数据表的字段名称,同样以硬编码的方式写死在程序中,不利于系统的维护。
解决方案:通过配置将查询的结果集,自动映射为对应的Java对象。
以上所有问题的解决,就是数据库持久层框架存在的意义,而MyBatis这个数据库持久层框架就很好的解决了以上所有的问题。
3.MyBatis简介
MyBatis本是apache下的一个开源项目,项目的前身为iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并正式更名为MyBatis 。MyBatis是一个支持普通 SQL查询、存储过程、高级映射的优秀持久层开源框架。MyBatis几乎消除JDBC的所有代码,其中包括:参数的手动设置代码,对查询结果集进行遍历的代码。MyBatis 使用简单的XML或注解的方式用于配置数据和接口映射,将Java 的POJO(Plain Ordinary Java Objects,普通的Java对象)与数据库中对应的记录进行相互映射。
3.1 MyBatis与Hibernate的区别
Mybatis和Hibernate不同,它不是一个全自动ORM框架,因为MyBatis需要程序员自己编写SQL语句,不过Mybatis可以通过XML或注解方式灵活配置要运行的SQL语句,并将Java对象中的数据和SQL语句映射生成最终执行的SQL,最后将SQL执行的结果再映射生成Java对象。
Mybatis学习门槛低,简单易学,程序员直接编写原生态SQL,可严格控制SQL执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化就会要求成果输出迅速。但是灵活的前提是MyBatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套SQL映射文件,工作量大。
Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用Hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只
有适合才是最好。
3.2 MyBatis的作用及特点
MyBatis是一个持久层框架,它的主要作用就是可以让程序开发人员将主要精力放在SQL语句的编写上,通过MyBatis提供的映射方式,自由灵活的创建出满足业务需求的各种SQL语句,不管是单表查询,还是多表查询,都可以很好的完成。而这种灵活生成是一种半自动化的生成,即还是需要程序人员进行编写SQL。
如果要执行的SQL语句中存在占位符,那么JDBC在执行之前,需要向执行该SQL语句的PreparedStatement对象传入参数。Mybatis可以将参数进行自动的输入映射,查询之后的结果集,Mybatis可以灵活的映射成Java对象,这就是Mybatis最为重要的输入映射和输出映射。
如果使用MyBatis框架,则需要去它的官方网站下载,目前最新版本为3.4.1版,该地址为: