Hibernate---数据操作示例BY实体类注释
通过实体的映射文件创建表的示例,除了基本jar包外,还需要jar包如下
ejb3-persistence.jar、hibernate-annotations.jar这两个包均在hibernate-annotations压缩文件下
下载,密码:o30j;官网下载:https://sourceforge.net/,搜索Hibernate,选择Hibernate,点击Files,选择需要的依赖jar包(hibernate-annotations);基本jar包下载可阅读Hibernate---开发环境搭建文章;
例子
创建一个Student.java实体注释类:该类需要一个无参的构造函数,以及属性的get/set方法,而其中的注释导入的则是javax.persistence.*包。具体注释简介见Hibernate---实例类注释。
@Entity
@DynamicInsert(true)
@DynamicUpdate(true)
@Table(name = "students")
public class Students implements Serializable { private static final long serialVersionUID = 2257468553009291835L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id; @Column(name="name",columnDefinition="varchar(50) default ''" )//需要设置默认值,default中的''不能忽略,并且必须指定数据类型值。特别提示,不能有nullable=false设置
private String name; @Column(name="age",nullable=false)
private int age;
public Students() { } public Students(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;
} }
@DynamicInsert(true) @DynamicUpdate(true):这两个类注释用于动态生成sql语句,即优化sql代码,提高执行sql效率。默认值为false
举例说明:
添加对象时
若没有设置@DynamicInsert(true),如果该例子中添加的student对象没有name值,SQL语句仍然是insert into students (age, name) values (?, ?),并且保存到数据库中的student记录没有保存name默认值。
若设置@DynamicInsert(true),如果该例子中添加的student对象没有name值,那么SQL语句则是insert into students (age) values (?),并且保存到数据库中的student记录保存了name默认值。
修改对象时
若没有设置 @DynamicUpdate(true),如果该例子中只修改了student对象的name值,SQL语句仍然是update students set name=?, age=? where id = ?;
若设置 @DynamicUpdate(true),如果该例子中只修改了student对象的name值,那么SQL语句则是update students set name=? where id = ?;
特别注意:@DynamicInsert添加记录时,设置了default="' '” 默认值的字段(属性)不能设置nullable=false非空属性。nullable=false则表示该字段不能为空,在运行时,@DynamicInsert不生效,非空字段为空,会报错。
配置Hibernate配置文件hibernate.cfg.xml(数据库连接信息),将该文件放到src目录下。注意,与实体注释类关联的mapping标签属性是class

<!-- ~ 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 class="com.hibernate.study.entity.Students" /> </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 ...
- spring boot: spring-data-jpa (Repository/CrudRepository) 数据库操作, @Entity实体类持久化
SpringBoot实现的JPA封装了JPA的特性, Repository是封装了jpa的特性(我是这么理解的) 1在pom.xml引入mysql, spring-data-jpa依赖 2.在src/ ...
- java-redis集合数据操作示例(三)
redis系列博文,redis连接管理类的代码请跳转查看<java-redis字符类数据操作示例(一)>. 一.集合类型缓存测试类 public class SetTest { /** * ...
- java-redis列表数据操作示例(二)
接上篇博文<java-redis字符类数据操作示例(一)>,redis连接管理类的代码请跳转查看. 一.列表类型缓存测试类 public class ListTest { /** * 主测 ...
- 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)
开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- 使用Sql语句快速将数据表转换成实体类
开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...
- Hibernate---数据操作示例BY实体映射文件
创建一个Student.java类:该类需要一个无参的构造函数,以及属性的get/set方法 public class Student implements Serializable { privat ...
- 泛型的运用(用于查询数据后DataTable转实体类)
2019.8.14 更新 补全了DataTable转泛型集合的方法: /// <summary> /// DataTable转实体类集合 /// </summary> /// ...
随机推荐
- (转)轻松解决 MyEclipse、Eclipse 编译时提示 @Override The method of type must override a superclass method 即 @Override 标注问题
刚才在把工程从其他地方导入到自己机子的 MyEclipse 下时,出现了 The method of type must override a superclass method ,提示的是实现类必须 ...
- Python基础学习之语句和语法
语句和语法 python语句中有一些基本规则和特殊字符: 井号键“#”表示之后的字符为python注释: 三引号(‘‘‘ ’’’)可以多行注释 换行“\n”是标准的行分隔符(通常一个语句一行): 反斜 ...
- 带来全新的网络格局---html5
自从HTML5诞生之后,就是开始建立了一个标准的原则,那就是所有的技术它必须是面向开放,并不能有专利的一个存在,在整个期间Opera捐献了css技术,而google的话则是给开发者提供了视频的webM ...
- Microsoft EDP(enterprise database protection)选择应用程序在哪里可以访问企业数据
在配置策略时,对Rule template设置完成后,添加corporate identity.关于corporate identity, 目前没有什么好的理解,翻译过来就是“公司标识”,我也理解不了 ...
- Jenkins使用分组过滤分类
背景:Jenkins项目过多,通过选项卡的方式过滤需要的项目 1.点击选择卡上的加号 2.填写要分组的名字 3.可选择某个job进行分类,或者使用正则表达式的方式进行分类,楼主是根据正则进行匹配, 4 ...
- POJ-1159 Palindrome---变成回文串的最小代价
题目链接: https://cn.vjudge.net/problem/POJ-1159 题目大意: 题意很明确,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符 ...
- bzoj4836 [Lydsy2017年4月月赛]二元运算
Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b ,接下来有 q 次询问.每次询问给定一个数字 c 你需要求出有多少对 (i, j) ...
- 前端高质量知识(一)-JS内存空间详细图解
变量对象与堆内存 var a = 20; var b = 'abc'; var c = true; var d = { m: 20 } 因为JavaScript具有自动垃圾回收机制,所 ...
- 转:SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
转:https://www.cnblogs.com/zyw-205520/p/4771253.html 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年 ...
- 2017.9.16 Web 应用开发环境搭建与开发工具安装
1.JDK的下载与安装 1.1 在网址:http://javase/downloads/index.jsp网站下载最新的JDK版本 1.2 安装jdk,双击下载好的.exe文件运行,一般默认安装在c盘 ...