Hibernate冬眠 ORM框架(O - R mapping )分别是对象 关系 映射mysql
对象 – 持久化 – 数据库 (关系数据库、对象数据库)sql
对象 – 关系数据库
Hibernate的优势:(1)使用HIBERNATE.应用层就能够专一于业务逻辑的实现, 只需知道怎么使用HIBERNATE所提供的接口,缓存
而不知道具体实现的细节. session
(2)封装了JDBC以后,能够链接数据库时减小代码的冗余.oracle
(3)直接用映射文件,能够方便的实现与不一样数据库的链接.app
Hibernate的冬眠是指将对象的生命周期更长一点,也就是对象的持久化;负载均衡
1讲到将对象保存到文件中用到的类是ObjectOutputStream可是这种不方便,所以将此对象存储到数据库中,那就方便多了,而hibernate就是讲对象转化为关系,它将对象的属性存到数据库中,有了对象型数据库就不会有hibernate了;框架
Insert into(User user)eclipse
Ps.setString(1,user.getUsername)这种写法是纯手工的比较比较慢,
2 演示的是以Java项目为例的
hibernate的环境搭建,将hibernate包下的hibernate3.jar和lib包所有拷贝到项目中。Lib中的jar文件都要解压出来放进工程项目下;接着导入包和数据库驱动;hibernate中的配置文件是hibernate.cfg.xml;放到项目的src文件夹下;在hibernate.cfg.xml里面有个session工厂;
3 工厂有好几个有DEO工厂产生DEO,还有个Connection工厂用来生产connection的;
Session工厂是用来产生session的,但不是jsp中的session;在hibernate中session只封装了connection;就是用来给客户提供数据库链接的;则将数据库的信息配置到
<session-factory >
<propetry name=” hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>
<propetry name=” hibernate.connection.url”>com.mysql.jdbc.Driver</property>
<propetry name=” hibernate.connection.username”>hibernate </property>
<propetry name=” hibernate.connection.password”>paswssword </property>
<propetry name=” hibernate.dialect”>com.mysql.jdbc.Driver</property>
</session-factory>
hibernate/properties/etc/ hibernate.properties或
中;配置的时候能够参考包里的hibernate/properties/etc/hibernate.cfg.xml文件有数据库的相关配置信息;经过这样的配置后就是hibernate的数据库链接可是每次链接数据库的时候都要new一下效率就不行了;因此最好配置好点的数据源如c3p0;
hibernate.dialect org.hibernate.dialect.MySQLDialect
dialect在hibernate中有方言这个概念,它能够自动的将配置信息转换成底层的sql语句;好比分页,需好几条sql语句;自动实现数据库不一样带来的技术;(好比mysql和sqlserver中的主键有自动递增,但oracle中就没有这时候就要咱们去配置触发器来实现此功能,而是序列方式;因此hibernate能够自动的去检测是那个数据库;用myeclipse创建数据库的方法
点击图中的DB Browser,新链接mysql数据;
4 C3p0:配置这是个比较经典的数据源配置;
C3P0 Connection Pool###
###########################
#hibernate.c3p0.max_size 2 最多连接是数据库
#hibernate.c3p0.min_size 2 最少链接的
#hibernate.c3p0.timeout 5000 链接超时
#hibernate.c3p0.max_statements 100 数据库中的缓存
#hibernate.c3p0.idle_test_period 3000 链接满了后多少时间在链接;
#hibernate.c3p0.acquire_increment 2 从新链接的数量
#hibernate.c3p0.validate false 验证链接是否可用;可用于压力测试中;配置方法:
<propetry name=” hibernate.c3p0.max_size”>50 </property>
是否打印语句是用来检测的时候能够在控制台看到sql语句;
<propetry name=” hibernate.show_sql”>true </property>
5 下一步是创建关系映射,
用Id(主键)配置持久化标识;其它属性就用property来配置;
<generator class="generatorClass"/>表示主键生成方式mysql中是indentify,
在这有一个和indentify(mysql 主键生成方式)类似的关键字那就是increment它在集群中不易使用
Indentify和squence区别indentify能够在sqlServer、mysql中逐渐自动递增identity由于只能在一个table中用一次,可是不能用在oracle中;squence用在Oracle中sequence能够在一张表中的多个字段多被用到;db2 支持sequence,identity的两种用法
集群也就是负载均衡的意思,可是increment它运行的时候必须在同一个虚拟机,因此它在集群中不能使用的
6注册映射关系:
<mapping resource=”包/kk.xml”/>
7测试用到的测试工具是Junit工具:测试时创建一个类必须继承testcase类;用到了读取hibernate的配置文件的方法是configuration();Configuration cfg=new Configuration();
建立session-factory的方法
SeeionFactory sf = cfg.buildSessionFactory();