Hibernate从入门到右臂,hibernate框架的搭建

图片 27
ca88会员登录中心

Java ssh 框架 hibernate 详细理解,sshhibernate

Hibernate框架技术相信对大多数的 java
程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,需要我们认真的分析数据表中数据项之间的交互;

数据库表的之间的关系有:

(1)一对多(1:n)(班级:学生)

(2)多对多  (m:n)(订单;商品)

(3)一对一 (1:1)用的 比较少 合并到 一个 表就可以达到需求

今天首先研究一下啊 

表的一对多关系

Demo :实现t_user(用户表) 和
t_orders(订单表)的双向一对多关系的建表实现  {测试例:保存一个用户
user 包含多个 orders的用户 }

程序所有的 jar和 dtd:

图片 1

 

数据库结构图:

图片 2

)A:创建 两个 实体:让两个实体之间互相的引用##

    User实体:注意 颜色文档

package store_entity;
import java.sql.Timestamp;
import java.util.Set;
/**
 * 用户类   实体类
 * @author Administrator
 *    
 */
public class User {
    private int id;
    private String username;
    private String password;
    private String nickname;
    private String email;// 激活邮件地址
    private String role;
    private int state;// 激活的状态
    private String activecode;// 激活码
    private Timestamp updatetime;// 时期的时间戳

    private Set<Orders> orders;//用户 下的 订单集合
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public String getActivecode() {
        return activecode;
    }
    public void setActivecode(String activecode) {
        this.activecode = activecode;
    }
    public Timestamp getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(Timestamp updatetime) {
        this.updatetime = updatetime;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password="
                + password + ", nickname=" + nickname + ", email=" + email
                + ", role=" + role + ", state=" + state + ", activecode="
                + activecode + ", updatetime=" + updatetime + "]";
    }
    public Set<Orders> getOrders() {
        return orders;
    }
    public void setOrders(Set<Orders> orders) {
        this.orders = orders;
    }

}

Orders实体类 :注意颜色 文本

package store_entity;

import java.sql.Timestamp;
import java.util.Set;

/**
 * 
 * 订单 实体类
 * @author Administrator
 *
 */
public class Orders {

    private String id;//数据库 需要 自己 手动 添加 
    private String receiverinfo;//收获地址
    private int paystate;//付款 状态
    private Timestamp ordertime;//订单创建 时间 
    private User user;//下单 用户 id

    private Set<OrderItem> set;

    public Set<OrderItem> getSet() {
        return set;
    }
    public void setSet(Set<OrderItem> set) {
        this.set = set;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getReceiverinfo() {
        return receiverinfo;
    }
    public void setReceiverinfo(String receiverinfo) {
        this.receiverinfo = receiverinfo;
    }
    public int getPaystate() {
        return paystate;
    }
    public void setPaystate(int paystate) {
        this.paystate = paystate;
    }
    public Timestamp getOrdertime() {
        return ordertime;
    }
    public void setOrdertime(Timestamp ordertime) {
        this.ordertime = ordertime;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String toString() {
        return "Orders [id=" + id + ", receiverinfo=" + receiverinfo
                + ", paystate=" + paystate + ", ordertime=" + ordertime
                + ", user=" + user + ", set=" + set + "]";
    }



}

)B 配置映射文件

hibernate.cfg.xml (Hibernate配置文件)

<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql:///Estore</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>        
        <!-- 配置hibernate的信息  可选 -->
        <property name="current_session_context_class">thread</property>
        <!-- 数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 输出底层sql语句 -->
        <property name="show_sql">true</property>
        <!-- 输出底层sql语句格式化 -->
        <property name="format_sql">true</property>
        <!-- hibernate创建表的策略  update: 没有就创建,不一个就更新 -->
        <property name="hbm2ddl.auto">update</property>       
        <!-- 将映射文件配置到核心文件中 -->
        <mapping resource="store_entity/User.hbm.xml"/>
        <mapping resource="store_entity/Orders.hbm.xml"/>

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

User.hbm.xml 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping>
 <!-- 
     class标记
     name="实体类的全路径"
     table=数据库表名
  -->
     <class name="store_entity.User" table="t_user">
         <!-- id 表示主键 
             hibernate要求实体类有一个属性为主键
         -->
         <id name="id" column="user_id">
         <!-- 主键的生成策略
             native:生成的表id为自增长的,它可以兼容多种数据库
          -->
             <generator class="native"></generator>
         </id>
         <!-- 非主键列 
             name:实体类中的属性名
             column:表的列名
         -->
         <property name="username" column="name" ></property>
         <property name="password" column="password" ></property>
         <property name="nickname" column="nickname" ></property>
         <property name="email" column="email" ></property>
         <property name="role" column="role" ></property>
         <property name="state" column="state" ></property>
         <property name="activecode" column="activecode" ></property>
         <property name="updatetime" column="updatetime" type="timestamp"></property>

