zoukankan      html  css  js  c++  java
  • Hibernate注解配置与XML配置区别

    注解配置的方式与xml很很多类似:

    首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar、ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar

    使用注解和xml配置,获取Session的方法在hibernate4.0版本以后是一样的,方法如下:

    1         Configuration configuration=new Configuration();
    2         configuration.configure();
    3         ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    4         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);        
    5         Session session=sessionFactory.openSession();

    下面是不同的地方:

    (1)hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:

              即把:<mapping resource="com/db/entity/Person.hbm.xml"/>

              改为:<mapping class="com.db.entity.Person" />

    (2):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。

    注意:(1):实体类属性注解的时候,都注解在get方法前

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

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

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

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

     

    User.java

    @Entity
    @Table(name="user")
    public class User implements Serializable {
    
        private int id;
        private String name;
        
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="id",nullable=true)
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        @Column(name="name")
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
    }

    hibernate.cfg.xml

     1 <hibernate-configuration>
     2 
     3 <session-factory>
     4     <property name="dialect">
     5         org.hibernate.dialect.MySQLInnoDBDialect
     6     </property>
     7     <property name="connection.url">
     8         jdbc:mysql://localhost:3306/mydb
     9     </property>
    10     <property name="connection.username">root</property>
    11     <property name="connection.password">123456</property>
    12     <property name="connection.driver_class">
    13         com.mysql.jdbc.Driver
    14     </property>
    15     <property name="myeclipse.connection.profile">MyDBAccount</property>
    16     <property name="show_sql">true</property>
    17     <mapping class="com.db.entity.User"/>
    18 </session-factory>
    19 
    20 </hibernate-configuration>

    Test.java

    public class Test{
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Session session=HibernateSessionFactory.getSession();
            User user=new User();
            user.setBname("丽丽");
            session.beginTransaction();
            session.save(user);
            session.getTransaction().commit();
        }
    
    }

    执行的sql语句:

    Hibernate: insert into user (name) values (?)

  • 相关阅读:
    SDN第四次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    个人作业——软件产品案例分析(待更)
    软工 实验三 需求分析(沈樟伟组)
    个人博客二:需求分析
    微软小娜APP的案例分析
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/5634993.html
Copyright © 2011-2022 走看看