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

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

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

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

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

今天首先研究一下啊

表的一对多关系

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

程序所有的 jar和 dtd:

数据库结构图:

)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("7168@qq.com");
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输出:

Java ssh 框架 hibernate 详细理解的更多相关文章

  1. java SSH框架详解(面试和学习都是最好的收藏资料)

    Java—SSH(MVC)1. 谈谈你mvc的理解MVC是Model—View—Controler的简称.即模型—视图—控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC ...

  2. [Java] SSH框架笔记_框架分析+环境搭建+实例源码下载

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  3. 【SSH 1】SSH框架的基本理解

    导读:在结束了BS之后,接触到的第一个项目算是网上商城了.这次用到了和之前都不一样的框架:SSH.这个项目就和之前学牛腩一样,有着里程碑的意义.当然了,这也就意味着,什么都是新鲜的,接触到的东西,有时 ...

  4. 转 SSH框架搭建详细图文教程

    原址:http://blog.sina.com.cn/s/blog_a6a6b3cd01017c57.html 什么是SSH? SSH对应 struts spring hibernatestruts ...

  5. SSH框架搭建详细图文教程(转)

    这篇文章看的我醍醐灌顶的感觉,比之前本科时候学习的SSH架构 要清晰数倍  非常感觉这篇博主的文章 文章链接为:http://blog.sina.com.cn/s/blog_a6a6b3cd01017 ...

  6. SSH框架搭建详细步骤整理

    学习Java面前有两座山,一座山叫SSM,一座山叫SSH,跨越了这两座山之后才能感受到这个语言的魅力所在,SSM框架的搭建详细在之前博客已经涉及了,今天来整理SSH框架详细步骤: 生有涯 而 学无涯 ...

  7. [Java] SSH框架笔记_框架整合示例(一)

    本文描述的是框架SSH集成的示例,由于在这个过程中有一些小的细节容易被遗忘,特别撰写了一篇小的博文来记录这个过程,希望对自己以及后来者能够起到积极意义. 本文中使用的框架和版本号为: struts-2 ...

  8. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

  9. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

随机推荐

  1. python中的列表list

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  2. java对String进行sha1加密

    1.使用apache的codec jar包对string进行加密,先下载并引入jar包: http://commons.apache.org/proper/commons-codec/ 2.生成: S ...

  3. Android控件状态依赖框架

    在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入(EditText)和多个操作(MotionEvent和KeyEvent),且操作依赖于输入的状态.如下图所示的场景: 设定图 ...

  4. docker使用Let’s Encrypt协议构建免费https协议

    简介:我们可以把自己的image上传到dockerhub或者阿里云的docker镜像仓库,但在实际使用中我们很多时候都用的是自己的registry,便于内部的共享等等优点,docker镜像默认支持ht ...

  5. ASP.NET MVC制作404跳转(非302和200)

    前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...

  6. The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564

    地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...

  7. 如何记录selenium自动化测试过程中接口的调用信息

    上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的.你在测试过程中肯定会遇到一些莫名其 ...

  8. angular2 日期格式化

    angular2 日期格式话 ng2 在模板中格式话显示日期使用 DatePipe 管道(其实就是ng1里面的过滤器(filter),换了个说法), 如下示例: 1 <div class=&qu ...

  9. MyBatis使用statementType="STATEMENT"

    statementType="STATEMENT"是使用非预编译,现在我需要动态传人表名和字段名,所以需要用STATEMENT,使用之后所有变量取值都要改成${xxxx},而不是# ...

  10. POPTEST老李谈JVM、JRE、JDK、java ee sdk with jdk区别

    POPTEST老李谈JVM.JRE.JDK.java ee sdk with jdk区别   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等 ...