         <!--外界关系 设置  -->
             <!-- 
             使用set标签表示所有联系人
             name:实体类中set集合的名字
             cascade=save-update 级联保存和更新
          -->
          <set name="orders" cascade="save-update,delete" inverse="true">
              <!-- column:外键列的名称 -->
              <key column="user_id"></key>
              <!-- 包含外键列的表所对应的实体类 -->
              <one-to-many class="store_entity.Orders" ></one-to-many>
          </set>           
     </class>
 </hibernate-mapping>

Orders.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping>
 <!-- 
     class标记
     name="实体类的全路径"
     table=数据库表名
  -->
     <class name="store_entity.Orders" table="t_orders">
         <!-- id 表示主键 
             hibernate要求实体类有一个属性为主键
         -->
         <id name="id" column="order_id">
         </id>
         <property name="receiverinfo" column="receiverinfo" ></property>
         <property name="paystate" column="paystate" ></property>
         <property name="ordertime" column="ordertime" type="timestamp" ></property>    
         <!-- 外键设置 -->
         <many-to-one name="user" class="store_entity.User" column="user_id"></many-to-one>
        <!-- 单项 一对多 -->
     </class>
 </hibernate-mapping>

)C 测试类编写:

package store_utils;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import store_entity.Orders;
import store_entity.User;
public class HibernateUtils {
    private static SessionFactory factory=null;
    static{
        //1 加载配置文件(核心配置文件)
        Configuration cfg = new Configuration().configure();
        //2 创建一个SessionFactory 
        factory = cfg.buildSessionFactory();
    }    
    public static SessionFactory  getSessionFactory(){
        return factory;
    }
    public static Session getCurrentSession(){
        return factory.getCurrentSession();
    }
    public static Session getSession(){
        return factory.openSession();
    }
    public static void main(String args[]){
        //测试 存储 用户 和 订单 
        User user =new User();
        user.setUsername("狗爷2");
        user.setNickname("sss");
        user.setEmail("[email protected]");
        user.setPassword("1111");
        user.setRole("1");        
        Set<Orders> set=new HashSet<Orders>();        
        Orders o1=new Orders();    
        o1.setId("1112");
        o1.setPaystate(0);
        o1.setReceiverinfo("水果w");
        o1.setUser(user);
        set.add(o1);
        user.setOrders(set);        
        Session session =null;
        Transaction ts = null;
        try{
            session = HibernateUtils.getCurrentSession();
            ts = session.beginTransaction();            
            session.save(user);
            ts.commit();//事务提交 
            System.out.println("ddddd");
        }
        catch(Exception e){
            e.printStackTrace();
            ts.rollback();
        }
    }
}

测试结果:

 col输出:

图片 3

 

ssh 框架 hibernate 详细理解,sshhibernate
Hibernate 框架技术相信对大多数的 java
程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,…

搭建步骤:

  第一步:创建数据库表t_user,创建java对象USer.java

  第二步:添加jar包

  第三步:创建映射文件

  第四步:创建hibernate核心配置文件hibernate.cfg.xml

  第五步:测试

3, Hibernate 框架的搭建

