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的主要作用:是为了程序员更好的关注"业务",专心"做 ...
随机推荐
- gitignore 不起作用的解决办法
gitignore 不起作用的解决办法 - sloong - 博客园 https://www.cnblogs.com/sloong/p/5523244.html Administrator@PC-20 ...
- 【未完待续】API接口
1.json传输 2.安全:权限 http://blog.csdn.net/linlzk/article/details/50748580. 比如:调用端有userId.psw.version.ti ...
- iOS-方法之+ initialize 与 +load
Objective-C 有两个神奇的方法:+load 和 +initialize,这两个方法在类被使用时会自动调用.但是两个方法的不同点会导致应用层面上性能的显著差异. 一.+ initialize ...
- isprime_判断质数
判断质数的方法有很多,首先是最简单的试除法,判断n以内的质数的话时间复杂度为n*sqrt(n)当然是很慢的了 下面提供三种判断质数的方法: 首先是跑5051ms的这个是埃拉托斯特尼筛法 且不加优化 核 ...
- el表达式获取对象属性值 返回值类型
实现 数字页码时 遇到的一个问题. 后端servlet 在request.setAttribute("page",page); page 为pagebean的实例对象,pagebe ...
- 【PyQt5-Qt Designer】按钮系列
[PyQt5-Qt Designer]按钮系列 复选框(QCheckBox) 效果如下: 参考: https://zhuanlan.zhihu.com/p/30509947 完整代码: from Py ...
- pyinstaller-打包python程序为exe文件
pyinstaller ---转载文章 视频:https://www.bilibili.com/video/av21670971/ PyInstaller可以用来打包python应用程序,打包完的程序 ...
- Redis分布式锁服务(转)
原文:http://www.cnblogs.com/mushroom/p/4752499.html 概述 在多线程环境下,通常会使用锁来保证有且只有一个线程来操作共享资源.比如: object obj ...
- c#中base64编码解码
//编码: byte[] bytes = Encoding.Default.GetBytes("要转换的字符"); string str = Convert.ToBase64Str ...
- JavaWeb学习总结——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...