• Hibernate注解开发示例


    -------------------------------------------------------------------customer-----------------------------------------------------------------------------------------------------------------------------

    @Entity   /实体
    @Table(name="t_customer")     //数据库表的名称,
    public class Customer {
    @Id      -------------主键
    @GeneratedValue(strategy=GenerationType.IDENTITY)    //主键生成策略,自动增长
    //@GenericGenerator(name="myuuid",strategy="uuid")    //代理主键为UUID时的操作
    //@GeneratedValue(generator="myuuid")
    private Integer id ;
    private String name ;
    @OneToMany(targetEntity=Order.class,mappedBy="c")  //目标实体, mappBy="c"代表外键的维护由对方也就是Order来维护.相当于inverse=true,这时如果保存客户时,级联保存订单.是可以的,但是不能维护外键,必须在代码中添加订单和客户的关系.
    @Cascade(CascadeType.SAVE_UPDATE )     //
    private Set<Order> orders = new HashSet<Order>() ;

    -------------------------------------------------------------------Order----------------------------------------------------------------------------------------------------------------------------

    @Entity  //实体
    @Table(name="t_Order")  //数据库表的名称,数据库名在核心配置文件有,在这不用写.
    public class Order {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id ;  //用引用类型,便于转换字符串,为空时返回值为null.
    private Double money;
    private String receiverInfo;
    @ManyToOne(targetEntity=Customer.class)  //目标实体
    @JoinColumn(name = "customer_id")     //指定外键列
    private Customer c ;    //描述订单属于某一个客户

    -------------------------------------------------------------------Test----------------------------------------------------------------------------------------------------------------------------

    @Test
    public void test01(){
    //调用工具类,创建session.
    Session session = HibernateUtils.openSession();
    //开启事务
    session.beginTransaction();
    //创建
    Customer c = new Customer();c.setName("wangwu");
    Order o1 = new Order();o1.setMoney(1000.0); o1.setReceiverInfo("beijing");
    Order o2 = new Order();o2.setMoney(1000.0);o2.setReceiverInfo("beijing");
    //订单关联客户,保存订单时保存客户
    //------------------------------------为了维护外键(要想显示外键必须写上)
    o1.setC(c);o2.setC(c);
    //session.save(o1);
    //session.save(o2);
    //客户关联订单,既保存客户时保存订单,为了进行级联操作
    c.getOrders().add(o2); c.getOrders().add(o1);session.save(c);
    //事务提交和session关闭
    session.getTransaction().commit();
    session.close();

    -------------------------------------------------------------------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"> -----------configuration约束

    <hibernate-configuration>

    <session-factory>
    <!-- 配置关于数据库连接的四个项 driverClass url username password -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql:///hibernatetest</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123</property>

    <!-- 设置连接提供者 -->
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <!-- c3p0连接池的配置 -->
    <property name="hibernate.c3p0.max_size">20</property> <!-- 最大连接池 -->
    <property name="hibernate.c3p0.min_size">5</property> <!-- 最小连接数 -->
    <property name="hibernate.c3p0.timeout">120</property> <!-- 超时 -->
    <property name="hibernate.c3p0.idle_test_period">3000</property> <!-- 空闲连接 -->

    <!-- 可以将向数据库发送的sql显示出来 -->
    <property name="hibernate.show_sql">true</property>
    <!-- 格式化sql -->
    <property name="hibernate.format_sql">true</property>

    <!-- hibernate的方言 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    <!-- 自动创建表 -->
    <property name="hibernate.hbm2ddl.auto">update</property>

    <!-- 用于设置事务提交方式 -->
    <property name="hibernate.connection.autocommit">false</property>

    <!-- 配置hibernate的映射文件所在位置  如果用xml开发的话,Class换成resource-->
    <mapping class="cn.itcast.domain.Customer" />
    <mapping class="cn.itcast.domain.Order" />

    </session-factory>

    </hibernate-configuration>

    -------------------------------------------------------------------删除操作 ----------------------------------------------------------------------------------------------------------------------------

    @Test
    public void test02(){
    Session session = HibernateUtils.openSession();
    session.beginTransaction();
    //得到客户
    Customer c = session.get(Customer.class, 2);
    //得到订单
    Order o = session.get(Order.class, 3);
    //删除客户的订单
    c.getOrders().remove(o);-------------------------------------在客户实体类的@OneTOMany括号里添加orphanRemoval=true
    //session.delete(c);--------------------------------------------如果直接删除某个客户,在@OneTOMany下面使用hibernate提供的注解@cascade(CascadeType.delete)
    //提交事务
    session.getTransaction().commit();
    session.close();
    }

  • 相关阅读:
    1.4redis小结--队列在抢购活动的实现思路
    1.3redis小结--配置php reids拓展
    redis小结 1-2
    redis小结 1-1
    pandas学习小记
    Python简单算法的实现
    python编码
    ThinkPHP中的__initialize()和类的构造函数__construct()
    js正则常用方法
    总结了下PHPExcel官方读取的几个例子
  • 原文地址:https://www.cnblogs.com/wwwzzz/p/7861695.html
Copyright © 2020-2023  润新知