所用导入的jar包已在上文提到,在这里就截个图吧。主要根据自己写的比较简单的,容易理解的小栗子,希望对大家有帮助,也希望多多指正。
1、工具类
public class HibernateUtil {
private static Configuration configuration;
private static SessionFactory sessionFactory;
static{
configuration=new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory=configuration.buildSessionFactory(serviceRegistry);
}
//创建session对象
public static Session getSession(){
Session session=null;
if(sessionFactory!=null){
//线程不安全
//session=sessionFactory.openSession();
// 线程安全
session=sessionFactory.getCurrentSession();
}
return session;
}
//关闭session
public static void closeSession(Session session){
if(session!=null){
session.close();
}
}
2、具体测试类代码
//单向多对一
@Test
public void testManyToOne(){
Session session=HibernateUtil.getSession();
try {
//创建事务
session.beginTransaction();
Dept dept1=new Dept();
dept1.setDname("工程部");
dept1.setLoc("郑州市");
Dept dept2=new Dept();
dept2.setDname("业务部");
dept2.setLoc("北京市");
Emp emp1=new Emp();
emp1.setEname("张三");
emp1.setHirdate(new Date());
emp1.setJob("主管");
emp1.setDeptno(dept1);
Emp emp2=new Emp();
emp2.setEname("李四");
emp2.setHirdate(new Date());
emp2.setJob("普通员工");
emp2.setDeptno(dept1);
// 插入部门
session.save(dept1);
session.save(dept2);
// 插入员工
session.save(emp1);
session.save(emp2);
// 提交事务
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
}
}
// 测试单项一对多
@Test
public void testOneToMany(){
Session session=HibernateUtil.getSession();
try {
//创建事务
session.beginTransaction();
com.xinlanjian.bean1.Emp emp1=new com.xinlanjian.bean1.Emp();
emp1.setEname("张三");
emp1.setHirdate(new Date());
emp1.setJob("主管");
com.xinlanjian.bean1.Emp emp2=new com.xinlanjian.bean1.Emp();
emp2.setEname("李四");
emp2.setHirdate(new Date());
emp2.setJob("普通员工");
com.xinlanjian.bean1.Dept dept1=new com.xinlanjian.bean1.Dept();
dept1.setDname("工程部");
dept1.setLoc("郑州市");
dept1.getEmp().add(emp1);
com.xinlanjian.bean1.Dept dept2=new com.xinlanjian.bean1.Dept();
dept2.setDname("业务部");
dept2.setLoc("北京市");
dept2.getEmp().add(emp2);
// 插入员工
session.save(emp1);
session.save(emp2);
// 插入部门
session.save(dept1);
session.save(dept2);
// 提交事务
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
}
}
// 查询
@Test
public void testLoad(){
Session session=HibernateUtil.getSession();
try {
session.beginTransaction();
//如果load查询没有找到结果,抛出异常
com.xinlanjian.bean1.Dept dept=(com.xinlanjian.bean1.Dept)session.load(com.xinlanjian.bean1.Dept.class, 1);
System.out.println(dept);
Set<com.xinlanjian.bean1.Emp> set=dept.getEmp();
for(com.xinlanjian.bean1.Emp emp:set){
System.out.println(emp.getEname()+","+emp.getJob());
}
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
}
}
3、hibernate.cfg.xml映射文件配置
<hibernate-configuration>
<session-factory>
<!--1.数据库连接信息 -->
<property name="connection.url">jdbc:mysql://localhost:3306/mydb1?useSSL=false&serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<!--2.配置hibernate的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--指定当前 session上下文 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 使用第三方连接池 -->
<property name="hibernate.connection.provider_class">
org.hibernate.c3p0.internal.C3P0ConnectionProvider
</property>
<!--第三方连接池大小 -->
<property name="hibernate.c3p0.max_size">20</property>
<!--指定连接池大小 -->
<!-- <property name="hibernate.connection.pool_size">30</property> -->
<!-- 将执行的SQL语句打印到控制台上 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否自动建表设为update表示如果表存在则不创建新表只更新存在表,如果不存在则创建新表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 关联映射文件 -->
<mapping resource="com/xinlanjian/bean1/Dept.hbm.xml" />
<mapping resource="com/xinlanjian/bean1/Emp.hbm.xml" />
</session-factory>
</hibernate-configuration>