Hibernate---数据操作示例BY实体映射文件
创建一个Student.java类:该类需要一个无参的构造函数,以及属性的get/set方法
public class Student implements Serializable {
private static final long serialVersionUID = 2257468553009291835L;
private int id;
private String name;
private int age;
public Student() { }
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建一个Student.java类的映射文件Student.hbm.xml:该xml文件需要与实体类放在同一个包下
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-29 14:45:28 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hibernate.study.entity.Student" table="STUDENT" dynamic-insert="true" dynamic-update="true">
<id name="id" type="int">
<column name="ID" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<!-- not-null属性,true表示不能为空,false表示可以为空 -->
<column name="NAME"default="''" /><!-- 此处default中的两个表示字符串的单引号千万不能省略 -->
</property>
<property name="age" type="int">
<column name="AGE" not-null="false" />
</property>
</class>
</hibernate-mapping>
dynamic-insert=true、dynamic-update=true:class标签中这两个属性用于动态生成sql语句,即优化sql代码,提高执行sql效率。默认值为false
举例说明:
添加对象时
若没有设置dynamic-insert值,如果该例子中添加的student对象没有name值,SQL语句仍然是insert into students (age, name) values (?, ?),并且保存到数据库中的student记录没有保存name默认值。
若设置dynamic-insert值为true,如果该例子中添加的student对象没有name值,那么SQL语句则是insert into students (age) values (?),并且保存到数据库中的student记录保存了name默认值。
修改对象时
若没有设置dynamic-insert值,如果该例子中只修改了student对象的name值,SQL语句仍然是update students set name=?, age=? where id = ?;
若设置dynamic-insert值为true,如果该例子中只修改了student对象的name值,那么SQL语句则是update students set name=? where id = ?;
特别注意:dynamic-insert添加记录时,设置了default="' '” 默认值的字段(属性)不能设置not-null非空属性。not-null=true则表示该字段不能为空,在运行时,dynamic-insert不生效,非空字段为空,会报错。
generator属性值:
- assigned
主键由外部程序负责生成,在 save() 之前指定一个。
- hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
- seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
- increment
主键按数值顺序递增。适用于Oracle。
- identity
主键按数值顺序递增。适用于DB2、SQL Server、MySQL。
- sequence
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
- native
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
- uuid.hex
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
- uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。
- foreign
使用另外一个相关联的对象的标识符作为主键。
<id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现。
Increment:由hibernate自动递增生成标识符,用于为long, short或者int类型生成唯一标识。
identity :由底层数据库生成标识符(自动增长),返回的标识符是 long, short 或者int类型的。
sequence :hibernate根据底层数据库序列生成标识符,返回的标识符 是long, short或者 int类型的。
hilo :使用一个高/低位算法来高效的生成long, short 或者int类型的标识符。
uuid.hex :用一个128-bit的UUID算法生成32位字符串类型的标识符。
native :根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned :让应用程序在save()之前为对象分配一个标示符。
foreign :使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
配置Hibernate配置文件hibernate.cfg.xml(数据库连接信息),将该文件放到src目录下
<!-- ~ Hibernate, Relational Persistence for Idiomatic Java ~ ~ License:
GNU Lesser General Public License (LGPL), version 2.1 or later. ~ See the
lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. -->
<!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>
<!-- 配置数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 驱动程序名 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库名称 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernateTest</property>
<!-- 用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码 -->
<property name="hibernate.connection.password">123456</property> <!-- 显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 格式化输出SQL语句 -->
<property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property><!-- 在实际情况中,该值应为update -->
<!-- 与实体映射文件关联 -->
<mapping resource="com/hibernate/study/entity/Student.hbm.xml" /> </session-factory>
</hibernate-configuration>
一个测试类
public class StudyTest {
private static SessionFactory sessionFactory; // 会话工厂对象
private static Session session;
private static Transaction transcction;
public static void main(String[] args) {
// 创建配置对象
Configuration config = new Configuration().configure();
// 创建会话工厂对象
sessionFactory = config.buildSessionFactory();
// 会话对象
session = sessionFactory.openSession();
// 开启事务
transcction = session.beginTransaction();
// 生成学生对象
Student stu = new Student("疾风剑豪", 10);
session.save(stu); // 保存对象到数据库
transcction.commit(); // 提交事务
session.close(); // 关闭会话
sessionFactory.close(); // 关闭会话工厂
}
}
至此还需要一个log4j.properties配置文件
Hibernate---数据操作示例BY实体映射文件的更多相关文章
- 第八章 Hibernate数据操作技巧
第八章 Hibernate数据操作技巧8.1 分组统计数据 语法:[select]... from ...[where] [group by...[having...]] [order by ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate - POJO 类和数据库的映射文件*.hbm.xml
POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对 ...
- java-redis集合数据操作示例(三)
redis系列博文,redis连接管理类的代码请跳转查看<java-redis字符类数据操作示例(一)>. 一.集合类型缓存测试类 public class SetTest { /** * ...
- java-redis列表数据操作示例(二)
接上篇博文<java-redis字符类数据操作示例(一)>,redis连接管理类的代码请跳转查看. 一.列表类型缓存测试类 public class ListTest { /** * 主测 ...
- hibernate加载实体映射文件 及映射文件auto-import
第一种方法: 在hibernate.cfg.xml中<mapping resource="包名/Xxx.hbm.xml"/>包名为路径形式( x/x/x这种形式) 第二 ...
- Hibernate实体映射文件多对多等关系简单应用技巧
认真开完以后,就能很简单的写出各种关系了 第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!- ...
- Hibernate---数据操作示例BY实体类注释
通过实体的映射文件创建表的示例,除了基本jar包外,还需要jar包如下 ejb3-persistence.jar.hibernate-annotations.jar这两个包均在hibernate-an ...
- Hibernate入门(4)- Hibernate数据操作
Hibernate加载数据 Session.get(Class clazz, Serializable id) clazz:需要加载对象的类,例如:User.class id:查询条件(实现了序列化接 ...
随机推荐
- SQL Server 2008R2 18456错误解决方案
SQL Server 2008R2 18456错误解决方案 微软解释说,因密码或用户名错误而使身份验证失败并导致连接尝试被拒时,类似下面的消息将返回到客户端:“用户 '<user_name> ...
- Spring Cloud程序报错总结
1.com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: 原因如下: 在默认设置下,Eureka服务 ...
- 花3分钟了解下C/C++中的函数可变参简单实现
1.可变参函数的原理 C/C++函数的参数是存放在栈区的,并且参数的入栈是从参数的右边开始,即最后一个参数先入栈,而第一个参数最后才入栈,所以,根据栈的后进先出性质,函数总能找到第一个参数.所以,可变 ...
- win10下同时安装jdk1.7,1.8
摘要:在开发不同项目时,可能会用到不同的jdk,需要我们在不同的jdk之间切换,怎么样在同一电脑上装不同的jdk,以此总结 1.正常安装jdk1.7,1.8 显示安装了jdk1.7,再安装jd ...
- SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成
今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...
- 找子串替换(kmp)poj1572
题目链接:http://poj.org/problem?id=1572 输入数据时要注意,这里是string型 用getline(cin,origin[i]); #include <string ...
- python_3_coding
# -*- coding:utf-8 -*- 也可以换成下划线 用于声明文件编码,python3本身就是utf-8类型,不用声明 name="你好,世界"#utf-8格式能显示汉字 ...
- kubernetes-身份与权限认证(十四)
Kubernetes的安全框架 https://kubernetes.io/docs/reference/access-authn-authz/rbac/ •访问K8S集群的资源需要过三关:认证.鉴权 ...
- Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points
Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple ...
- _default_ VirtualHost overlap on port 80, the first has precedence
去掉#NameVirtualHost *:80,然后重启httpd