第三章:Hibernate Maven开发环境搭建,集成mysql数据库

Hibernate maven环境搭建

一)创建一个maven project,项目名称叫xm-hibernate-maven,项目结构图如下:

二)pom.xml配置内容如下:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.xm.hibernate</groupId>
  <artifactId>xm-hibernate-maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
  <properties>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
   
  <dependencies>
  		
  		<!-- junit测试jar引用 -->
  		<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
  
  		<!-- hibernate核心jar引用 -->
  		<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.3.2.Final</version>
        </dependency>
        
        <!-- mysql jar引用 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        
  </dependencies>
  
</project>

三)在src/main/java创建一个员工实体类,类名为EmployeeEntity,代码如下:

package com.xm.hibernate.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 员工表 entity
 * @author ouyangjun
 *
 */
@Entity
@Table(name = "employee")
public class EmployeeEntity {
	
	@Id
	@Column(name = "emp_id")
	private Integer empId;
	
	@Column(name = "emp_name")
	private String empName;
	
	@Column(name = "emp_no")
	private String empNO;
	
	@Column(name = "create_date")
	private Long createDate;

	public Integer getEmpId() {
		return empId;
	}

	public void setEmpId(Integer empId) {
		this.empId = empId;
	}

	public String getEmpName() {
		return empName;
	}

	public void setEmpName(String empName) {
		this.empName = empName;
	}

	public String getEmpNO() {
		return empNO;
	}

	public void setEmpNO(String empNO) {
		this.empNO = empNO;
	}

	public Long getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Long createDate) {
		this.createDate = createDate;
	}
	
}

四)在src/main/resources下创建hibernate的配置文件,文件名hibernate.cfg.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/xm</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">admin</property>
    
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    
    <!-- 使用的是本地事务(jdbc事务 本地事务:数据库只有一个) -->
    <property name="current_session_context_class">thread</property>
    
    <!-- 实体类注册 -->
    <mapping class="com.xm.hibernate.entity.EmployeeEntity" />
    
</session-factory>
</hibernate-configuration> 

五)在src/main/test文件夹下创建一个员工数据添加的测试类AddEmployee,代码如下:

package com.xm.hibernate.test;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.xm.hibernate.entity.EmployeeEntity;

public class AddEmployee {
	
	public static void main(String[] args) {
		
		// 创建sessionFactory
		SessionFactory factory = new Configuration().configure().buildSessionFactory();
		
		// 获取session
		Session session = factory.getCurrentSession();
		
		try{
			
			// 开启事务
			session.getTransaction().begin();
			
			EmployeeEntity emp = new EmployeeEntity();
			emp.setEmpId(100000);
			emp.setEmpName("ouyangjun");
			emp.setEmpNO("333333");
			emp.setCreateDate(new Date().getTime());
			
			// 持久化
			session.persist(emp);
			
			emp = new EmployeeEntity();
			emp.setEmpId(200000);
			emp.setEmpName("xm");
			emp.setEmpNO("888888");
			emp.setCreateDate(new Date().getTime());
			
			// 持久化
			session.persist(emp);
			
			// 提交事务
			session.getTransaction().commit();
			
			System.out.println("==>员工数据持久化成功!");
		} catch (Exception e){
			e.printStackTrace();
			session.getTransaction().rollback();
			
			System.out.println("==>员工数据持久化失败!");
		} finally {
			session.close();
			
			factory.close();
			
			System.out.println("==>事务关闭!");
		}
		
	}
	
}

执行main方法,效果截图如下:

六)在src/main/test文件夹下创建一个员工数据查询测试类QueryEmployee,代码如下:

package com.xm.hibernate.test;

import java.util.List;
import java.util.Map;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.hibernate.transform.Transformers;

import com.xm.hibernate.entity.EmployeeEntity;

public class QueryEmployee {

	public static void main(String[] args) {
		
		// 创建sessionFactory
		SessionFactory factory = new Configuration().configure().buildSessionFactory();
		
		// 获取session
		Session session = factory.getCurrentSession();
		
		try{
			
			// 开启事务
			session.getTransaction().begin();
			
			System.out.println("第一种查询方式----------begin----------");
			// 第一种方式查询, hibernate HQL查询, 以实体类信息代替数据库表中的信息
			String hql = "select e from EmployeeEntity e";
			
			// 执行查询
			Query<EmployeeEntity> query = session.createQuery(hql);
			// 默认返回的数据是List<Object[]>
			List<EmployeeEntity> list = query.getResultList();
			for(EmployeeEntity entity : list){
				System.out.println(entity.getEmpId() + "----" + entity.getEmpName()
					+ "----" + entity.getEmpNO() + "----" + entity.getCreateDate());
			}
			System.out.println("第一种查询方式----------end----------");
			
			
			System.out.println("第二种查询方式----------begin----------");
			// 第二种方式查询, 原生sql查询
			String sql = "select e.* from employee e";
			Query queryTwo = session.createSQLQuery(sql);
			// 默认返回的数据是List<Object[]>
			List listTwo = queryTwo.getResultList();
			Object[] objs;
			for(int i=0; i<listTwo.size(); i++){
				objs = (Object[])listTwo.get(i);
				
				// 根据sql字段查询的顺序打印
				System.out.println(objs[0] + "----" + objs[1] + "----" + objs[2] + "----" + objs[3]);
			}
			System.out.println("第二种查询方式----------end----------");
			
			
			System.out.println("第三种查询方式----------begin----------");
			// 第三种方式查询, 原生sql查询, 返回值不一样
			String sqlThree = "select e.* from employee e";
			Query queryThree = session.createSQLQuery(sqlThree);
			// 设置返回的参数格式为List<Map<Object, Object>>
			queryThree.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
			// 默认返回的数据是List<Object[]>
			List<Map<Object, Object>> listThree = queryThree.getResultList();
			
			// map返回方式性能比object低, 不推荐使用了
			for(Map<Object, Object> map : listThree){
				// map key
				System.out.println(map.get("emp_id") + "----" + map.get("emp_name")
					+ "----" + map.get("emp_no") + "----" + map.get("create_date"));
			}
			System.out.println("第三种查询方式----------end----------");
			
		} catch (Exception e){
			e.printStackTrace();
			session.getTransaction().rollback();
			
			System.out.println("==>数据查询失败!");
		} finally {
			session.close();
			
			factory.close();
		}

	}

}

执行main,效果截图如下:

本章完结,待续!

源码下载地址: https://gitee.com/ouyangjun_xm/hibernate/attach_files下chapter-three.rar压缩包

                      码云账户: [email protected]     密码: [email protected]

                      请勿恶意操作,谢谢!

本文说明:该文章属于原创,如需转载,请标明文章转载来源

猜你喜欢

转载自blog.csdn.net/p812438109/article/details/81395217