首先下载Hibernate的包,然后和数据库驱动包一起到导入到项目中。

第五步,测试

 1 package com.jonychen.test;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 7 import org.hibernate.cfg.Configuration;
 8 import org.hibernate.service.ServiceRegistry;
 9 
10 import com.jonychen.model.User;
11 
12 public class HibernateTest {
13 
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         //1、加载配置文件
17         Configuration cfg=new Configuration();
18         cfg.configure("hibernate.cfg.xml");
19 
20 
21         //2、创建sessionFactory 
22         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
23         SessionFactory sessionFactory=cfg.buildSessionFactory(serviceRegistry);
24 
25         //3、打开全新session
26         Session session=sessionFactory.openSession();
27         
28         try {
29             //事务
30             Transaction ts=session.beginTransaction();
31             
32             User user =new User();
33             user.setUname("jonychen");
34             //添加数据
35             session.save(user);
36             //提交事务
37             ts.commit();
38         } catch (Exception e) {
39             // TODO Auto-generated catch block
40             e.printStackTrace();
41         }finally {
42             //关闭连接
43             if(session!=null) {
44                 session.close();
45             }
46             if(sessionFactory!=null) {
47                 sessionFactory.close();
48             }
49             
50         }
51     }
52 }

 

3.1 注解方式

首先看一看项目结构:

图片 4

hibernate.cfg.xml文件

图片 5图片 6

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

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">517839</property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>

        <!-- 加载映射描述信息 -->
        <mapping class="cn.test.bean.User" />

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

hibernate.cfg.xml

User.java文件

图片 7图片 8

package cn.test.bean;

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

@Entity
@Table(name="user")//表示对应的表名
public class User {

    @Id//表示主键
    @Column(name="uid")//对应表中的字段名
    private Integer id;

    @Column(name="uname")//对应表中的字段名
    private String name;

    @Column(name="upass")//对应表中的字段名
    private String password;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
    }
}

User.java

HibernateUtil.java文件

图片 9图片 10

package cn.test.util;

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

public class HibernateUtil {

    public static Session getSession(){
        Configuration conf = new Configuration();
        conf.configure("hibernate.cfg.xml");//读取连接参数和映射描述信息
        SessionFactory factory = conf.buildSessionFactory();
        Session session = factory.openSession();
        return session;
    }
}

HibernateUtil.xml

UserTest.java文件

图片 11图片 12

package cn.test.test;

import org.hibernate.Session;
import org.junit.Test;

import cn.test.bean.User;
import cn.test.util.HibernateUtil;

public class UserTest {

    @Test
    public void testName1() throws Exception {
        Session session  = HibernateUtil.getSession();
        User user = (User)session.get(User.class, 1);
        if(user != null){
            System.out.println(user);
        }else{
            System.out.println("未找到记录");
        }
        session.close();
    }

}

UserTest.java

这里的方法: session.get(User.class,
1); 是Hibernate框架封装好的一个类,他表示查询数据表中主键为1的值,并且将结果反射到User的对象中。

Demo1:纯java project

1, Hibernate 是什么

Hibernate框架简化了java应用程序与数据库交互的开发。
Hibernate是一个开源,轻量级的ORM(对象关系映射)工具。

Hibernate从入门到上手(一),hibernate上手

Hibernate(orm框架)(开放源代码的对象关系映射框架)

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Orm:Object relational
mapping,对象映射关系,用于对象与关系型数据库关联映射框架。

2,Hibernate框架的优点

Hibernate框架有很多优点。它们分别如下:

  •     开源和轻量级: Hibernate框架是根据LGPL许可证和轻量级的开源工具。
  •     快速性能:
    Hibernate框架的性能很快,因为缓存在Hibernate框架内部使用。
    hibernate框架中有三种类型的缓存:一级缓存、二级缓存和查询缓存。一级缓存默认是启用的。
  •     数据库独立查询: HQL(Hibernate查询语言)是面向对象的SQL版本。
    它生成数据库独立查询。 所以你不需要编写数据库特定的查询语句。
    在Hibernate之前,如果项目更改了数据库,我们需要更改SQL查询,从而导致维护变得非常复杂。
  •     自动创建表: Hibernate框架提供了自动创建数据库表的功能。
    因此,无需手动在数据库中创建表。
  •     简化复杂连接: 在hibernate框架中可轻松获取多个表中的数据。
  •     提供查询统计和数据库状态:
    Hibernate支持查询缓存,并提供有关查询和数据库状态的统计信息。

 

 

