(1)第一个hibernate程序
遇到问题:jar包问题,环境的配置
简单程序运行所需要导入的jar包:
-1-数据库驱动包
-2-hibernate3.jar //hibernate核心包,在根目录下
-3-antlr-2.7.6.jar //语法分析器
-4-commons-collections-3.1.jar //java中collection对象的扩展包
-5-dom4j-1.6.1.jar //Java的XML API包
-6-javassist-3.9.0.GA.jar //分析、编辑和创建Java字节码的类库
-7-jta-1.1.jar //Java事务API
-8-slf4j-api-1.5.8.jar //核心API
-9-slf4j-nop-1.5.8.jar //日志解决方案(slf4j)实现
测试程序:---------------------------------------------------------------
//要存入数据库的对象
public class Event {
private int id;
private String title;
private Date date;
//设为私有方法,策略让其自动生成,作为主键
private void setId(int id){
this.id = id;
}
/*
other getter and setter method and all is public.
*/
}
-------------------------------------------------------------------------
//对象映射表,即该对象与数据表的关联
//命名规则:Event.hbm.xml(与对象名相同)
//放置位置:与对应的类在相同目录下
//数据库存在一张表EVENTS(EVENT_ID,EVENT_DATE,title)
<hibernate-mapping package="包名">
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native" />
</id>
//时间类型,命名不要用date,time,datetime,与关键字冲突
//所以用到column属性,而title可以不用设置
//这种是用在类的属性与数据库表的列名不相同时
<property name="date" type="timestamp" column="EVENT_DATE" />
<property name="title" />
</class>
</hibernate-mapping>
-------------------------------------------------------------------------
//hibernate核心配置文件hibernate.cfg.xml
//存放位置:位置于根目录下,src下
<hibernate-configuration>
<session-factory>
<!-- 数据库连接设置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC连接池 (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 显示执行的sql语句 -->
<property name="show_sql">true</property>
<!-- 设置该属性可以判断是否重建表或者是修改表 -->
<property name="hbm2ddl.auto">update</property>
<!--将自己写的对象配置文件写入该标签中(重要) -->
<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml" />
</session-factory>
</hibernate-configuration>
-------------------------------------------------------------------------
//测试函数
public static void main(String[] args) {
Configuration cg = new Configuration();
//加载配置文件
cg = cg.configure();
//得到一个session工厂对象
SessionFactory sf = cg.buildSessionFactory();
//得到一个session对象
Session s = sf.openSession();
//开始事务
s.beginTransaction();
Event e = new Event();
e.setTitle("kaka");
e.setDate(new Date());
//存储对象
s.save(e);
//提交操作
s.getTransaction().commit();
//关闭连接
s.close();
sf.close();
}
-------------------------------------------------------------------------
(2)单向Set-based关联
若在上面的测试类Person中加入集合类Set events = new HashSet();
映射一对多的关系,即一个人对应多个任务
此时需要在Person.hbm.xml配置文件中增加:
<set name="events" table="PERSON_EVENT">
<key column="PERSON_ID"/>
<many-to-many column="EVENT_ID" class="Event"/>
</set>
运行测试程序自动生成一张新的多对多关联表
总结:通过今天的学习,初步了解了hibernate,以及简单程序的运行,因为以前如果操作JDBC来访问DB,
感觉打破了面向对象的思想,里面存在着关系的访问,而使用了hibernate可以运用它的ORM方法,
将对象与关系映射起来,操作时只而要save对象就可以了,操作也变得更加简便,而且更加符合
面向对象的思想。