hibernate中表名和Modle类名不同时的配置

来源:互联网 发布:什么软件升级win10 编辑:程序博客网 时间:2024/05/14 12:12

有的时候编写数据库的表名是有数据库的命名规范,而在Java中又有java的命名规范,当数据库的命名规范和Java的命名规范不一样是导致Modle的类的类名不一定是数据库的表名,我们在Modle里如何设置数据库的表名呢?下面我们通过一个注解来解决数据库表名和类名不同时的配置。

第一步:创建Java普通工程,新建三个项目包,分别是com.ygc.hibernate.main | com.ygc.hibernate.modle | com.ygc.hibernate.utils分别代表的意思是主方法测试hibernate ;数据库对应的Modle类;工具类的包,然后编写Modle类,下面我们模拟一个People的表来使用这个配置。

package com.ygc.hibernate.modle;import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;//如果类名和数据库的表名不同时我们通过Table注解来指定数据库的表名也是本例要说的的配置@Entity@Table(name="m_people")public class People implements Serializable {private int id;private String name;private String sex;private long telphone;@Id@GeneratedValue(strategy=GenerationType.AUTO)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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public long getTelphone() {return telphone;}public void setTelphone(long telphone) {this.telphone = telphone;}}

第二步:编写测试类和工具类

package com.ygc.hibernate.main;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.ygc.hibernate.modle.People;import com.ygc.hibernate.utils.HibernateUtils;public class PeopleTest {/** * @param args */public static void main(String[] args) {People people = new People();people.setName("汪峰");people.setSex("男");people.setTelphone(15875586320L);SessionFactory sessionFactory = HibernateUtils.getFactory();Session session = sessionFactory.openSession();session.beginTransaction();session.save(people);session.getTransaction().commit();session.close();sessionFactory.close();}}
package com.ygc.hibernate.utils;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;public class HibernateUtils {private static HibernateUtils instance;private HibernateUtils(){}public static HibernateUtils gHibernateUtils(){if(instance==null){instance = new HibernateUtils();}return instance;}public static SessionFactory getFactory(){Configuration configuration = new AnnotationConfiguration().configure();return configuration.buildSessionFactory();}}

 

第三步hibernate的配置文件文件名称为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>        <!-- Database connection settings -->        <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">root</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.internal.NoCacheProvider</property>-->        <!-- Echo all executed SQL to stdout -->        <property name="show_sql">true</property>        <!--自动创建表-->       <property name="hbm2ddl.auto">create</property>        <!-- Drop and re-create the database schema on startup -->        <!--<property name="hbm2ddl.auto">update</property>-->        <!--<mapping resource="com/ygc/hibernate/modle/Students.hbm.xml"/>-->        <mapping class="com.ygc.hibernate.modle.People"/>    </session-factory></hibernate-configuration>

log4j的配置文件

# Configure logging for testing: optionally with log file# debug,info,warn,error,fatallog4j.rootLogger=debug, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=D:/logs/hibernate.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.logger.org.hibernate.tool.hbm2ddl=debug


查看数据的的变化情况我们在Modle类中设置的数据库表名为m_people,而类名是People,查看的表名为m_people说句我们设置的注解起效了。


数据库的查看

mysql> show tables;+---------------------+| Tables_in_hibernate |+---------------------+| class               || m_people            || music               || product             || students            || teacher             || xuxudan             |+---------------------+7 rows in set (0.14 sec)

没错数据库中就有一个m_people的表。

Demo下载:下载


原创粉丝点击