前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate初级入门

Hibernate初级入门

作者头像
全栈程序员站长
发布2022-06-30 10:24:02
4130
发布2022-06-30 10:24:02
举报
文章被收录于专栏:全栈程序员必看

一、Hibernate扮演的是什么角色

Hibernate在javaee中的三层结构中扮演的是DAO层框架

使用Hibernate框架简化了JDBC复杂的代码,是一种开源的轻量级的框架

二、如何搭建Hibernate的环境

1.

记得build path哟!!!!

三、ORM

Object Reational Mapping—-对象关系模型

在web阶段学习的javabean,现在叫实体类;

一个实体类对应数据库中一个表,,实体类中的属性对应数据库表字段

比如:

private String userName;<—————>t_userName(这个我们要通过映射文件来创建)

四、如何写一个实体类的映射文件:

Customer:客户 LinkMan:联系人

场景:一个客户对应多个联系,一个联系人对应一个客户

package cn.cq.enty;

import java.util.HashSet; import java.util.Set;

public class Customer { //客户id private Integer cid; //客户名称 private String custName; //客户级别 private String custLevel; //客户来源 private String custSource; //联系电话 private String custPhone; //手机 private String custMobile; //客户实体类中表示对个联系人 private Set<LinkMan> setLinkMan = new HashSet<LinkMan>(); public Set<LinkMan> getSetLinkMan() { return setLinkMan; } public void setSetLinkMan(Set<LinkMan> setLinkMan) { this.setLinkMan = setLinkMan; } public Customer() { super(); } public Customer(Integer cid, String custName, String custLevel, String custSource, String custPhone, String custMobile) { super(); this.cid = cid; this.custName = custName; this.custLevel = custLevel; this.custSource = custSource; this.custPhone = custPhone; this.custMobile = custMobile; } public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCustName() { return custName; } public void setCustName(String custName) { this.custName = custName; } public String getCustLevel() { return custLevel; } public void setCustLevel(String custLevel) { this.custLevel = custLevel; } public String getCustSource() { return custSource; } public void setCustSource(String custSource) { this.custSource = custSource; } public String getCustPhone() { return custPhone; } public void setCustPhone(String custPhone) { this.custPhone = custPhone; } public String getCustMobile() { return custMobile; } public void setCustMobile(String custMobile) { this.custMobile = custMobile; }

}

package cn.cq.enty;

public class LinkMan { private Integer lkm_id; // 联系人编号(主键) private String lkm_name;// 联系人姓名 private String lkm_gender;// 联系人性别 private String lkm_phone;// 联系人办公电话 //表示一个联系人对应一个客户 private Customer customer; public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } public LinkMan() { super(); } public LinkMan(Integer lkm_id, String lkm_name, String lkm_gender, String lkm_phone) { super(); this.lkm_id = lkm_id; this.lkm_name = lkm_name; this.lkm_gender = lkm_gender; this.lkm_phone = lkm_phone; } public Integer getLkm_id() { return lkm_id; } public void setLkm_id(Integer lkm_id) { this.lkm_id = lkm_id; } public String getLkm_name() { return lkm_name; } public void setLkm_name(String lkm_name) { this.lkm_name = lkm_name; } public String getLkm_gender() { return lkm_gender; } public void setLkm_gender(String lkm_gender) { this.lkm_gender = lkm_gender; } public String getLkm_phone() { return lkm_phone; } public void setLkm_phone(String lkm_phone) { this.lkm_phone = lkm_phone; } }

Customer.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=”cn.cq.enty.Customer” table=”t_customer”> <!– hibernate要求实体类有一个属性唯一值 要求表字段作为唯一值 –> <!– 配置实体类id和表中的id的关系 name属性:表示实体类中id属性名称 column属性:表示数据中表字段 –> <id name=”cid” column=”cid”> <!– 设置数据中id字段增长策略 native:表示id自动增长 –> <generator class=”native”></generator> </id> <!– 配置实体类属性和表字段对应关系 name属性:实体类属性名称 column属性:表字段名称 –> <property name=”custName” column=”custName”></property> <property name=”custLevel” column=”custLevel”></property> <property name=”custSource” column=”custSource”></property> <property name=”custPhone” column=”custPhone”></property> <property name=”custMobile” column=”custMobile”></property> <!– 使用set标签表示所有联系人 set标签name属性:客户实体类中set集合的名称 Column:表示外键 –> <set name=”setLinkMan” cascade=”save-update,delete” inverse=”true”> <key column=”cid”></key> <!– 客户所有的联系人 class:写联系人实体类的全路径 –> <one-to-many class=”cn.cq.enty.LinkMan”/> </set> </class> </hibernate-mapping>

LinkMan.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=”cn.cq.enty.LinkMan” table=”t_linkMan”> <id name=”lkm_id” column=”lkm_id”> <generator class=”native”></generator> </id> <property name=”lkm_name” column=”lkm_name”></property> <property name=”lkm_gender” column=”lkm_gender”></property> <property name=”lkm_phone” column=”lkm_phone”></property> <many-to-one name=”customer” column=”cid” class=”cn.cq.enty.Customer”></many-to-one> </class> </hibernate-mapping>

五。创建核心配置文件:

要求:放到src目录下

名称必须写成: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> <property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property> <property name=”hibernate.connection.url”>jdbc:mysql:///hibernate03</property> <property name=”hibernate.connection.username”>root</property> <property name=”hibernate.connection.password”>bdqn</property>

<!–mysql数据库的方言–> <property name=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property>

<!–输出底层sql语句–> <property name=”hibernate.format_sql”>true</property>

<!–输出底层sql语句–> <property name=”hibernate.show_sql”>true</property>

<!–hibenate绑创建表

update:如果有表,更新,如果没得表,创建表

–> <property name=”hibernate.hbm2ddl.auto”>update</property> <!–和本地session绑定–> <property name=”hibernate.current_session_context_class”>thread</property>

<!–把映射文件放到核心配置文件中–> <mapping resource=”cn/cq/enty/Customer.hbm.xml”/> <mapping resource=”cn/cq/enty/LinkMan.hbm.xml”/> </session-factory> </hibernate-configuration>

六:HibernateUtils:

package cn.cq.test;

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

public class HibernateUtils { private static Configuration cfg = null; private static SessionFactory sessionFactory = null; static { cfg = new Configuration().configure(); sessionFactory = cfg.buildSessionFactory(); } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ return sessionFactory.getCurrentSession(); } }

七,实现CURD操作:

package cn.cq.test;

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

import cn.itcast.enty.Customer; import cn.itcast.enty.LinkMan;

public class HibernateOneToMang { @Test public void add(){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); Customer cus = new Customer(); cus.setCustName(“baidu”); cus.setCustLevel(“vip”); cus.setCustSource(“network”); cus.setCustPhone(“111”); cus.setCustMobile(“999”); LinkMan linkMan = new LinkMan(); linkMan.setLkm_name(“kevin”); linkMan.setLkm_gender(“nan”); linkMan.setLkm_phone(“3333”); cus.getSetLinkMan().add(linkMan); session.save(cus); tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ } } @Test public void delete(){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); Customer cus = session.get(Customer.class, 1); session.delete(cus); tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ } } @Test public void update(){ Session session = null; Transaction tx = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); Customer qq = session.get(Customer.class,3); LinkMan cidy = session.get(LinkMan.class, 3); qq.getSetLinkMan().add(cidy); cidy.setCustomer(qq); tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ } } }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100809.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档