今天正好有空,想写写关于hibernate的一些东西。
首先要说的是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">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>//显示sql语句
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>//使用的方言
<property name="connection.url">jdbc:mysql://localhost:3306/ygh</property>//连接数据库url
<property name="connection.username">ygh</property>//username
<property name="connection.password">123456</property>//password
<property name="connection.driverClass">com.mysql.jdbc.Driver</property>//连接数据库驱动
<mapping resource="study/hibernate/entity/Student.hbm.xml" />//映射文件
</session-factory>
</hibernate-configuration>
最简单的配置。
这里有一点需要说明的是,xml里面有许多标签名,属性名,很难记,这时就情不自禁的想
按ctrl+’/’来提示,结果:
没有提示。
这需要我自己手动添加下dtd文件。
这个包下有/org/hibernate/hibernate-configuration-3.0.dtd,导出。
打开window=》Perferences=》XML Catalog =》 add
Locatin选择你dtd文件。
在hibernate.cfg.xml文件的头部
Key type
选择 System ID key写http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd
然后关掉hibernate.cfg.xml 再打开,
Ctrl+’/’ 就有提示了,哇 好开心~~ 有个好的开头。
先让我们来一下helloworld,每次写helloworld,就特别有成就感~~
建表:
create table t_student(
t_id int primary key auto_increment,
t_name varchar(50)
)创建Student对象:
package study.hibernate.entity;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
就2个字段,和t_student对应。
创建Student.hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="study.hibernate.entity">
<class name="Student" table="t_student">
<id column="t_id" type="integer">
<generator class="native">
</generator>
</id>
<property name="name" column="t_name" type="string"></property>
</class>
</hibernate-mapping>
映射文件的作用就是说嘛实体类Student和表t_student的关系。
Test:
StandardServiceRegistryBuilder srb=new StandardServiceRegistryBuilder();
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory(srb.build());
Session session=sf.openSession();
Student s=new Student();
s.setName("ygh");
session.save(s);
运行,报错:
Exception in thread "main" org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
这时因为 在hibernate3的时候是直接buildSessionFactory就可以的,现在这个方法过时了,
需要传入ServiceRegistry,我前面也写了new StandardServiceRegistryBuilder().build() 这样还不够,没有把xml文件里面的property传入,需要new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()), 这样就可以把属性传入了。
运行:
成功,并显示插入语句,那么我们看看数据库里是否已经插入。
数据库中并没有数据。说明没有插入。
这是因为,我们插入后没有提交。
我们在
保存操作加入事务,报错后commit,
则发现在数据库中
为什么id是3呢,因为 刚才insert了2次,但是都没有提交。
Helloworld案例就结束了。
该贴被java_along编辑于2014-11-13 8:31:40