Hibernate(4)简单的HelloWorld
一个HelloWorld的案例
public class HelloWorld {
@Test
public void test() {
//1.创建SessionFactory对象
SessionFactory sessionFactory = null;
//1.1.创建Configuration对象,对应Hibernate的基本配置信息和对象映射信息
Configuration configuration = new Configuration().configure();
//Hibernate4.0之前这样创建SessionFactory对象
//sessionFactory = configuration.buildSessionFactory();
//Hibernate4.0之后这样创建sessionFactory对象
//1.2.创建ServiceRegistry对象,Hibernate4.X新添加的对象,Hibernate任何配置和服务都要在该对象中注册后才有效
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
applySettings(configuration.getProperties()).
buildServiceRegistry();
//1.3.获取SessionFactory对象,并在serviceRegistry对象中注册
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//2.创建一个Session对象
Session session = sessionFactory.openSession();
//3.开启事务
Transaction transaction = session.beginTransaction();
Users user= new Users("lili", "123", "丽丽", "河南省", "12883924987", "163@qq.com", new Date());
//4.执行保存操作
session.save(user);
//5.提交事务
transaction.commit();
//6.关闭session
session.close();
//.关闭sessionFactory
sessionFactory.close();
}
}
实体类
package com.test.withXml.entity;
import java.io.Serializable;
import java.sql.Blob;
import java.util.Date;
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String loginName;
private String loginPwd;
private String name;
private String address;
private String phone;
private String mail;
//日期格式
private Date date;
//派生的属性
private String Desc;
//大文本属性
private String content;
//二进制文件
private Blob image;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Blob getImage() {
return image;
}
public void setImage(Blob image) {
this.image = image;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getDesc() {
return Desc;
}
public void setDesc(String desc) {
Desc = desc;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
//1.
public Users(String loginName, String loginPwd, String name,
String address, String phone, String mail, Date date) {
super();
this.loginName = loginName;
this.loginPwd = loginPwd;
this.name = name;
this.address = address;
this.phone = phone;
this.mail = mail;
this.date = date;
}
//2.
public Users() {
}
@Override
public String toString() {
return "Users [loginName=" + loginName + ", loginPwd=" + loginPwd
+ ", name=" + name + ", address=" + address + ", phone="
+ phone + ", mail=" + mail + ", date=" + date + "]";
}
}
映射文件User.hbm.xml
<!-- 映射文件 -->
<hibernate-mapping>
<!-- class节点中的name属性对应实体类的名字,table属性对应数据表的名字,catalog对应数据库的名字 -->
<class name="com.test.withXml.entity.Users" table="users"
catalog="hibernate_xml" dynamic-update="true">
<!-- class节点下必须有一个<id>节点,用于定义实体类的标识属性(对应数据表中的主键),
id节点的name属性对应实体类的属性,type对应该属性的Java类型
-->
<id name="id" type="java.lang.Integer" unsaved-value="100">
<!-- column用于指定数据库表的列名 -->
<column name="Id"></column>
<!-- generator用于指定主键的生成器策略 ,使用native表示让底层数据库主键自增的方式生成,使用这种方式
产生的ID会在执行Session的save()方法的时候,先执行SQL语句,在提交事务的意外情况。
hilo表示使用Hibernate高低算法生成ID,使用该算法时,要在数据库中建立一张额外的表,
默认表名为hibernate_unique_key,默认字段为integer类型,名称是next_hi,并设置初始值-->
<generator class="native"></generator>
</id>
<!-- properties节点与id类似,用于映射普通属性 -->
<property name="loginName" type="java.lang.String">
<column name="LoginName" length="50"></column>
</property>
<property name="loginPwd" type="java.lang.String">
<column name="LoginPwd" length="16"></column>
</property>
<property name="name" type="java.lang.String">
<column name="Name" length="16"></column>
</property>
<property name="address" type="java.lang.String">
<column name="Address" length="16"></column>
</property>
<property name="phone" type="java.lang.String">
<column name="Phone" length="16"></column>
</property>
<property name="mail" type="java.lang.String">
<column name="Mail" length="20"></column>
</property>
<!-- 映射派生属性,即对象中需要一个属性但是数据表中不需要再添加一个字段,使用派生属性即可 -->
<property name="desc" formula="(SELECT concat(LoginName, ': ', LoginPwd) FROM users n WHERE n.id = id)"></property>
<!-- 映射date(日期)、time(时间)、timestamp(时间戳),此时映射的是时间 -->
<property name="date" type="date">
<column name="Date" length="20"></column>
</property>
<!-- 映射大文本属性 -->
<property name="content">
<column name="Content" sql-type="mediumtext"></column>
</property>
<property name="image">
<column name="Image" sql-type="mediumblob"></column>
</property>
</class>
</hibernate-mapping>
配置文件hibernate.cfg.xml
<!-- 配置文件 -->
<hibernate-configuration>
<session-factory>
<!-- 配置链接数据库的基本信息 -->
<!-- 数据库连接的URL -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_xml</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">root</property>
<!-- 配置Hibernate的基本信息 -->
<!-- 程序运行时是否在控制台输出执行的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对SQL进行格式化 -->
<property name="format_sql">true</property>
<!-- 配置Hibernate方言,即使用的不同的数据库类型,该方言支持事务 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 数据库编码方式 -->
<property name="Connection.characterEncoding">UTF-8</property>
<!--
指定生成表的策略
validate:加载hibernate时,验证创建数据库表结构,启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
create:每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop:加载hibernate时创建,退出是删除表结构
update:加载hibernate自动更新数据库结构
-->
<property name="hbm2ddl.auto">update</property>
<!-- 设置事务的隔离级别 -->
<property name="hibernate.connection.isolation">2</property>
<!-- 删除对象后,使其OID置位null -->
<property name="hibernate.use_identifier_rollback">true</property>
<!-- 配置C3P0数据源 -->
<!-- 数据库连接池的最大连接数 -->
<property name="hibernate.c3p0.max_size">10</property>
<!-- 数据库连接池的最小连接数 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 当数据库连接池中的连接耗尽时, 同一时刻获取多少个数据库连接 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- 表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时 -->
<property name="hibernate.c3p0.idle_test_period">2000</property>
<!-- 数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁 -->
<property name="hibernate.c3p0.timeout">2000</property>
<!-- 缓存 Statement 对象的数量 -->
<property name="hibernate.c3p0.max_statements">10</property>
<!-- 设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数 -->
<property name="hibernate.jdbc.fetch_size">100</property>
<!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
<property name="jdbc.batch_size">30</property>
<!-- 配置映射文件时,这两种方法只能使用其中之一,同时使用会报错 -->
<!--使用配置文件时: 加载映射文件,注意使用的是斜杠作为分割符,有文件的后缀名 -->
<mapping resource="com/test/withXml/entity/User.hbm.xml"></mapping>
<!-- 使用注解时:加载持久化类文件,注意使用的是圆点作为分割符,文件的后缀名 -->
<!-- <mapping class="com.test.withAnnotation.entity.UsersAnno"/> -->
</session-factory>
</hibernate-configuration>
Hibernate(4)简单的HelloWorld的更多相关文章
- Mybatis_1(认识)一个简单的HelloWorld
1. 介绍: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBatis可以使用简单的XM ...
- 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert
使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...
- Hibernate框架简单应用
Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...
- 1.1GTK+ 的简单程序HelloWorld
1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:
- ssh架构之hibernate(一)简单使用hibernate完成CRUD
1.Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,h ...
- 简单的HelloWorld
简单的HelloWorld 步骤: -加入jar包 -在web.xml中配置DispatcherServlet -加入Spring MVC的配置文件 新建文件springmvc.xml: -编写处理请 ...
- 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现
使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这篇文章进行安装和破解 ...
- Spring Boot2(002):手动创建第1个SpringBoot2简单应用——“HelloWorld” web 工程
备注:以下内容参考 springboot 官方文档 https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/pdf/spring ...
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
随机推荐
- 查询Linux系统中glibc的版本
编写一个简单的程序 #include <stdio.h> int main() { printf("Hello world\n"); ; } 编译 gcc test.c ...
- ajax后台输出有红点
转自 百度了很多,说有utf8的bom头,通过dw,sublime软件,各种清除格式无果. 后来直接在返回结果之前,执行一下ob_clean(); 完美解决问题
- [转]MyEclipse 2015优化技巧
http://www.chinahadoop.cn/group/16/thread/1660 http://www.bkjia.com/Javabc/1077158.html 只有不断的学习才能使人充 ...
- 一次BurpSuite无法抓https包定位
- kudu的写数据流程
写入操作是指需进行插入.更新或删除操作的一组行.需要注意的事项是Kudu强制执行主关键字的唯一性,主关键字是可以更改行的唯一标识符.为了强制执行此约束条件,Kudu必须以不同的方式处理插入和更新操作, ...
- python--smtp邮件使用
#构建对象时,第一个是邮件正文,第二个发送类型,plain表示纯文本,最后使用utf-8保证多语言兼容 #如果需要发送html的话,就把plain改为html------>内容使用html构造便 ...
- BZOJ4456/UOJ#184[Zjoi2016]旅行者 分治 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8682133.html 题目传送门 - BZOJ4456 题目传送门 - UOJ#184 题意 $n\times ...
- 【转】Linux 虚拟内存和物理内存的理解
http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先,让我们看下虚拟内存: 第一层理解 1. 每个进程 ...
- Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第七集之SSH远程连接——克隆与更改配置】
一.SSH远程连接 OpenSSH的安装 查看是否安装Openssh:rpm -qa | grep ssh搜索openssh安装包:yum search openssh安装openssh:yum in ...
- Azkaban
Azkaban安装部署 https://azkaban.github.io/azkaban/docs/2.5/ 安装Azkaban ) 在/opt/module/目录下创建azkaban目录 [kri ...