hibernate第一个例子,保存一个对象
来源:互联网 发布:手机淘宝到货退款流程 编辑:程序博客网 时间:2024/05/16 05:25
首先,我们先要编写一个pojo,继续拿老生常谈的Person类(不了解pojo的可以看我上一篇帖子:关于ormapping)。
环境的配置:
导入jar包:
由于这里是Java Project,我们要手动添加jUnit
右键项目名称
选择弹出的properties窗口中的buildPath,出现如下对话框
添加jUnit完毕
写在前面:可能有些人看了之后会觉得奇怪,为什么先写类,然后用类来创建表呢?这是因为,刚刚学习hibernate,我们要多熟悉其配置文件,一般的设计,都是先设计数据库的,即根据表生成类和配置文件
public class Person implements Serializable { private long pid; private String pname; public long getPid() { return pid; } public void setPid(long pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; }}
写完pojo之后,我们开始写映射文件,有关命名方式,也在上一篇帖子做出了介绍。
这里有一个小细节,在建完Person.hbm.xml之后,我们可以使用如下方式打开
点开之后,找到如下图所示。
点开之后,就会出现如下的界面
点击左下角的source,转到代码界面。
现在里面什么都没有,我们从API文档中,拷贝到了scheme约束信息,由于所有的*.hbm.xml都是一样的,所以我们就不用自己敲了,浪费时间。
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
然后,我们就可以进行编码,这里只有一个根元素<hibernate-mapping>
然后里面有一个元素,叫class,可是我们把class打出来的时候,它报错了
把鼠标移动到class上,可以看到有一系列的元素
从里面的元素可以看到,只有(id|composite-id)
没有*/+/?,所以括号里面的2个元素,至少出1个。我们就用Id
写完之后是这样的
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <!-- name代表pojo的全名,这里有个小技巧,可以直接把类名打上去,然后看看提示,如果没有提示,关了再开就可以看到提示 table对应的表名 --> <class name="cn.ansel.domain.Person" table="hiernate1"> <!-- id:代表主键属性 name:主键的名字 column:表中列的名字 length:数据库中字段的长度 type:name的类型,其中这里有两种类型,一种是Java类型,另外一种是hibernate类型,Java类型就是打出它的全名,hibernate类型的是小写的,比如String在hibernate类型中表示的是string,只不过hibernate里面是小写的 --> <id name="pid" column="pid" length="100" type="java.lang.Long"> <!-- generator:主键的生成类型 --> <generator class="increment"></generator> </id> <!-- property:代表其他属性 name、column、type、length与上雷同 --> <property name="pname" column="pname" length="200" type="java.lang.String"></property> </class></hibernate-mapping>
然后我们在src文件下创建hibernate.cfg.xml,然后用以下的方式打开
写完之后是这样的
<?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只能连接一个数据库 --><session-factory> <!-- 数据库的用户名 --> <property name="connection.username">root</property> <!-- 密码 --> <property name="connection.password">root</property> <!-- url 这里的URL指的是数据库的地址, hibernate是不会帮我们创建数据库的,数据库要我们自己创建! --> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate1 </property> <!-- 作用:根据持久化类和映射文件生成表 validate:只验证 create-drop:在开启hibernate的时候创建表,在关闭hibernate的时候删除表 create:每次打开hibernate的时候都创建表 update:每次打开hibernate的时候先validate如果有修改就update,若没有,就create 有了这个属性hbm2ddl.auto,可以让类生成表 --> <property name="hbm2ddl.auto">update</property> <!-- 这个属性,可以在左下角的configuration界面上的右下角的框中,添加Person.hbm.xml文件 --> <mapping resource="cn/ansel/domain/Person.hbm.xml" /></session-factory></hibernate-configuration>
关于这里的2个配置文件,大家以后都可以复制直接使用,然后再根据自己的需求做修改即可,scheme是不会变的
然后我们自己创建一个测试类。
public class testCreateTable { @Test public void tCreateTable(){ //新建配置文件的对象 Configuration configuration=new Configuration(); //得到配置文件 configuration.configure(); //读取配置文件,在这个时候就把表创建出来了 configuration.buildSessionFactory(); }}
这里有一个细节,看到上面代码的得到配置文件那一步,我们翻阅它的源代码可以看到:
public Configuration configure() throws HibernateException { configure( "/hibernate.cfg.xml" ); return this; }
这说明hibernate.cfg.xml必须要在src目录下,并且名字必须为hibernate.cfg.xml
开始测试,测试成功之后,看到数据库多了一张表
- hibernate第一个例子,保存一个对象
- hibernate第一个例子
- Hibernate---->第一个例子
- Hibernate第一个例子
- Hibernate第一个例子
- 学习hibernate第一个例子
- Hibernate 第一个例子 详解
- Hibernate第一个例子(一)
- 深入浅出Hibernate中的第一个例子
- hibernate入门的第一个例子
- Hibernate第一个例子(二)
- 5、第一个例子
- opengl 第一个例子
- ajax 第一个例子
- JavaBeans第一个例子
- SiteMesh第一个例子
- Mina第一个例子
- Servlet第一个例子
- Java
- 1002. A+B for Polynomials (25)
- VB+DX游戏编程教程 第一话:初识DX
- Mysql 优化
- leetcode--------------Length of Last Word
- hibernate第一个例子,保存一个对象
- 位向量法排序
- LeetCode_DP_Unique Paths
- 一些优秀的实时开发社区
- 如何配置 MongoDB 副本集
- 条款02 尽量以const enum inline 替换#define
- 总结自己的Git常用命令
- GPU并行计算入门1——背景知识
- ios开发之UI基础--transframe属性