• hibernate使用注解简化开发


    简述
    在编写hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml)。从JAVA5.0之后,可以利用注解来简化配置。简单来说就是不再需要映射文件了,hibernate需要的元数据(metadata)通过注解实体类就行了。


    结构
    这里写图片描述


    实体bean

    package beans;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.swing.JTextField;
    
    import org.hibernate.annotations.Columns;
    import org.hibernate.annotations.GenericGenerator;
    
    /**
     * @author DGW
     * @date 2017 2017年4月30日 下午11:23:26
     * @filename user.java
     */
    @Entity
    @Table(name = "userinfo")//对应表名
    public class user {
        /*
         * 通过注解来跑hibernate
         */
        @Id // 表示主键
        @GenericGenerator(name = "generator", strategy = "assigned")
        @GeneratedValue(generator = "generator")
        private int id;
        @Column(name = "username")
        private String username;
        @Column(name = "password")
        private String password;
        @Column(name = "qqnumber")
        private int qqnumber;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public int getQqnumber() {
            return qqnumber;
        }
    
        public void setQqnumber(int qqnumber) {
            this.qqnumber = qqnumber;
        }
    
    }
    

    操作类
    这里也可以 封装一个工厂类来进行控制
    并且现在版本对 annotationconfigration 进行的改变
    只需要configuration

    public static void main( String[] args )  
    {  
        SessionFactory factory = new Configuration().configure().buildSessionFactory();  
        Session session = factory.openSession();  
    
        session.beginTransaction(); // 开启事务  
    
        try{  
        Person p = new Person();  
        p.setName("Benson");  
        p.setAge(22);  
        p.setBirth(new Date());  
    
        session.save(p);  
        } catch(Exception e) {  
            e.printStackTrace();  
            session.getTransaction().rollback();    // 回滚事务  
        }  
    
        session.getTransaction().commit();  // 提交事务  
    }

    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="dialect">org.hibernate.dialect.MySQL5Dialect</property>
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost:3306/wsy_student</property>
            <property name="connection.username">root</property>
            <property name="connection.password">123456</property>
    
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
    
            <!--  <mapping resource="beans/user.hbm.xml"/> -->
            //改变这里
             <mapping class="beans.user"/>
    
        </session-factory>
    
    
    </hibernate-configuration>

    注解说明

           1,@Entity : 表示当前的类为实体类,声明在类的前面。可以将当前类和数据库的表和字段进行关联映射。
    
           2,@Table:表示映射的表,声明在类的前面
    
           3,@Id:表示主键的映射,声明在主键的get方法前边,默认情况下主键利用assigned(用户提供)生成策略。如果想要设置API规范提供了四种主键生成策略:
    

    @GeneratedValue(strategy=GenerationType.AUTO) 相当于Hibernate框架的native主键生成策略
    @GeneratedValue(strategy=GenerationType.IDENTITY) 相当于Hibernate框架的identity主键生成策略,适用于MySQL,SQL Server
    @GeneratedValue(strategy=GenerationType.SEQUENCE) 相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2
    @GeneratedValue(strategy=GenerationType.TABLE) 使用一张单表管理主键值。
    默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用,需要我们进行增加主键生成器,如下:
    @GenericGenerator(name=”hibernate-uuid”,strategy=”uuid”)
    @GeneratedValue(generator=”hibernate-uuid”)

           4,@Column : 表示映射属性,和表的字段进行关联
    
           5,@ManyToOne : 表示映射关系中的多对一
    
           6,@JoinColumn : 表示外键映射属性,和表的外键字段进行关联
    
           7,@OneToMany : 表示映射关系中的一对多,这里需要注意,一对多时,外键的维护需要翻转交给多的一方进行维护,需要配置反转属性mappedBy,属性取值为多的一方的映射属性名称。相当于xml配置文件中的Inverse="true"。
    
           8,@OrderBy : 表示排序字段
    
           9,@Transient : 表示声明瞬时属性,不和数据库的字段发生关联,也就是没有表中列与之映射。
    

    错误重点
    注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。

    (2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。

    (3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。

    (4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))

    (5):表名称可以在实体类前进行注解。

    (6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。

    新版本注意事项

    Configuration con = new Configuration().configure();
            StandardServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(con.getProperties())
                    .build();
            SessionFactory factory = con.buildSessionFactory(registry);
            Session session = factory.openSession();

    在hibernate4。0以后建议这样做

  • 相关阅读:
    《深入浅出WPF》4.0x名称空间
    《深入浅出WPF》3.0 XAML语法
    DataGridview 自动切换到 下一行
    C# 生成条形码图片,效果不错
    将DataTable 导出为csv
    DataTable,DataGridVIew转换到xls 方法 (转)
    NPOI读取Excel 数据 转。。。
    修改 字段大小
    VC
    统计每天 指定 时间段内 的数据
  • 原文地址:https://www.cnblogs.com/dgwblog/p/7635212.html
Copyright © 2020-2023  润新知