使用Hibernate框架须添加相关jar包,maven依赖配置如下
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.0.Final</version>
</dependency>
在引入Hibernate依赖后,启动项目时会默认加载hibernate.cfg.xml文件,该xml文件主要用于配置数据库设置及O-R映射关系
<?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">oracle.jdbc.driver.OracleDriver</property>
<!--数据库URL -->
<property name="connection.url">jdbc:oracle:thin:@localhost:orcl</property>
<!--数据库用户 -->
<property name="connection.username">hlbert</property>
<!--数据库密码 -->
<property name="connection.password">hlbert</property>
<!--每个数据库对应的方言匹配其平台特性 -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!--是否将运行产生的sql语句输出到日志 -->
<property name="hibernate.show_sql">true</property>
<mapping resource="hbm/user.hbm.xml" />
</session-factory>
</hibernate-configuration>
O-R映射文件配置如下
<?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 package="orz.hlbert.hibernate.entity">
<class name="User" table="T_USER">
<id name="userId" column="fuserid">
<generator class="uuid"/>
</id>
<property name="username" column="fusername" />
<property name="fstatus" />
<property name="fstatusLabel" formula="(SELECT DIC.FNAME FROM T_DICTIONARY DIC WHERE DIC.FCODE=fstatus AND DIC.FPARENTDMCODE='Account_Status')" />
<list name="rights" table="USER_RIGHT">
<!-- 外键 -->
<key column="username" not-null="true" />
<!-- 集合的索引列 -->
<list-index column="order_" />
<!-- 映射集合元素的数据列 -->
<element type="string" column="right_name" />
</list>
</class>
</hibernate-mapping>
POJO没什么特殊要求,普通的JavaBean即可
package orz.hlbert.hibernate.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("serial")
public class User implements Serializable {
private String userId;
private String username;
private Integer fstatus;
private String fstatusLabel;
private List<String> rights=new ArrayList<String>();
}
示例代码中省略了Getter、Setter,无需赘言。基本的持久化功能测试如下:
package orz.hlbert.hibernate.entity;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class UserTest {
public static void main(String[] args) {
Configuration conf=new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session sess=sf.openSession();
Transaction tx=sess.beginTransaction();
//1、新增User记录
// User user=new User();
// user.setUsername("hlbert");
// user.setFstatus(1);
// sess.save(user);
//2、查询,测试hbm文件formula元素
// User user=(User)sess.get(User.class, "4028da284758fd06014758fd07360000");
// System.out.println(user.getFstatusLabel());
//3、从表关联
User user=new User();
user.setUsername("testList");
user.setFstatus(1);
List<String> rights=new ArrayList<String>();
rights.add("MAINTAIN");
rights.add("RETRIEVE");
user.setRights(rights);
sess.save(user);
rights.add("DELETE");
tx.commit();
sess.close();
sf.close();
}
}