码迷,mamicode.com
首页 > Web开发 > 详细

[Hibernate] 基本增删查改

时间:2016-10-22 07:44:23      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:his   类型   ring   案例   密码   property   builds   eid   tutorial   

本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作。

 

本例子的目录结构如下

技术分享

hibernate.cfg.xml 存储数据库信息,如数据库类型,账号密码,数据库名称

Empoyee.hbm.xml,声明 java 简单对象和数据库表结构的对应关系

Employee.java,java 简单对象,用于声明数据结构

ManageEmployee,管理 Employee,并对外提供操作 Employee 对象数据的接口。

App.java,演示本案例

 

 

代码详情

在数据库中,创建表结构

create table EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

 

创建简单对象类, POJO(Plain Old Java Object)。在 Java 中定义 Employee 的数据结构。

package tony.hibernateTest;

public class Employee {
    private int id;
    private String firstName;
    private String lastName;
    private int salary;
    
    public Employee(){
    }
    public Employee(String fname, String lname, int salary){
        this.firstName = fname;
        this.lastName = lname;
        this.salary = salary;
    }
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }
}

 

在 xml 文件中,将 java 的简单类 Employee 和数据库 employee 的表结构建立映射关系。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
 
 <hibernate-mapping>
     <class name="tony.hibernateTest.Employee" table="employee">
       <id name="id" type="int" column="id">         </id>
      <property name="firstName" column="first_name" type="string"/>
      <property name="lastName" column="last_name" type="string"/>
      <property name="salary" column="salary" type="int"/>
           
     </class>
 
 </hibernate-mapping>

 

hibernate.cfg.xml,提供数据库相关信息,例如数据类型,账号密码等。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
   <property name="hibernate.dialect">
      org.hibernate.dialect.MySQLDialect
   </property>
   <property name="hibernate.connection.driver_class">
      com.mysql.jdbc.Driver
   </property>

   <!-- Assume test is the database name -->
   <property name="hibernate.connection.url">
      jdbc:mysql://localhost/hibernateTest
   </property>
   <property name="hibernate.connection.username">
      username
   </property>
   <property name="hibernate.connection.password">
      password
   </property>

   <!-- List of XML mapping files -->
   <mapping resource="Employee.hbm.xml"/>

</session-factory>
</hibernate-configuration>

 

ManageEmployee,Employee 的操作工具类。对业务层提供操作 Employee 的接口。

 

package tony.hibernateTest;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class ManageEmployee {
    
    private static SessionFactory factory;
    {
        factory = new Configuration().configure().buildSessionFactory();
    }
    
    /**
     * Add an employee record into database.
     * @param fname
     * @param lname
     * @param salary
     * @return
     */
    public Integer addEmployee( String fname, String lname, int salary ){
        
        Session session = factory.openSession();
        Transaction tx = null;
        Integer employeeId = null;
        
        tx = session.beginTransaction();
        
        Employee employee = new Employee(fname, lname, salary);
        employeeId = (Integer)session.save(employee);
        tx.commit();        
        
        return employeeId;
    }
    
    public void listEmployees(){
        Session session = factory.openSession();
        Transaction tx = null;
        
        tx = session.beginTransaction();
        List<Employee> employees = session.createQuery("FROM Employee").list();
        for (Employee ee : employees){
            System.out.println(ee.getId() + ", " + ee.getFirstName() + ", " + ee.getLastName() + ", " + ee.getSalary());
        }
        tx.commit();        
    }
    
    public List<Employee> getAllEmployees(){
        Session session = factory.openSession();
        Transaction tx = null;
        
        tx = session.beginTransaction();
        List<Employee> employees = session.createQuery("FROM Employee").list();
        tx.commit();    
        return employees;
    }

    
    /**
     * update salary of the specified employee in database
     * @param employeeId
     * @param salary
     */
    public void updateEmployee(Integer employeeId, int salary){
        Session session = factory.openSession();
        Transaction tx = null;
        
        tx = session.beginTransaction();
        Employee ee = session.get(Employee.class, employeeId);
        ee.setSalary(salary);
        tx.commit();
    }
    
    public void deleteEmployee(Integer employeeId){
        Session session = factory.openSession();
        Transaction tx = null;
        
        tx = session.beginTransaction();
        Employee ee = session.get(Employee.class, employeeId);
        session.delete(ee);
        tx.commit();
    }    
}

 

App.java,Hibernate 增删该查功能演示类。创建 employee 的功能类 ManageEmployee,通过 ManageEmployee 提供的接口,进行增加、更新、删除 MySQL 中数据。

package tony.hibernateTest;

import java.util.List;

public class App 
{
    public static void main( String[] args )
    {        
        ManageEmployee me = new ManageEmployee();
        int empId1 = me.addEmployee("aa", "bb", 11);
        int empId2 = me.addEmployee("cc", "ff", 22);        
        
        List<Employee> employees = me.getAllEmployees();
        
        Employee firstEmp = employees.get(0);
        me.updateEmployee(firstEmp.getId(), firstEmp.getSalary() + 10);

        Employee lastEmp = employees.get(employees.size() - 2);
        me.deleteEmployee(lastEmp.getId());
        
        me.listEmployees();
    }
}

 

在 pom.xml 中,声明使用到的依赖,通过 maven 进行加载。

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.3.Final</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

 

参考资料

Hibernate - Examples, tutorialspoint

 

[Hibernate] 基本增删查改

标签:his   类型   ring   案例   密码   property   builds   eid   tutorial   

原文地址:http://www.cnblogs.com/TonyYPZhang/p/5986588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!