hibernate基础增删查改简单实例
hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子
建一个web-project
我这里用了junit单元测试环境来进行增删查改的测试,别的不多说,导包就行
本次用到的所有jar包下载地址:
链接:http://pan.baidu.com/s/1skHrg0t 密码:dbe2
1、hibernate配置文件(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>
<!--数据库URL -->
<property name="connection.url">
jdbc:oracle:thin:@127.0.0.1:1521:orcl
</property>
<!--数据库用户 -->
<property name="connection.username">rent</property>
<!--数据库用户密码 -->
<property name="connection.password">rent</property>
<!--数据库JDBC驱动 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<!--每个数据库都有其对应的Dialect以匹配其平台特性 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<!--是否将运行期生成的SQL输出到日志以供调试 -->
<property name="show_sql">true</property>
<!--是否格式化SQL -->
<property name="format_sql">true</property> <mapping resource="com/cn/entity/User.hbm.xml" /> </session-factory> </hibernate-configuration>
2、映射文件(User.hbm.xml),主要是对象一表的映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.cn.entity.User" table="users" >
<id name="id" column="id" type="java.lang.Integer">
<!-- 主键的生成策略 -->
<generator class="assigned"/>
</id>
<property name="name" type="java.lang.String" column="name"/>
<property name="password" type="java.lang.String" column="password"/>
<property name="telephone" type="java.lang.String" column="telephone"/>
<property name="username" type="java.lang.String" column="username"/>
<property name="isadmin" type="java.lang.String" column="isadmin"/> </class>
</hibernate-mapping>
<!--
class ==== 表
对象 =====一行数据
属性 ===== 列
属性的类型 ==== 列的类型 -->
3、我的数据库表结构。这里表结构与实体类中属性的名称和类型要保持一致
4、实体类(User.java)
package com.cn.entity; import java.io.Serializable; public class User implements Serializable {
private Integer id;
private String name;
private String password;
private String telephone;
private String username;
private String isadmin;
public User(Integer id, String name, String password, String telephone,
String username, String isadmin) {
super();
this.id = id;
this.name = name;
this.password = password;
this.telephone = telephone;
this.username = username;
this.isadmin = isadmin;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIsadmin() {
return isadmin;
}
public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
} }
重要的事再说一遍:为避免以后可能遇到的问题和麻烦,强烈要求实体类属性和类型与数据库表中字段名称和类型保持一致。实体类中的类型用包装类的类型
5、建junit测试环境:新建junit文件
帖代码:
package com.cn.test; import static org.junit.Assert.*; import java.io.Serializable; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.cn.entity.User; public class TestHibernate { @Test
public void add() {
// 读取配置文件
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
// 得到当前连接数据库的session
Session session = factory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
try {
User user = new User(15, "liujuan1", "123456", "13610249898",
"admin", "yes");
Serializable id = session.save(user); if (id != null) {
System.out.println("新增成功!");
tx.commit();// 提交事务
} else {
tx.rollback();// 失败回滚
} } catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
} @Test
public void select() {
// 读取配置文件
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
// 得到当前连接数据库的session
Session session = factory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
try {
// 查询get
User user = (User) session.get(User.class, 15);
System.out.println("查询结果:" + user.getName());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
} @Test
public void update() {
// 读取配置文件
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
// 得到当前连接数据库的session
Session session = factory.openSession();
// 开启事务
Transaction tx = session.beginTransaction();
try {
// 第1种:update持久化修改:先查询,与数据库有关联
/* User user = (User) session.get(User.class, 15);
user.setName("duheyu");
user.setPassword("duheyu");
session.update(user);
tx.commit();*/ //第2种:瞬时状态下修改,会set全部字段,不修改的字段全部清空了
/*User user =new User();
user.setId(15);
user.setName("duxinke");
user.setPassword("duxinke");
session.update(user);
tx.commit();*/ //第3种,新增或修改,拿瞬时状态来测试
User user =new User();
user.setId(15);
user.setName("duxinke");
user.setPassword("duxinke");
session.saveOrUpdate(user);
tx.commit(); } catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
} @Test
public void delete(){
//读取并解析配置文件hibernate.cfg.xml
Configuration config=new Configuration().configure();
//读取并解析映射信息,User.hbm.xml,创建SessionFactory
SessionFactory factory = config.buildSessionFactory();
//打开一个连接数据库的Session
Session session = factory.openSession();
//开始一个事务,增删除查改操作必须有,查询操作可选
Transaction tx =session.beginTransaction();
//执行操作,都是用当前Session执行
try {
User user =new User();
user.setId(15);
session.delete(user);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
}
} }
本次是以帖代码为主,不讲原理,如果你懂一点,看的话,会非常容易上手做项目。我做东西就是的,原理似懂非懂,上网搜代码,下来改改,就能用了。还好我的环境对代码质量和性能要求不是太严格。一切以工具能运行即可。
hibernate基础增删查改简单实例的更多相关文章
- Django笔记&教程 5-1 基础增删查改
Django 自学笔记兼学习教程第5章第1节--基础增删查改 点击查看教程总目录 第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表. 这一章将介绍如何使用模 ...
- Dapper基础增删查改、事务和存储过程
1.前言 Dapper是一个轻量级的orm框架,上手也非常的简单,它可以实体映射,所以先准备实体如下: public class Couser { public int id { get; set; ...
- [Hibernate] 基本增删查改
本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD. 本例子的目录结构如下 hibernate.cfg.xml 存储数据库信息,如数据库类型,账 ...
- mysql入门基础增删查改
数据查询语法(DQL) DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ F ...
- Yii框架基础增删查改
返回一条数据 Country::find()->one(); 返回所有数据 Country::find()->all(); 返回记录的数量 $country =Country::find( ...
- backbonejs mvc框架的增删查改实例
一:开发环境 coffeescript和nodejs需要先安装,没装网上自己查安装步骤. 代码编写环境及esp框架下载: esp框架下载地址:https://github.com/nonocast/e ...
- Java连接MySQL数据库及简单的增删查改操作
主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- nodejs连接mysql并进行简单的增删查改
最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...
随机推荐
- jQuery api 快速参考[转]
选择符 匹配 * 所有元素 #id 带有给定ID的元素 element 给定类型的所有元素,比如说html标签 .class 带有给定类的所有元素 a,b 匹配a或者匹配b的元素 a b 作为a后代的 ...
- Ext.Net-Grid 篇
概述 前两篇分别介绍了Ext.NET-基础 和 Ext.NET-布局,从本篇开始我们尽量做一些实际工作中用到的例子. 在Ext.NET官方示例中,关于GridPanel的例子是最多的(近百个),篇幅所 ...
- canvas 2d 贴图技术实践
最近在公司内部的技术协会论坛里闲逛的时候,无意中发现了一篇手淘前端大牛岑安两年前写的博文,讲述了canvas的2d贴图技术.看到后觉得相当神奇.于是就自己实现了一下.不过岑安前辈的那篇博文也只是大概讲 ...
- [转]acm忠告
多做难题 如果你去问那些牛人“这道题你是怎么想到要用XXX方法的”,我估计大部分人都说不出个所以然来.其实很多情况下都是纯凭直觉考虑到的数个思维方向,这种直觉是需要大量的练习来得到的,没有那么多“为什 ...
- hiho一下 第六十四周 Right-click Context Menu
题目链接:hihocoder 第64周 题意概述: 上下文菜单是panel(面板)包括很多section(分区),一个分区里面至少包含一个菜单项.每一个菜单项都对应有一个子panel,这个panel可 ...
- Centos|RHEL7以前解决网卡eth0相关问题
网络-网络-有网才有络络,哈哈!学习在于不断记录,问题记录多了就成大牛了.当大牛达到一定层次,都会回馈社会.研发推出新的东东! CentOS找不到ifcfg-eth0解决方法 问题描述: ifconf ...
- Intent和Intent Filters
什么是Intent Intent是android开发中的重要对象,它作为一个信息承载对象存在. 我们可以在使用其他一些组件的时候从Intent获取行为响应的准则(即应该做什么东西,如何 ...
- MySQL数据库my.cnf性能参数如何调优
提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件.配置文件可以到这里下载:: 下载my.cnf [client] port = 3306 socket = /tmp/mys ...
- org.apache.commons.lang3.ArrayUtils 学习笔记
package com.nihaorz.model; /** * @作者 王睿 * @时间 2016-5-17 上午10:05:17 * */ public class Person { privat ...
- 51nod 1352 扩展欧几里德
给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足:第一个元素是A的倍数且第二个元素是B的倍数. 提示: 对于第二组测试数据,集合分别 ...