java Hibernate 学习
来源:互联网 发布:mysql数据库基本语句 编辑:程序博客网 时间:2024/05/08 23:51
导包
hibernate 下载地址 http://hibernate.org/
requir 文件夹为必须要导入的包
- 可选包 有c3p0 包 (数据库连接池)
环境
测试环境
- myeclipse java project
配置
<?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:///test</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- 方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 数据连接池 --> <property name="hibernate.c3p0.max_size">2</property> <property name="hibernate.c3p0.min_size">2</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">false</property> <!-- 其他配置 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.current_session_context_class">thread</property> <!-- 映射文件的配置 --> <mapping resource="com/norwaya/pojo/User.hbm.xml"/> <mapping resource="com/norwaya/pojo/Address.hbm.xml"/> </session-factory></hibernate-configuration>
核心代码
Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRegistry= new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);Session session = sessionFactory.getCurrentSession();//session 是一切操作的核心session.beginTransaction();// CRUD 操作 etc....session.getTransaction().commit();
多对一操作
Address.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 package="com.norwaya.pojo"> <class name="Address" table="address"> <id name="id" column="id"> <generator class="native"/> </id> <property name="info" /> <many-to-one name="user" class="User" column="user_id"/> </class></hibernate-mapping>
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 package="com.norwaya.pojo"> <class name="User" table="User"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" /> <property name="age"/> <property name="birthday"/> <set name="set" inverse="true" cascade="delete" fetch="join" order-by="id desc"> <key column="user_id"/> <one-to-many class="Address"/> </set> </class></hibernate-mapping>
fetch :查询的时候 join 进来 address ,获取address 的时候,不用再次获取
order-by:排序配置
inverse:当自身改变的时候不去更新操作
cascade:值为delete 的时候,级联删除(删除user的时候,会删除address)
一对一的数据操作
Card.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 package="com.kaishengit.pojo"> <class name="Card" table="t_card"> <id name="id" column="id"> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="cardNum"/> <one-to-one name="person" class="Person"/> </class></hibernate-mapping>
Person.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 package="com.kaishengit.pojo"> <class name="Person" table="t_person"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <one-to-one name="card" class="Card" cascade="delete"/> </class></hibernate-mapping>
当one-to-one 的时候,默认属性为 fetch=”join”
多对一的 特例 (一对一)
<?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 package="com.kaishengit.pojo"> <class name="Person" table="t_person"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="card" class="Card" unique="true"/> </class></hibernate-mapping>
多对多(三张表)
Teacher.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 package="com.kaishengit.pojo"> <class name="Teacher" table="t_teacher"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <set name="studentSet" table="t_teacher_student"> <key column="tea_id"/> <many-to-many class="Student" column="stu_id"/> </set> </class></hibernate-mapping>
Student.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 package="com.kaishengit.pojo"> <class name="Student" table="t_student"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <set name="teacherSet" table="t_teacher_student" inverse="true"> <key column="stu_id"/> <many-to-many class="Teacher" column="tea_id"/> </set> </class></hibernate-mapping>
t_teacher_student 为关系映射表
延迟加载
改变抓取策略 fetch=”join”
关闭延迟加载 lazy=“false”
预加载 Hibernate.initialize(object obj)解决方案 在spring中实现
注解实现
User.java
import java.util.Date;import java.util.List;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.CascadeType;@Entity@Table(name = "user")public class User { private int id; private String name; private Date birthday; private int age; private List<Address> set; @OneToMany(fetch = FetchType.EAGER, mappedBy = "user") // mappedBy address中User 的属性,为use放弃关系维护 @Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN, CascadeType.ALL }) public List<Address> getSet() { return set; } public void setSet(List<Address> set) { this.set = set; } public User() { } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
Address.java
import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity@Table(name="address")public class Address { private int id; private String info; private User user; public Address(){ } @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name="info") public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @ManyToOne @JoinColumn(name="user_id") public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
级联删除 我用的是
@Cascade(value = { CascadeType.REMOVE })
还有用下面这个的 他们用的都是
org.hibernate.annotations.CascadeType这个包
@Cascade(value = CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN,CascadeType.ALL})
0 0
- java学习:Hibernate入门
- java Hibernate 学习
- java框架Hibernate学习---hibernate开发流程
- JAVA菜鸟 Hibernate学习小结
- java学习笔记之hibernate
- Java Hibernate模板 学习总结
- Java.Web学习笔记 Hibernate
- Java学习之hibernate配置要点详谈
- Java学习之hibernate配置要点详谈
- Java学习之hibernate配置要点详谈
- Java Web学习笔记(八)hibernate
- 【Hibernate学习笔记】Java集合类
- 【Java学习】mybatis和hibernate的区别
- Hibernate学习:初识hibernate
- Hibernate学习:(Hibernate)cascade
- hibernate学习 hibernate概述
- 【hibernate】 深度学习hibernate
- 学习HIBERNATE
- 【c++】指针
- Navicat Premium 11.1.12 中文破解版
- Jenkins进阶系列之——05FTP publisher plugin插件
- LeetCode069 sqrtx java solution
- ABAP断点调试
- java Hibernate 学习
- 空文件夹扫描工具(有缺陷)
- JS圆
- day11--定时器管理、函数封装
- 为什么说传统分布式事务不再适用于微服务架构?
- jboss启动一直报数据库无法连接错误,检查配置均无误
- curator实现分布式任务调度
- 使用java mail来发送邮件(带图片)
- java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/J