hibernate与mybatis比较

(1)Hibernate与Mybatis的区别


Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。

mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。



Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。



(2)实体类
 1.无参构造方法,内部通过反射的形式创建对象调用的无参方法
2.成员变量私有提供set和get方法,通过set个get设置和查询对象的属性
3.对于基本类型尽量使用包装类,可以多表示一个null状态。

4.需要提供一个唯一标识的OID来与表中的主键进行对应,因为hibernate需要通过这个OID来区分内存中的对象是否 是同一个对象不要使用final进行修饰,因为hibernate使用的CGLib技术


(3)orm映射文件

一个orm映射文件只有一个hibernate­mapping标签,在此配置表结构和对象的映射

package属性用于指定所在的包,那么在配置文件中使用完整类名的的时候,就可以不带包名,但是只会指定到当前包,不会对应其子包


(4)注意

如果hibernate版本较新,需要自动建表,需要设置方言mysql的方言为 org.hibernate.dialect.MySQL5Dialect



(5)SessionFactory具有如下特点 
1.线程安全,可以保证在并发操作的时候,多个线程使用一个SessionFactory对象 
2.在创建的时候,会读取所有hibernate.cfg.xml和所有的映射文件,并且会创建数据库中的表,所以比较耗费资源,不
能轻易的创建和销毁 。在实际开发过程中我们可以使用一个工具类来创建一个SessionFactory对象,通过调用方 法来创建操作数据库的session对象

3.通过conf调用 buildSessionFactory() 创建factory,因为核心配置文件中的根标签是 session-factory ,所以创
建出来的factory就是我们在配置文件中配置的那个factory 可以通过这个对象创建session对象 。

4.因为factory创建消耗资源比较大,并且一个factory可以创建多个session,所以在实际开发过程中SessionFactory 只需要创建一个即可

SessionFactory factory = conf.buildSessionFactory();


(6)HibernateUtil工具类

public class HibernateUtil {

private static final Configuration CONF;
private static final SessionFactory FACTORY;

static {

CONF = new Configuration().configure();
FACTORY = CONF.buildSessionFactory();

}

public static Session openSession (){

return FACTORY.openSession();

}

}


(7)对数据库语句的增删改查操作

1.查询数据: session.get(类名.class,id索引)
2.增加数据: session.save(对象)
3.删除数据: session.delete(对象)
4.修改数据: session.update(对象)


(8)hibernate中处理事务的类Transaction

1.在核心配置文件中可以设置事务的隔离级别为1,2,4,8表示读取未提交,读取已提交,可重复读,串行化 

<property name="hibernate.connection.isolation">4</property>
2.开启事务 Transaction tx =session.beginTransaction();
3.提交事务 tx.commit();
4.回滚事务 tx.rollback();


(9)Session
session是操作数据库的核心对象,通过SessionFactory 进行创建,可以进行增删改查


(10)Configuration
1.加载核心配置文件类,默认会加载src下的hibernate.cfg.xml

2.使用空参创建配置对象
Configuration conf = new Configuration().configure();


(11)核心配置文件

用于配置hibernate中的数据库连接和映射文件所需的基本信息,Hibernate的配置文 件有两种格式,一种是propertiest文件,默认是hibernate.properties,一种是xml格式的 配置,默认名字是hibernate.cfg.xml,在实际开发过程中大部分时候使用的都是xml文 件进行配置.一般将此文件放在src下

1.必选配置
数据库驱动 hibernate.connection.driver_class
数据库url hibernate.connection.url
数据库连接用户名 hibernate.connection.username
数据库连接密码 hibernate.connection.password
数据库方言 hibernate.dialect 因为hibernate需要生成
sql语句,在不同的数据库中sql语法略有差别,指定方言就是设置hibernate在生成sql语句的时候针对哪个库生成的sql 
org.hibernate.dialect.MySQLDialect 通用存储引擎(我们一般设置为通用存储引擎,无论对应的哪个
存储引擎的数据库都能进行操作)
org.hibernate.dialect.MySQLInnoDBDialect InnoDB存储引擎
org.hibernate.dialect.MySQLMyISAMDialect MyISAM存储引擎




2.可选配置
hibernate.show_sql 将生成的sql语句打印到控制台
hibernate.format_sql 进行格式化sql语句,如果为false,sql语句就会打印到一行
hibernate.hbm2ddl.auto 自动导出表结构,通过设置此项,hibernate可以通过实体自动创建表结构其有4个设置 
create 自动建表,每次hibernate运行都会创建新表,之前的内容都会被覆盖(用于测试环境,不常用)
create-drop 自动建表,每次运行都会创建表,运行结束后删除表
update 自动建表,如果有就不再自动生成,如果没有创建新表,数据变动不会影响原来的表的内容(推荐使用),比如重 新修改了表的映射关系,不会影响原有的数据
validate 不自动建表,如果没有表就会抛出异常


(12)property标签
配置除了主键之外的的普通属性映射
name属性 : 实体中属性名称
column属性 : 表中列的名称
length属性 : 数据长度
precision属性 : 小数点后的精度
scale属性 : 有效位数
insert属性 : 该属性是否加入insert语句.(一般不用)
update属性 : 该属性是否加入update语句.(一般不用)
not-null属性 : 指定属性的约束是否使用 非空
unique属性 : 指定属性的约束是否使用 唯一
type属性 :表达该属性的类型(一般可以不用设置),可以有三种指定属性 
java类型,如  java.lang.String
数据库类型指定,如 varchar
Hibernate类型指定,如 string
()



(13)class标签及其子标签
1.配置实体与表中的对应关系的name属性 :设置为实体的完整类名,如果已经在 hibernate-mapping 中设置了 2.package 属性那么就可以只写类名table属性 :设置为数据库中对应的表名,此表就是要与对象建立映射关系的那 个表
3.dynamic-insert属性 :动态插入 默认值是false,如果设置为true就代表如果字段值为null,不参与insert语句
4.dynamic-update属性 :动态更新 默认值”false”如果设置为true就代表没改动过的属性,将不会生成到update语句




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值