Hibernate 入门1

Related

Overview

简单地说,hibernate 完成了一种映射操作,就是将关系型数据库中表映射成为了一个java对象,这样就为代码操作实际的数据库提供了很多方便.
hibernate是对JDBC的进一步封装,完成从对象(Object)到关系(Relation)的映射(Mapping),也就是一个ORM框架.

copied

这里一个图很清楚表达了hibernate的组件构成.在配置文件中写的xml被Configure实例对象读取之后可以创建sessionFactory对象,用这个工厂对象可以进一步创建Session,创建连接,操作数据库.
配置文件(默认为hibernate.cfg.xml)中申明了一些必要的配置信息,如数据库的地址,端口号,数据库用户名,密码,映射类等等信息.

Code

Dao层用来操作数据库(增删改查)的基本操作,这几乎是web应用程序所默认的,使用课堂上的例子,来完成一个对user(有三个字段,自增的id,name(char(30)), 和address(char(50))表的操作.
我们建立了一个User类,这个User类的字段和user表中的字段一致,并且有getter/setter方法

package cst.zju.edu.alexsun.model;

import javax.persistence.*;

@Entity
@Table(name = "user")
public class User {
    @Id
    @Column(name="id")
    @GeneratedValue
    private int id;

    @Column(name="name")
    private String name;

    @Column(name="address")
    private String address;

    public User(){
        this.id = 6666;
        this.name = "6666";
        this.address = "6666";
    }
    public User(int id, String name, String address){
        this.name = name;
        this.id = id;
        this.address = address;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Id
    @GeneratedValue
    public int getId(){
        return id;
    }

    public String getName(){
        return this.name;
    }

    public String getAddress(){
        return this.address;
    }

    @Override
    public String toString() {
        return "student id: " + id + " name: "+name+" address in " + address;
    }
}

用注解的方法标注对应数据库表中的字段.
用UserDao设计增删改操作

package cst.zju.edu.alexsun.Dao;
import cst.zju.edu.alexsun.model.User;
import cst.zju.edu.alexsun.util.HibernateUtil;
import org.hibernate.Session;

public class UserDao implements IUserDao {
    public void addUser(User user) {
        Session session = null;
        try {
            session = HibernateUtil.openSession();
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();
        } catch (Exception e) {
            // handle the exception
            throw new RuntimeException(e);
        } finally {
            HibernateUtil.close(session);

        }
    }

    public User getUserByName(String userName) {
        Session session = null;
        User user = null;
        try {
            session = HibernateUtil.openSession();
            user = (User) session.createQuery("from User where name = ?")
                    .setParameter(0, userName).uniqueResult();

        } catch (Exception e) {
            // handle the exception
            throw new RuntimeException(e);
        } finally {
            HibernateUtil.close(session);
        }
        return user;
    }

    public void delete(User user) {
        Session session = null;
        try {
            session = HibernateUtil.openSession();

            session.beginTransaction();

            session.delete(user);

            session.getTransaction().commit();
        } catch (Exception e) {
            // handle the exception
            throw new RuntimeException(e);
        } finally {
            HibernateUtil.close(session);

        }
    }
}

用HibernateUtil进行连接,设置配置属性.

package cst.zju.edu.alexsun.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
    private final static SessionFactory FACTORY = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        Configuration cfg = new Configuration().configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(cfg.getProperties()).buildServiceRegistry();
        SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);
        return factory;
    }

    public static SessionFactory getSessionFactory() {
        return FACTORY;
    }

    public static Session openSession() {
        return FACTORY.openSession();
    }

    public static void close(Session session) {
        if (session != null)
            session.close();
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,485评论 9 66
  • Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库...
    兰缘小妖阅读 1,227评论 1 18
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • 此文概括介绍了 Objective-C 语言中的基本元素。其范围仅限于 Objective-C 语言对 ANSI ...
    NEXTFIND阅读 816评论 0 3