项目的结构学习一个框架我觉得首先还是从项目学起,所以我从接触hibernate开始就尝试自己搭建一个hibernate项目。
本期项目的云盘地址:链接:http://pan.baidu.com/s/1jI750Vk 密码:9vgi
这里面主要 有两个配置文件和一个实体类
hibernate.cfg.xml
hibernate.cfg.xml是hibernate配置文件的标准命名,具体后面会讲,也可以将该配置文件命名为其他名字。
<?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="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/h4
</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/h4/entity/Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
从这个配置文件可以看到,大致就是配置了相关的数据库连接的一些属性,包括登录数据库的用户名密码已经jdbc的jar包等等的属性
解释一下几个属性:
show_sql:是在控制台上显示sql语句,方便追踪
dialect:方言 ,代表你现在用的是什么数据库
mapping:对应映射的xml文件
该文件一般情况下放在根目录下,采用hibernate.cfg.xml这个标准命名。具体原因可以看一下代码。
//初始化hibernate的配置文件
Configuration configuration = new Configuration().configure();
可以看到configure有多个重载的方法
进入configure无参方法
从上面这个图可以看到,调用无参的configure方法,就是默认调用configure(String url)的方法,并传入"/hibernate.cfg.xml"这个参数进去
创建一个Users的实体类,跟数据库中的表一一对应。这就是ORM中的O,也就是Object。
在实体类中记住最重要是要创建一个无参构造方法。因为hibernate在生成实体类的时候是采用反射机制,所以必须有一个无参的构造函数。
Users.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
<hibernate-mapping>
<class name="com.h4.entity.Users" table="users">
<id name="id" type="java.lang.Integer">
<column name="Id"></column>
<generator class="native"></generator>
</id>
<property name="username" type="java.lang.String">
<column name="UserName" length="50"></column>
</property>
<property name="password" type="java.lang.String">
<column name="PassWord" length="50"></column>
</property>
<property name="age" type="java.lang.Integer">
<column name="Age"></column>
</property>
</class>
</hibernate-mapping>
该配置文件中的id对应的是表的主键PK,而其他的property则对应表的其他属性。
测试
写一个测试类,有一个测试方法可以把users持久化。
public static void addUsers(){
//这是4.x之前创建SessionFactory的方法,4.x之后采取另外一种方法
//SessionFactory sf = new Configuration().configure().buildSessionFactory();
SessionFactory sf = null;
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sf = configuration.buildSessionFactory(serviceRegistry);
Session s = null;
Transaction t = null;
try{
//准备数据
Users um = new Users();
um.setUsername("h3");
um.setPassword("1234");
um.setAge(1);
s = sf.openSession();
t = s.beginTransaction();
s.save(um);
//Users users = (Users) s.get(Users.class, 1);
//System.out.println(users.toString());
t.commit();
}catch(Exception err){
t.rollback();
err.printStackTrace();
}finally{
s.close();
}
}
public static void main(String[] args) {
Test.addUsers();
}
可以看到打印出来SQL语句,结果没有报错运行的结果如下
增加了一条记录查看数据库表
本节课就到这里啦
另外说明,本节课的源代码是跟下一节的源代码合在一起了,文件名为hibernate_2.zip
网友评论