hibernate添加数据入门小案例
1.建立一个java项目,在目录下新建一个lib文件夹引入hibernate架包如图所示:

2. 新建com.LHB.domain包,在包中分别创建一个Employee.java和Employee.hbm.xml文件,
Employee.java中的代码如下:
package com.LHB.domain; import java.util.Date;
//该pojo/javabean/domain按照规范应当序列化,目的是可以唯一的表示该对象呢,同时可以在网络和文件传输
public class Employee implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String email;
private Date hiredate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
} }
Employee.hbm.xml映射文件配置如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- 映射文件通过DTD来指定格式 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 该文件用于配置domain对象和表的映射关系 -->
<hibernate-mapping package="com.LHB.domain">
<class name="Employee" table="employee" >
<!-- id元素用于指定主键属性 -->
<!--
<id name="id" column="id" type="java.lang.Integer">
该元素用来指定主键生成的策略hilo native increment sequence uuid
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
</id>
-->
<!-- 在更改数据库时对主键生成策略做了修改 -->
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<!-- 如果id号希望用户自己设定,而不是由数据库MySQL -->
<!-- <id name="id" column="id" type="java.lang.Integer">
<generator class="assigned"/>
</id> -->
<!-- 对其它属性还要配置 -->
<property name="name" type="java.lang.String">
<column name="name" not-null="false" />
</property>
<property name="email" type="java.lang.String">
<column name="email" not-null="false" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="hiredate" not-null="false" />
</property>
</class> </hibernate-mapping>
3.在项目src文件下创建hibernate.cfg.xml配置文件,其中的配置信息如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- 配置使用的driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<!-- 配置dialect方言,明确告诉hibernate连接哪种数据库 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示出对应的sql语句 -->
<property name="show_sql">true</property>
<!-- 让hibernate给我们自动创建表 creat:如果mysql中没有该表则创建,如果有表则删除再创建
update:如果没有表则创建新表,如果有表则看表结构有没有变化,如果有变化则创建新表-->
<property name="hbm2ddl.auto">update</property>
<!-- 指定管理的对象映射文件 -->
<mapping resource="com/LHB/domain/Employee.hbm.xml"/> </session-factory>
</hibernate-configuration>
4. 创建一个测试类TestMain
package com.LHB.view; import java.util.Date; import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session; import com.LHB.domain.Employee;
import com.LHB.util.MySessionFactory; public class TestMain { public static void main(String[] args) {
// TODO Auto-generated method stub updateEmp();
//addEmployee();
}
/**
* 删除用户
*/
private static void delEmp() {
//删除
//获取一个session
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
try {
//修改1.先获取该雇员,然后删除
Employee employee=(Employee) session.load(Employee.class, new Integer(3));
session.delete(employee);
transaction.commit();
session.close(); }catch (Exception e) {
if(transaction!=null) {
transaction.rollback();
} throw new RuntimeException(e.getMessage());
} finally {
//关闭session
if(session!=null&&session.isOpen()) {
session.close();
} }
}
/**
* 更新用户
*/
private static void updateEmp() {
//修改用户
//获取一个会话
/*Session session = MySessionFactory.getSessionFactory().openSession(); Transaction transaction = session.beginTransaction();
//修改用户1.获取要修改的用户,2.修改
//load是可以通过主键属性,获取该对象实例,《----》表的记录对应
Employee employee = (Employee)session.load(Employee.class, new Integer(3));
employee.setName("张三");
transaction.commit();
session.close();
*/
//添加事务回滚优化之后
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
//do...
Employee employee = (Employee)session.load(Employee.class, new Integer(1));
//用户指定id号
//employee.setId(new Integer(100));
employee.setName("李四");
employee.setEmail("lisi@sohu.com"); /*//异常
int i=9/0;
//....
*/ transaction.commit(); }catch (Exception e) {
if(transaction!=null) {
transaction.rollback();
} throw new RuntimeException(e.getMessage());
} finally {
//关闭session
if(session!=null&&session.isOpen()) {
session.close();
} } }
/**
* 添加用户
*/
public static void addEmployee() {
//使用hibernate完成crud操作
//现在不使用service,直接测试
//1.创建Configuration,该对象用于读取hibernate.cfg.xml并完成初始化
Configuration configuration = new Configuration().configure();
//2.创建SessionFactory【这是一个会话工厂,是一个重量级的对象】
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.创建Session,相当于jdbc中的Connection
Session session = sessionFactory.openSession();
//4.对于hibernate,要求在进行增加,删除,修改的时候使用事物提交
Transaction transaction = session.beginTransaction(); try { //添加一个雇员
Employee employee = new Employee();
employee.setName("zhangsan");
employee.setEmail("zhangsan@126.com");
employee.setHiredate(new Date()); //保存,把对象保存到数据库
session.save(employee);//相当于insert into....[被hibernate封装]
transaction.commit();
session.close(); }catch (Exception e) {
if(transaction!=null) {
transaction.rollback();
} throw new RuntimeException(e.getMessage());
} finally {
//关闭session
if(session!=null&&session.isOpen()) {
session.close();
} }
} }
hibernate添加数据入门小案例的更多相关文章
- Hibernate的介绍及入门小案例
1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...
- 02SpringMvc_springmvc快速入门小案例(XML版本)
这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:
- spring boot入门小案例
spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...
- React.js入门小案例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- php+mysql简单的添加和删除小案例
1.分析 index.php是呈现列表,通过点击列表页上的添加和删除按钮,对列表页上面的进行操作 index.php TODO:要将数据库里面的内容呈现到页面中 (1)连接数据库 (2)查询数据 (3 ...
- HIBERNATE 入门小案例
刚刚开始肯定好多人都会问什么是hibernate呢? 那么下面我们就来了解一下什么事hibernate吧! 首先,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对 ...
- hibernate添加数据,默认字段为null的问题解决
数据库中的一个字段默认为0,但是在用hibernate的添加之后,默认字段竟然不是0,为NULL. 查了一下.发现想要让默认字段生效.需要在*.hbm.xml添加一些参数,如下.(红色部分) dyna ...
- Spring中AOP的初窥和入门小案例
AOP:面向切面编程 AOP的主要作用:是为了程序员更好的关注"业务",专心"做事" 加上双引号的意思:所谓业务,是指他的核心,各行业中需要处理的核心事务,核心 ...
- SSM-Spring-03:Spring中AOP的初窥和入门小案例
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AOP:面向切面编程 AOP的主要作用:是为了程序员更好的关注"业务",专心"做 ...
随机推荐
- cocoapods 无法 升级 repo 无法执行pod install命令
首先MAC自带了ruby,他是用rvm 管理的, 如果你用homebrew又安装了一个新版,很可能在升级cocoapods时遇到问题,明明自己用homebrew升级到最新版本了,页配置环境变量了,为什 ...
- 优化网站设计(二):使用CDN
前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...
- [daily][qemu][libvirt] 使用libvirt管理qemu
别人创建的虚拟机.用libvirt做的配置. 我一直是手写qemu脚本的,不会用virtsh,所以,学一下. ------------------ 先来个arch的文档: https://wiki.a ...
- iOS,添加阴影
self.layer.shadowOpacity = 0.5f; // 0.8深 0.3淡 shadowOpacity数值越大,阴影越浓
- 【PyQt5-Qt Designer】QLineEdit 文本输入
QLineEdit 文本输入 一.QlineEdit 基本方法 setAlignment() 按固定值方式对齐文本 Qt.AlignLeft:水平方向靠左对齐 Qt.AlignRight:水平方向靠右 ...
- 那些年读过的书《Java并发编程实战》二、如何设计线程安全类
1.设计线程安全类的过程 设计线程安全类的过程就是设计对象状态并发访问下线程间的协同机制(在不破坏对象状态变量的不变性条件的前提下). (1)构建线程安全类的三个基本要素: 1)找出构成对象状态的所有 ...
- ubuntu14.04下开启ssh服务
1. 安装 sudo apt-get update sudo apt-get install openssh-server 2.开启服务 查看查看ssh服务是否启动 打开"终端窗口" ...
- spring学习(01)之IOC
spring学习(01)之IOC IOC:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创 ...
- 怎么使用JavaScript进行进制转换
JS 是一个很神奇的语言,内制的的很多函数可以帮我们进行数(进)制转换: JS中可以直接使用16进制: var a = 0xff; //255 将任意进制字符串转换为十进制,如二进制,八进制,十六进制 ...
- finecms在任意页面调用栏目名称和地址等
finecms如何调用栏目名称和地址呢?在任意页面.我们有时需要在不同的页面调用某个栏目名,怎么调用比较快呢?ytkah整理了一些快速调用语句方便查找 栏目名称:{dr_cat_value(栏目id, ...