Hibernate学习day01-----让hibernate通过配置自动生成实体类对应的表

 

hibernate是一个轻量级框架,通过ORM思想对数据库进行CRUD操作。

搭建一个Hibernate项目

1、建立一个普通的Java项目,导入hibernate所需的jar包

2、建立实体类(这里以teacher为例)

package com.hcy.entity;

public class Teacher {
    private Integer id;
    private String name;
    private String gender;
    private String type;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    @Override
    public String toString() {
        return "Teacher [id=" + id + ", name=" + name + ", gender=" + gender + ", type=" + type + "]";
    }
    
}

3、创建与实体类对应的映射配置文件,该映射配置文件的命名一般为   “实体类名.hbm.xml”

这里详细介绍一下该xml文件内容的详细介绍

  • 创建一个xml文件
  • 在编写该xml前需要引入约束条件,这里的约束条件不要求会写,只要会找就可以了。这个约束在
  • 里面如下图
  • 复制这段即可。

     

  • 接下来就可以详细配置实体类与数据库表中字段的对应关系了,下面是详细代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <!-- class标签里的name表示对应实体类的全类名,table属性代表要自动生成的数据库表的名字 -->
 7     <class name="com.hcy.entity.Teacher" table="t_teacher">
 8         <id name="id" column="id">
 9             <!--native由hibernate根据使用的数据库判断采用identity,Hilo,sequence其中一种主键生成方式 ,灵活性强,推荐使用 -->
10             <generator class="native"></generator>
11         </id>
12         <!-- 这里的name表示实体类对应的普通属性名(非主键),column属性表示对应数据库表中的字段名 -->
13         <property name="name" column="name"></property>
14         <property name="gender" column="gender"></property>
15         <property name="type" column="type"></property>
16     </class>
17 </hibernate-mapping>

4、创建hibernate的核心配置文件,该配置文件的命名和所在位置都是固定的。命名必须为hibernate.cfg.xml      所在目录必须在src目录下

同样该配置文件要先引入约束,这个约束也不需要自己写(会找就可以),该约束在中,复制

这段代码即可。   下面给出该核心配置文件的详细代码,说明会写在代码的注释中

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7     <!--先对数据库进行配置  -->
 8         <!-- 配置数据库的驱动信息 -->
 9         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
10         <!--配置数据库的url地址,这里要注意hibernate只能生成数据库中的表,所以数据库我们要自己手动去建立  -->
11         <property name="hibernate.connection.url">jdbc:mysql:///b_hibernate_day01</property>
12         <!-- 配置数据库的用户名 -->
13         <property name="hibernate.connection.username">root</property>
14         <!-- 配置数据库的密码 -->
15         <property name="hibernate.connection.password">123456</property>
16     <!-- 配置hibernate信息 -->
17         <!-- 显示底层的sql代码 -->
18         <property name="hibernate.show_sql">true</property>
19         <!-- 配置底层代码的输出格式 -->
20         <property name="hibernate.format_sql">true</property>
21         <!-- 自动生成数据库中的表 -->
22         <property name="hibernate.hbm2ddl.auto">update</property>
23         <!-- 配置方言 -->
24         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
25     <!--由于hibernate框架只能加载核心配置文件,但是我们也需要实体类与数据库表的映射文件,所以我们要把这些映射文件引入到核心配置文件中  -->
26     <!-- 引入映射文件 -->
27         <mapping resource="com/hcy/entity/Teacher.hbm.xml"/>
28     </session-factory>
29 </hibernate-configuration>

由于hibernate框架只能帮我们根据配置文件建立数据库中的表,所以数据库是需要我们手动去建立的

 

 这样hibernate基本的架子我们就搭建好了,下面我们写一个工具类来让hibernate自动生成一下实体类对应的表

 1 package com.hcy.utils;
 2 
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.cfg.Configuration;
 5 
 6 public class HibernateUtils {
 7     
 8     static {
 9         //加载核心配置文件
10         Configuration cfg = new Configuration();
11         cfg.configure();
12         //创建SessionFactory,在创建SessionFactory的时候会自动生成表
13         SessionFactory sessionFactory = cfg.buildSessionFactory();
14     }
15     public static void main(String[] args) {
16         
17     }
18 }

运行一下,查看数据库中是否创建出了我们所配置实体类对应的表,结果如下

 

过几天将会更新hibernate一对多表,多对多表,及其增删改查操作的详细内容

 

转载于:https://www.cnblogs.com/xiwai/p/10050036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
private static void printTableMetaInfo(Session session) { Connection connection = session.connection(); try { DatabaseMetaData metaData = connection.getMetaData(); ResultSet result = metaData.getColumns(null, null, NameOfTable, null); String strInJava = ""; String typeInJava; while (result.next()) { String columnName = result.getString(4); if ("stampTime".equalsIgnoreCase(columnName)) { continue; } int columnType = result.getInt(5); String nameFirstLetterLower = columnName.substring(0, 1).toLowerCase() + columnName.substring(1); switch (columnType) { case Types.VARCHAR: case Types.LONGVARCHAR: case Types.LONGNVARCHAR: case Types.NVARCHAR: case Types.CHAR: typeInJava = "String"; break; case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: typeInJava = useInteger ? "Integer" : "int"; break; case Types.TIMESTAMP: case Types.BINARY: typeInJava = "Calendar"; break; case Types.DECIMAL: typeInJava = "BigDecimal"; break; case Types.BIGINT: typeInJava = "BigInteger"; break; case Types.LONGVARBINARY: typeInJava = "byte[]"; break; case Types.DATE: typeInJava = "Calendar"; break; default: throw new Exception("Unknown type " + columnType + " and column is " + columnName); } strInJava += " private " + typeInJava + " " + nameFirstLetterLower + ";\n"; // strInHibernate += "\n"; } String str = "import javax.persistence.Entity;\n" + "import javax.persistence.Id;\n" + "import javax.persistence.Table;\n" + "import java.util.Calendar;\n\n"; str += "@Entity\n"; str += "@Table(name=\"$\")\n".replace("$", NameOfTable); str += "public class $ {\n".replace("$", NameOfTable.substring(2)); str += "\n @Id\n"; str += strInJava; str += "}"; System.out.println(str); StringSelection stringSelection = new StringSelection(str); Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); } catch (Exception e) { e.printStackTrace(); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值