简单hibernate查询实例

所用导入的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&amp;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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值