SSH之Hibernate
来源:互联网 发布:新手入门编程语言 编辑:程序博客网 时间:2024/06/05 14:11
Hibernate 体系结构
Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。
Hibernate 的性能好,因为它是个轻量级框架。映射的灵活性很出色。
它支持各种关系数据库,从 一对一 到 多对多 的各种复杂关系。
通过注解配置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 name=""> <property name="connection.username">root</property> <property name="connection.password"/> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///hibernate?useUnicode=true&characterEncoding=UTF-8</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">create</property> <property name="hibernate.current_session_context_class">thread</property> </session-factory></hibernate-configuration>
类级别注解
@Entity(name=”表名”)
@Table(name=”” ,catalog=”目录名”,schema=”模式”)
@Embeddable 作为另一个类的属性
属性级别注解
@Id
@GeneratedValue(strategy=GenerateType.AUTO,generator=”“)
@Column(name=”“,length=”“,unique=false)
@Embedded 标注了@Embeddable的类
@EmbeddedId
@Transient 不映射到数据库
关系级别注解
@OneToOne(cascasde=CascadeType.ALL,mappedBy=”“)
@JoinColumn(name=”id”,unique=true)
@ManyToOne
@OneToMany
@ManyToMany
@JoinTable
ps:先保存没有外键的,再保存有外键的
单向一对一
@Entitypublic class Students implements Serializable{ @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="pid",unique=true) private IDCard idCard; @Id @GeneratedValue(strategy=GenerationType.AUTO) private int sid; ... }
双向一对一
@Entitypublic class IDCard { @Id @GeneratedValue(generator="pid") @GenericGenerator(name="pid",strategy="assigned") @Column(length=18) private String pid; private String sname; //双向一对一 @OneToOne(mappedBy="idCard") ... }
单向多对一
@Entitypublic class Students implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int sid; @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinColumn(name="cid",referencedColumnName="CID") private ClassRoom classRoom;
双向多对一
@Entitypublic class Students implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int sid; @ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinColumn(name="cid",referencedColumnName="CID") private ClassRoom classRoom; ... }
@Entitypublic class ClassRoom { @Id @GeneratedValue(generator="cid") @GenericGenerator(name="cid",strategy="assigned") @Column(length=8) private String cid; @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumn(name="cid") private Set<Students> set=new HashSet<>(); ... }
单向多对多
@Entitypublic class Students implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int sid; @ManyToMany @JoinTable(name="student_teacher",joinColumns={@JoinColumn(name="sid")}, inverseJoinColumns={@JoinColumn(name="id")}) private Set<Teacher> set=new HashSet<>(); ... }
双向多对多
@Entitypublic class Students implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int sid; @ManyToMany @JoinTable(name="student_teacher",joinColumns={@JoinColumn(name="sid")}, inverseJoinColumns={@JoinColumn(name="id")}) private Set<Teacher> set=new HashSet<>(); ... }
@Entitypublic class Teacher { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; @ManyToMany(mappedBy="set") private Set<Students> set=new HashSet<>(); ... }
HQL
HQL没有什么特别的地方,会SQL的话很轻松就懂怎么写,写HQL主要注意以下几点
- 类和属性大小写敏感
- 返回结果可以有
List Object[] List<Map>
三种 - 自定义的类型要有相应的构造函数
- 特殊的集合运算 is[not]empty ,member of.
简单示例
Query query=session.createQuery("from Student "); List<Student> list=query.list(); System.out.println("查询到的信息"+list);
0 0
- 【SSH】之Hibernate
- SSH之Hibernate
- ssh之Hibernate
- 【SSH】 之Hibernate
- SSH之Hibernate
- SSH之Hibernate
- SSH之Hibernate
- SSH之hibernate(一)
- SSH之hibernate(二)
- 走近SSH之Hibernate--HQL
- 【SSH】hibernate之hql学习
- ssh学习之hibernate篇
- SSH框架之Hibernate介绍
- ssh框架 之 hibernate 之 hibernate.cfg.xml配置解析
- 重拾ssh之hibernate配置
- SSH框架-HIbernate之数据持久化
- ssh之hibernate+spring的整合
- SSH三大框架初探之Hibernate
- Hardening the media stack
- js 面试的坑
- 51单片机定时器中断函数中变量初始化的问题
- 编码问题
- C++走向远洋——(项目二、存储班长信息的学生类、派生)
- SSH之Hibernate
- 图像二值化 python
- bzoj3065带插入区间K小值
- 时间友元
- HDU,1874,畅通工程续
- 动态规划
- 启动eclipse出现 Error when loading the SDK
- NYOJ——301递推求值(矩阵快速幂)
- C++第5次作业