hibernate3.2(一)第一个hibernate程序
步骤:
1.创建一个java project;
2.创建User Libraries,加入如下jar:
* hibernate-3.2/Hibernate3.jar(核心jar)
* hibernate-3.2/lib/下的全部jar
* MySql jdbc驱动
注意:创建User Library 的时候不要点[System library]的对勾.
3.在工程中build path > Add libraries > User Library > 自定义library .
4.在工程中src/下加入hibernate.cfg.xml,可以从hibernate3.2/etc/下找到。
(Hibernate支持hibernate.properties和两种文件格式的配置,大多用
hibernate.cfg.xml)。
5.hibernate.cfg.xml的写法,删除多余部分,只剩下session-factory 节点,
然后参照模板文件hibernate.properties完善配置,hibernate.properties
中全是以键值对的形式存在,用在hibernate.cfg.xml中一般键做name属性,值做
value节点值:
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory></session-factory></hibernate-configuration>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <!-- 一个数据库对应一个sessionfactory --><session-factory> //jdbc:mysql://localhost/数据库的名字 或者 //jdbc:mysql://局域网ip/数据库的名字<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property>//如果这里换成了其他的数据库,只要修改值就可以,因为hibernate.cfg.xml数据库方言的存在,所以非常方便<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property>//Hibernate适配器,又称方言,它带来了很好的移植性<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property></session-factory></hibernate-configuration>
package com.wyx.hibernate;import java.util.Date;public class User {private String id;//给实体一个唯一性的标识private String name;private String password;private Date createTime;private Date expireTime; //getter and setter ....}
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- 删掉其他的 只剩下根节点 --></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <!-- 对类进行映射,name = "完整路径" , 默认存的表和实体类的名字一致, 可以用 table = "xxx"更改生成的数据库表--><class name="com.wyx.hibernate.User"><!-- 标识 数据表默认字段和实体属性名一致,可用column="xxx"来重新定义字段名--><id name="id"> <!-- 主键的生成策略 uuid全局的唯一标识,32位字符串,一般一万年不会重复--><generator name="code"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- resource ="映射文件的完整路径,不是包名!"--> <!-- 这样Hibernate就会把xxx.hbm.xml加载进来,分析并生成数据表 --> <mapping resource="com/wyx/hibernate/User.hbm.xml"/></session-factory></hibernate-configuration>
package com.wyx.hibernate;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class ExportDB {public static void main(String[] args) {//读取hibernate.cfg.xml文件 , 如果不加.configure()默认会读取hibernate.propertiesConfiguration cfg =new Configuration().configure();SchemaExport export = new SchemaExport(cfg);export.create(true, true);}}
package com.wyx.hibernate;import java.util.Date;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Client {public static void main(String[] args) {// 读取hibernate.cfg.xmlConfiguration cfg = new Configuration().configure();//创建sessionfactory,一个数据库对应一个sessionfactory,//如果有多个sessionfactory,则hibernate.cfg.xml中要有多个//sessionfactory节点SessionFactory factory =cfg.buildSessionFactory();//不要用classic下的Session创建,那是hibernate2.x用的//这个Session不是http的session,理解为对connection对象的封装Session session = null;try {//从工厂创建一个session(类似于创建连接)session = factory.openSession();//开启事务,hibernate默认的autocommit是false//所以要手动开启事务,手动提交session.beginTransaction();//实体类User new出来的对象user对应表中的一条记录User user =new User();user.setName("张三");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());//调用save方法保存进DBsession.save(user);//用session获得上文开启的事物并提交session.getTransaction().commit();} catch (HibernateException e) {e.printStackTrace();// 出现问题之后,回滚事务session.getTransaction().rollback();}finally{//最后关闭session(关闭连接)if(session != null){//判断session是打开的才关闭if(session.isOpen()){session.close();}}}}}
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_first</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--打印sql语句 方便调试--> <property name="hibernate.show_sql">true</property> <!--实体类的映射文件别忘了加入hibernate.cfg.xml --> <mapping resource="com/wyx/hibernate/User.hbm.xml"/></session-factory></hibernate-configuration>