hibernate学习-HibernateDemo
上篇文章我们讲述了eclipse安装hibernate插件的过程,这篇文章我们来做第一个HibernateDemo。
1)、hibernate的jar开发包的下载,官网下载地址:http://hibernate.org/orm/downloads/,解压后我们可以在hibernate-release-5.2.3.Final\lib\required文件夹下找到hibernate开发用到的jar包。
2)、新建一个Java Project项目,导入jar包(记得把MySQL的jar包也加进去),在src根目录下新建一个***.cfg.xml文件(安装插件成功后可以快速新建),然后我们进行文件配置,代码如下:
<session-factory>
<!-- 连接数据库的基本信息 -->
<property name="connection.username">root</property><!-- MySQL数据库的用户名 -->
<property name="connection.password">root</property><!-- MySQL数据库的密码 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- MySQL驱动 -->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><!--MySQL的URL,localhost(本地地址,可以省略)也可以改成远程服务器地址 --> <!-- 配置hibernate的基本信息 -->
<!-- hibernate所使用的基本方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- 执行操作时是否在控制台打印 -->
<property name="show_sql">true</property> <!-- 是否对sql格式化 -->
<property name="format_sql">true</property> <!-- 指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定关联的.hbm.xml文件,这一步应该生成java beans后再配置 -->
<mapping resource="com/hibernateHello/News.hbm.xml"/> </session-factory>
3)、定义JavaBeans(对应你的数据表),
package com.hibernateHello; import java.sql.Date; public class News {
private Integer id;
private String author;
private String title;
private Date date; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} public News() {
// TODO Auto-generated constructor stub
} public News(String author, String title, Date date) {
// super();
this.author = author;
this.title = title;
this.date = date;
} }
4)、快捷生成JavaBeans对应的News.hbm.xml文件(也是插件提供),具体操作如下图所示。
生成的代码:
<hibernate-mapping>
<class name="com.hibernateHello.News" table="NEWS">
<!-- id 主键 -->
<id name="id" type="java.lang.Integer">
<column name="ID" />
<!-- 指定主键生成方式 native:使用数据库本地方式 -->
<generator class="native" />
</id>
<property name="author" type="java.lang.String">
<column name="AUTHOR" />
</property>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="date" type="java.sql.Date">
<column name="DATE" />
</property>
</class>
</hibernate-mapping>
5)、 ***.cfg.xml指定关联的**.hbm.xml文件(*千万不要忘记)
6)、通过JUnit测试,代码如下:
package com.hibernateHello; import java.sql.Date; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before; public class Test {
private Configuration configuration;
private StandardServiceRegistry registry;
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void first() {
// 创建Configuration对象:对应hibernate的基本配置信息和对象关系映射信息
configuration = new Configuration().configure(); //创建一个对象StandardServiceRegistry,configure("你的***.cfg.xml"),默认为hibernate.cfg.xml
registry = new StandardServiceRegistryBuilder().configure().build(); // 创建会话工厂对象
sessionFactory = configuration.buildSessionFactory(registry); // 创建一个Session对象
session = sessionFactory.openSession(); // 开启事物
transaction = session.beginTransaction();
}
/*
* saveNews()添加数据
* getNews()和loadNews()查找数据
* updateNews()修改数据
* deleteNews()删除数据
*/
@org.junit.Test
public void saveNews() {
News news = new News("63va", "fe", new Date( new java.util.Date().getTime()));
session.save(news);
}
@org.junit.Test
public void getNews() {
News a1 = session.get(News.class, 1);
System.out.println(a1); } @org.junit.Test
public void loadNews() {
News a1 = session.load(News.class, 1);
System.out.println(a1); } @org.junit.Test
public void updateNews() {
News a1 = session.get(News.class, 2);
a1.setAuthor("ccc");
session.update(a1);
System.out.println(a1); } @org.junit.Test
public void deleteNews() {
News a1 = session.get(News.class, 4);
session.delete(a1);
// System.out.println(a1); } @After
public void finsh() {
// 提交事物
transaction.commit();
//关闭session
session.close();
// 关闭SessionFactory对象
sessionFactory.close();
} }
7)、运行效果如图所示:
hibernate学习-HibernateDemo的更多相关文章
- Hibernate学习之——搭建log4j日志环境
昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- 我的hibernate学习记录(二)
通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...
- Hibernate学习(二)关系映射----基于外键的单向一对一
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...
- Hibernate学习一:Hibernate注解CascadeType
http://zy19982004.iteye.com/blog/1721846 ———————————————————————————————————————————————————————— Hi ...
- Hibernate学习---缓存机制
前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢. 在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我 ...
随机推荐
- 【Win 10 应用开发】文件读写的三种方案
本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...
- SQL Server-聚焦NOT EXISTS AND NOT IN性能分析(十五)
前言 上一节我们分析了INNER JOIN和IN,对于不同场景其性能是不一样的,本节我们接着分析NOT EXISTS和NOT IN,简短的内容,深入的理解,Always to review the b ...
- 细说Promise
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...
- 12.JAVA之GUI编程打开与保存文件
功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...
- 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)
先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 l ...
- JS魔法堂:不完全国际化&本地化手册 之 拓展篇
前言 最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...
- 前端开发:css技巧,如何设置select、radio 、 checkbox 、file这些不可直接设置的样式 。
前言: 都说程序员有三宝:人傻,钱多,死得早.博主身边的程序“猿”一大半应了这三宝,这从侧面说明了一个问题,只有理性是过不好日子的.朋友们应该把工作与生活分开,让生活变得感性,让工作变得理性,两者相提 ...
- Redis命令拾遗三(列表List类型)
本文版权归博客园和作者吴双本人共同所有.转载和爬虫请注明原文地址 Redis五种数据类型之列表类型 Redis五种数据类型之列表类型.你可以存储一个有序的字符串列表一类数据.比如你想展示你所存储的所有 ...
- js正则表达式整理
一.数字类 数字:^[0-9]*$ 正数.负数.和小数:^(\-|\+)?\d+(\.\d+)?$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9 ...
- [python] File path and system path
1. get files in the current directory with the assum that the directory is like this: a .py |----dat ...