Hibernate(orm框架)(开放源代码的对象关系映射框架)
Hibernate是一个开放源代码的对象关系映射…

3.2 非注解的方式

如果是非注解的方式的话,我们只需要把上面的user.java文件替换调,并且加上User.hbm.xml文件,再在hibernate.cfg.xml文件中改一改映射关系就可以了。

图片 13

hibernate.cfg.xml文件

图片 14图片 15

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

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">517839</property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>

        <!-- 加载映射描述信息 -->
        <mapping resource="cn/test/hbm/User.hbm.xml" />

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

hibernate.cfg.xml

User.hbm.xml文件

图片 16图片 17

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <!-- 指定User类对应user表 -->
    <class name="cn.test.bean.User" table="user">

        <!-- 指定no属性对应userid字段,类型为integer,主键 -->
        <id name="id" column="uid" type="integer"></id>

        <property name="name" column="uname" type="string"></property>

        <property name="password" column="upass" type="string"></property>

    </class>
</hibernate-mapping>

User.hbm.xml

User.java文件

图片 18图片 19

package cn.test.bean;

public class User {
    private Integer id;
    private String name;
    private String password;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
    }
}

User.java

HibernateUtil.java文件

图片 20图片 21

package cn.test.util;

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

public class HibernateUtil {

    public static Session getSession(){
        Configuration conf = new Configuration();
        conf.configure("hibernate.cfg.xml");//读取连接参数和映射描述信息
        SessionFactory factory = conf.buildSessionFactory();
        Session session = factory.openSession();
        return session;
    }

}

HibernateUtil.java

UserTest.java文件

图片 22图片 23

package cn.test.test;

import org.hibernate.Session;
import org.junit.Test;

import cn.test.bean.User;
import cn.test.util.HibernateUtil;

public class UserTest {

    @Test
    public void testName1() throws Exception {
        Session session  = HibernateUtil.getSession();
        User user = (User)session.get(User.class, 1);
        if(user != null){
            System.out.println(user);
        }else{
            System.out.println("未找到记录");
        }
        session.close();
    }

}

UserTest.java

 

以下是详细步骤演示:

项目结构

图片 24

 

   第一步:创建数据库表t_user,创建java对象USer.java

#数据库表t_user
CREATE DATABASE hibernate_demo CHARSET 'UTF8';

CREATE TABLE t_use(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20) NOT NULL
);

//创建java对象User.java
public class User {
 private Integer id;
 private String uname;
    //getter和setter省略
     ......
}

  第二步:添加jar包

图片 25

  第三步:创建映射文件user.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <!--package:java对象包路径 -->
<hibernate-mapping package="com.jonychen.model">
    <!-- 配置对象与table的关系 -->
    <class name="User" table="t_user">
        <!-- 指定主键name:表示java对象属性名 column -->
        <id name="id" column="id" type="integer">
        <!--配置主键自增策略  -->
            <generator class="native" />
        </id>
        <!--配置其他属性与字段关联关系  -->
        <property name="uname" column="uname" type="string" />
    </class>
</hibernate-mapping>

  第四步: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>
    <!--1、方言:指定数据库类型 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--2、配置数据源 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate_demo</property>
        <property name="connection.username">root</property>
        <property name="connection.password">mysql</property>
        <!--打印sql -->
        <property name="show_sql">true</property>
        <!--3、加载映射文件 -->
        <mapping resource="com/jonychen/model/user.hbm.xml" />
    </session-factory>
</hibernate-configuration>

在Eclipse里添加插件开发Hibernate

图片 26

 

图片 27

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图