Hibernate学习系列————注解一对多单向实例

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

开发环境:Mysql+Eclipse

 

一对多单向的列子原理:一个班级,多个学生,学生端为多的一端,他们拥有一个外键指向相同的班级。

 

项目结构

091301_UIis_2509896.png

需要的jar包

091414_ZcjD_2509896.png

 

hibernate.cfg.xml

    <!-- 配置mysql数据库的连接参数 -->
        
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!-- 驱动程序名 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 自动创建表 -->
            <property name="hbm2ddl.auto">update</property>
            <!-- 控制台打印sql语句 -->
            <property name="show_sql">true</property> 
            <!-- 数据库名 -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
            <!-- 用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 密码 -->
            <property name="hibernate.connection.password"></property>
            <!-- 对应的实体 -->
            <mapping class="cn.dao.Classes"/>
            <mapping class="cn.dao.Student"/>
    </session-factory>

实体类:

  1. Classes.java

package cn.dao;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "classes")
public class Classes implements Serializable {

    private Long id;

    private String name;

    private String desc;

    private Set<Student> students = new HashSet<Student>();

    @Id
    @Column(name = "cid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "cname")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "cdesc")
    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinColumn(name = "cid")
    public Set<Student> getStudents() {
        return students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }

    //测试打印
    @Override
    public String toString() {
        return "Classes [id=" + id + ", name=" + name + ", desc=" + desc + ", students=" + students + "]";
    }

}


2.Student.java

package cn.dao;

import java.io.Serializable;

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

@Entity
@Table(name = "student")
public class Student implements Serializable {
    
    private Long id;
    
    private String name;
    
    private String sex;
    
    @Id
    @Column(name = "sid")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "sname")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @Column(name = "sex")
    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}
 

创建一个打开session的工具类:HibernateUtil

package cn.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static SessionFactory sessionFactory;
    private static Session session;

    static {
        // 读取Hibernate的配置文件,进行初始化的操作
        Configuration config = new Configuration().configure();
        StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder().applySettings(config.getProperties());
        StandardServiceRegistry registry = ssrb.build();
        sessionFactory = config.buildSessionFactory(registry);
    }

    /**
     * 获取SessionFactory
     */

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    /**
     * 获取session
     */

    public static Session getSession() {
        return sessionFactory.openSession();
    }

    /**
     * 关闭session
     */

    public static void closeSession() {
        if (session != null) {
            session.close();
        }
    }
}

 

最后一个测试,实现简单的增删改查功能:OneToMany.java

package cn.test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.dao.Classes;
import cn.dao.Student;
import cn.utils.HibernateUtil;

/**
 * 单向的一对多关联操作
 * 
 * @author hasee
 *
 */
public class OneToMany {
    
    public static void main(String[] args) {
         query();
    }

    public static void save() {
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = new Classes();
        classes.setName("ClassOne");
        classes.setDesc("This is ClassOne");
        Set<Student> students = new HashSet<Student>();
        Student student = new Student();
        student.setName("Mike");
        student.setSex("boy");
        students.add(student);
        classes.setStudents(students);
        session.save(classes);
        transaction.commit();
        HibernateUtil.closeSession();
    }

    public static void edit(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = (Classes) session.get(Classes.class, 1L);
        Set<Student> students = classes.getStudents();
        for (Student student : students) {
            student.setName("Jary");
        }
        transaction.commit();
        HibernateUtil.closeSession();
    }
    
    public static void delete(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        Classes classes = (Classes) session.get(Classes.class, 1L);
        session.delete(classes);
        transaction.commit();
        HibernateUtil.closeSession();
        
    }
    
    public static void query(){
        Session session = HibernateUtil.getSession();
        Query query = session.createQuery("from Classes");
        List<Classes> list = query.list();
        for (Classes classes : list) {
            System.out.println(classes.toString());
        }
    }
}
 

转载于:https://my.oschina.net/u/2509896/blog/759316

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sudo apt-get nmap 报错锁占用

在Ubuntu中用apt-get命令安装软件是出现如下错误&#xff1a; 网上搜了一下原因&#xff0c;说是有另外一个程序在运行&#xff0c;导致锁不可用&#xff0c;原因可能是赏析运行更新或安装没有正常完成。这是因为上次更新或者安装没有正常完成。 网上的两种解决方法&#xff1…

python逐行读取txt写入excel_用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)...

前几天接到一个任务&#xff0c;从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中&#xff0c;随后将这些数据存入Excel中。数据格式如下图所示观察上图可知&#xff0c;存在文本文档中的数据符合一定的格式&#xff0c;通过python读取、正则表达式处理并写入Excel文…

Extjs 之 initComponent 和 constructor的区别(转)

在创建自定义类时&#xff0c;先构造&#xff08;constructor)后初始化&#xff08;initComponent&#xff09;。如&#xff1a;&#xff08;在旧的Extjs 版本中使用 Ext.extend 实现扩展&#xff09; Ext.define(Btn,{ extend:Ext.button.Button, init…

hive遍历_从Hive中的stored as file_foramt看hive调优

一、行式数据库和列式数据库的对比1、存储比较行式数据库存储在hdfs上式按行进行存储的&#xff0c;一个block存储一或多行数据。而列式数据库在hdfs上则是按照列进行存储&#xff0c;一个block可能有一列或多列数据。2、压缩比较对于行式数据库&#xff0c;必然按行压缩&#…

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载

