ORM:Object Relation Mapping;
阻抗不匹配:现在我们常用的编程语言都是面向对象的,而常用的数据库都是关系型数据库,而我们一般如果要用Java访问MySQL,都是使用JDBC,并且要在Java代码中写SQL语句,而这点是由于面向对象和关系融合的缺点;
而ORM框架就解决了这点;
Hibernate是ORM框架的一种;而Hibernate属于JBoss,JBoss被Redhat收购,因此现在Hibernate属于Redhat;
Hibernate现在已经发布版本4了,但是现在常用的还是版本3,因此我们现在就版本3进行讲解;
ORM框架主要完成的是操作持久化对象-->操作关系型数据库的映射;
Hibernate3下载地址: http://sourceforge.net/projects/hibernate/files/hibernate3/
安装Hibernate Tools插件,此插件能够方便我们我、Hibernate开发;
Update Site: http://download.jboss.org/jbosstools/updates/stable/helios/
安装插件后,就可以很快速的创建一个hibernate.cfg.xml 和 *.hbm.xml;
注意:因为Hibernate的目标是操作数据库,因此数据库的驱动是必须要配置的;
一、配置Hibernate3
制作User Library
这样做的好处是如果以后开发需要使用Hibernate时,直接导入即可,很方便;
这样我们Hibernate环境就配置好了;
POJO的限制
(1)必须有一个无参构造方法;
(2)有一个主键(通常为id);
(3)类不能是final的;
二、开发一个Hibernate入门程序
工程的目录如下:
POJO
package org.xiazdong; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Person.hbm.xml:映射文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2012-5-13 14:23:31 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="org.xiazdong.Person" table="PERSON"> <!-- 设置类,和对应的表 --> <id name="name" type="java.lang.String"> <!-- id标签设置主键 --> </id> <property name="age" type="int"> <!-- 设置其他属性 --> </property> </class> </hibernate-mapping>
Hibernate.cfg.xml(全局配置文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!--如果使用HibernateTools,则会自动生成这些DTD --> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 设置驱动 --> <property name="hibernate.connection.password">12345</property> <!-- 设置密码 --> <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property> <!-- 设置URL --> <property name="hibernate.connection.username">root</property> <!-- 设置用户名 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 设置数据库方言 --> <property name="show_sql">true</property> <!-- 设置为true,则如果执行SQL语句,则会显示在console中 --> <property name="hbm2ddl.auto">update</property> <!-- 更新数据库 --> <mapping resource="org/xiazdong/Person.hbm.xml"/> <!-- 指定映射文件 --> </session-factory> </hibernate-configuration>
测试文件
package org.xiazdong; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Test { public static void main(String[] args) { Configuration config = new Configuration().configure(); //读取hibernate.cfg.xml SessionFactory factory = config.buildSessionFactory(); //创建Session工厂 Session session = factory.openSession(); //创建session Transaction t = session.beginTransaction(); //因为hibernate不是自动提交,因此需要创建事务 Person p = new Person(); //创建POJO p.setName("xiazdong"); p.setAge(21); session.save(p); //POJO-->PO t.commit(); //提交事务 } }
小知识点:
1.显示Mysql支持的引擎
show engines;
2.显示表当前使用的引擎
show create table [表名];