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> /// ...
随机推荐
- dedecms网站扩展手机网站—共用数据库真正做到电脑手机同步访问,原pc站无需改动,对原pc站无任何影响
在如今无线互联网大潮的冲击下,越来越多的pc网站访问量下降,首当其冲的就是以pc网站为生的站长们,为了顺应无线互联网的要求,站长们很有必要为自己的pc网站扩展一套手机网站,更早的抓住手机用户的流量,使 ...
- Hive建模
Hive建模 1.介绍 Hive作为数据仓库,同关系型数据库开发过程类似,都需要先进行建模,所谓建模,就是对表之间指定关系方式.建模在hive中大致分为星型.雪花型和星座型.要对建模深入理解,首先需要 ...
- 笨办法学Python(零)
py走起!!! 习题0:准备工作 Windows平台 1. 用浏览器打开 http://learnpythonthehardway.org/exercise0.html 下载并安装 gedit 文本编 ...
- Torch.no_grad()影响MSE损失
相关描述 https://discuss.pytorch.org/t/torch-no-grad-affecting-outputs-loss/28595/3 今天在训练网络的时候,发现mseloss ...
- 2018.9.8pat秋季甲级考试
第一次参加pat考试,结果很惨,只做了中间两道题,还有一个测试点错误,所以最终只得了不到50分.题目是甲级练习题的1148-1151. 考试时有些紧张,第一题第二题开始测试样例都运行不正确,但是调试程 ...
- java对字符串进行加密和解密(以下是来自其他博主)
背景:需要对读取数据库配置的文件进行加密,防止他人拿到数据,而对自己的代码,有要实现进行解密,网上给的加密方式,什么MD5,base64,还有等等,都太复杂,而且有些是单向的,只加密不解密,以下代码, ...
- v-for的深层用法
为了提升循环的性能,我们会给循环加上一个唯一的key值,这个key值一定是唯一的 <div id='root'> <div v-for='(item,index) of list' ...
- 百度Ueditor 图片上传无反应,显示上传0张,不能点确定
解决办法: \Data\Ueditor\php\Uploader.class.php 190行左右 /** * 获取文件扩展名 * @return string */ private function ...
- 2017.11.2 JavaWeb----第六章 Servlet技术
JavaWeb ------第六章 Servlet技术 (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式.在MVC开发模式中将Web程序的 ...
- 测试 jdbc 中连接关闭的时机
测试 jdbc 中连接关闭的时机 写一段程序,测试 jdbc 连接的关闭情况 /** * 测试 jdbc 连接的关闭情况 */ public static void testOpenCon(){ // ...