帮助孩子学会感恩_页数204_出版日期2015.03_完整版PDF电子书下载 带索引书签目录高清版_13813212 下载链接http://pan.baidu.com/s/1geEmUeZ 【作 者】&#xff08;英&#xff09;蒂姆惠特尼&#xff08;TimWhitney&#xff09;著【丛书名】陪孩子成长系列丛书【形态项】 204 …

xwpftablecell设置字体样式_HTML的文字样式

font 属性可以用来作为 font-style, font-variant, font-weight, font-size, line-height 和 font-family 属性的简写&#xff0c;或将元素的字体设置为系统字体。字体修改font-family 属性&#xff1a;设置HTML页面中的字体font-size 属性&#xff1a;设置字体大小font-weight…

15-CSS基础-浮动流

浮动 网页的布局方式 什么是网页的布局方式? 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 标准流(文档流/普通流)排版方式 其实浏览器默认的排版方式就是标准流的排版方式在CSS中将元素分为三类, 分别是块级元素/行内元素/行内块级元素在标准流中有两种排版…

git-- 使用

git 使用时两个人冲突: Resolve conflicts

高内聚低耦合通俗理解_抱歉,请不要把“业务逻辑层”理解为“业务中台”

在IAS2019中台架构峰会上&#xff0c;我曾与一位年轻帅气的技术小伙来了一番有趣的对话。因为和朋友有约&#xff0c;所以我在现场互动结束之后&#xff0c;就急匆匆地跟其他嘉宾打了声招呼&#xff0c;抱着笔记本冲出了会场。但没想到刚到电梯口&#xff0c;却被一位帅小伙迎面…

org-mode入门教程

org-mode 入门教程By Z.H. Fu切问录 www.fuzihao.orgorg-mode 入门教程 org-mode是Emacs提供的一个强大的编辑模式&#xff0c;可以用于做会议笔记以及制作各种待办事项&#xff08;GDT&#xff09;。其语法类似于Markdown但是提供了比Markdown更多的操作&#xff0c;再加上Ema…

如何对web.config进行加密和解密

http://blog.csdn.net/jf_jifei/article/details/6527390 在WEB网站开发过程中&#xff0c;如果我们将数据库连接字符串封装到.DLL文件中&#xff0c;将会给数据库和程序的迁移带来麻烦&#xff0c;因为万一服务器地址或者数据库发生变更&#xff0c;那么我们就不得不修改源程序…

java 爬虫_Java原生代码实现爬虫(爬取小说)

Java也能做爬虫。现在提到爬虫人第一个想到的就是python&#xff0c;其实使用Java编写爬虫也是很好的选择&#xff0c;Java成熟的爬虫框架很多&#xff0c;下面给大家展示一个使用Java基础语言编写的爬取小说的案例&#xff1a;实现功能&#xff1a;爬取目标网站全本小说代码编…

JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]...

Location对象 location用于获取或设置窗体的URL&#xff0c;并且可以用于解析URL。 语法: location.[属性|方法] location对象属性图示: location 对象属性&#xff1a; location 对象方法: 任务 在右边编辑器script标签内&#xff0c;获取当前显示文档的URL,并输出。 <!DOC…

java 数据结构_Java版-数据结构-队列(数组队列)

前言看过笔者前两篇介绍的 Java版数据结构 数组和 栈的盆友&#xff0c;都给予了笔者一致的好评&#xff0c;在这里笔者感谢大家的认可&#xff01;&#xff01;&#xff01;由于本章介绍的数据结构是 队列&#xff0c;在队列的实现上会基于前面写的 动态数组来实现&#xff0c…

ssh 介绍 和使用 程序不挂起

目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别的远程登录 SSH的高级应用 Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行…

java 四舍五入_Java常用类

每个人的心里&#xff0c;都藏着一个了不起的自己&#xff0c;只要你不颓废&#xff0c;不消极&#xff0c;一直悄悄酝酿着乐观&#xff0c;培养着豁达&#xff0c;坚持着善良&#xff0c;只要在路上&#xff0c;就没有到达不了的远方&#xff01;BigInteger在Java中&#xff0…

Sublime 插件- px 转rem

一个CSS的px值转rem值的Sublime Text 3自动完成插件。 插件效果如下&#xff1a; 安装 克隆项目 https://github.com/hyb628/cssrem.git进入packages目录&#xff1a;Sublime Text -> Preferences -> Browse Packages...复制下载的cssrem目录到刚才的packges目录里。重…

window8下安装RabbitMQ

2019独角兽企业重金招聘Python工程师标准>>> 1.下载并安装erlang&#xff0c;http://www.erlang.org/download.html。64位的下载的是otp_win64_19.1.exe 查看是否安装成功&#xff1a; 2.下载RabbitMQ,最新版是2.8.1&#xff0c;http://www.rabbitmq.com/releases/r…

gdb 收到SIGPIPE信号

2019独角兽企业重金招聘Python工程师标准>>> handle SIGPIPE noprint nostop 转载于:https://my.oschina.net/u/1176097/blog/761957

列的数目比列的名字要多_你们要的甘特图来啦!还有具体做法哦!

作为项目的负责人&#xff0c;“时间管理”也是极为重要的一环。甘特图作为常用的项目管理工具之一&#xff0c;有助于把一个大型项目划分为几个小部分&#xff0c;并有条理地展示。甘特图(Gantt chart)又称为横道图、条状图(Bar chart)。以提出者亨利劳伦斯甘特(Henry Laurenc…