zoukankan      html  css  js  c++  java
  • hibernate--ID生成策略--annotation

    annotation: @GeneratedValue

    a) 自定义ID

    b)auto: 对mysql默认使用auto_increment, 对oracle使用hibernate_sequence

    c)identity 如何使用?  @GeneratedValue(strategy=GenerationType.IDENTITY)  oracle不可用, mysql,sql server可以用

    d)sequence: 如何使用?  @GeneratedValue(strategy=GenerationType.SEQUENCE)   只能oracle使用, 需要调整hibernate.cfg.hml里配置

    e) table: @TableGenerator

    1. 新建java项目,  引入hibernate, junit(user library)和sql包

    2. 新建包 com.bjsxt.hibernate, class: Teacher.java:

    注意这两项 

    @Id

    @GeneratedValue

    package com.bjsxt.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    
    @Entity
    @Table(name="_Teacher")
    public class Teacher {
    	private int id;
    	private String name;
    	private String title;
    	
    	@Id
    	@GeneratedValue
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getTitle() {
    		return title;
    	}
    	public void setTitle(String title) {
    		this.title = title;
    	}
    }
    

      

    3. 配置hibernate.cfg.xml放在src下.    update重要, 否则不用新生成id

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    
        <session-factory>
    
             
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
            <property name="connection.username">root</property>
            <property name="connection.password">linda0213</property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
           <!--
            <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="connection.url">jdbc:oracle:thin:@localhost:1521:SXT</property>
            <property name="connection.username">scott</property>
            <property name="connection.password">tiger</property>
          	<property name="dialect">org.hibernate.dialect.OracleDialect</property>
           -->
    
            <!-- JDBC connection pool (use the built-in) -->
    		<!--<property name="connection.pool_size">1</property> -->
    
            <!-- SQL dialect -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    
            <!-- Enable Hibernate's automatic session context management -->
    		<!--<property name="current_session_context_class">thread</property> -->
    
            <!-- Disable the second-level cache  -->
            <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
    		<property name="format_sql">true</property>
    
            <!-- Drop and re-create the database schema on startup-->
            <!--<property name="hbm2ddl.auto">create</property> -->
            <property name="hbm2ddl.auto">update</property> 
    		 
    		<!--<mapping class="com.bjsxt.hibernate.model.Student"/> -->
    		<!--<mapping resource ="com/bjsxt/hibernate/model/Student.hbm.xml"/> -->
      		<mapping class="com.bjsxt.hibernate.Teacher"/> 
    		
        </session-factory>
    
    </hibernate-configuration>
    

    4. 创建log4j.properties在src下: 

    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
    log4j.rootLogger=warn, stdout
    
    #log4j.logger.org.hibernate=info
    #log4j.logger.org.hibernate=debug
    
    ### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug
    
    ### log just the SQL
    #log4j.logger.org.hibernate.SQL=debug
    
    ### log JDBC bind parameters ###
    #log4j.logger.org.hibernate.type=info
    #log4j.logger.org.hibernate.type=debug
    
    ### log schema export/update ###
    log4j.logger.org.hibernate.tool.hbm2ddl=debug
    
    ### log HQL parse trees
    #log4j.logger.org.hibernate.hql=debug
    
    ### log cache activity ###
    #log4j.logger.org.hibernate.cache=debug
    
    ### log transaction activity
    #log4j.logger.org.hibernate.transaction=debug
    
    ### log JDBC resource acquisition
    #log4j.logger.org.hibernate.jdbc=debug
    
    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
    

    5. 项目右键新建source folder---"test"

    6. 项目下新建package和model里的package同名;

    7. 新建junit test文件:

    package com.bjsxt.hibernate;
    
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class HibernateIDTest {
    	private static SessionFactory sf=null;
    	@BeforeClass
    	public static void beforeClass(){
    		sf=new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	@Test
    	public void testTeacherSave() {
    		Teacher t =new Teacher();
    		t.setName("wdf");
    		t.setTitle("higfdfsdfsadh");
    		
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(t);
    		session.getTransaction().commit();
    		session.close();	
    	}
    	
    	@AfterClass
    	public static void afterClass(){
    		sf.close();
    	}
    }
    

      

    8. run as->junit test, 就会自动递增id, 生成新纪录 

  • 相关阅读:
    为什么会决定进行分库分表,分库分表过程中遇到什么难题,如何解决的?
    MySQL主从复制什么原因会造成不一致,如何预防及解决?
    PyQt5(2)、垃圾分类小程序(2)——初代窗口程序可执行文件
    垃圾分类小程序(1)——实现查找垃圾的类别
    python上的数据库sqlite3——插入多行数据
    pandas.DataFrame——pd数据框的简单认识、存csv文件
    Beautiful Soup 4.2.0 doc_tag、Name、Attributes、多值属性
    第一个爬虫——豆瓣新书信息爬取
    Decorator——Python初级函数装饰器
    正则表达式——字符类、分支条件、分组
  • 原文地址:https://www.cnblogs.com/wujixing/p/5413004.html
Copyright © 2011-2022 走看看