hibernate 增删改查小测试

好久没有敲过了,来熟悉下hibernate,做了个小测试。

  1. 测试项目结构图,关于导入jar包,可以参考 http://zhuws.blog.51cto.com/11134439/1932652

2.hibernate.cfg.xml 配置

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.username">ssh</property>
        <property name="hibernate.connection.password">ssh</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property>
        
        <!-- 方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <!-- 可视化sql -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化sql,自动对可视化sql换行,对齐 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 为getCurrentSession添加配置,保证事务中公用义个session -->
       <property name="current_session_context_class">thread</property>
        
        <!-- 映射文件配置 -->
        <mapping resource="User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

3.User.hbm.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>

	<!-- name:是实体   table是表名称 -->
	<class name="com.hib.entity.Users" table="TEST_USER">
		<id name="id">
			<!-- 主键自增策略,hibernate提供了几种,这里测试,先写一个,后面会补充 -->
			<!-- 
				increment:主键自增策略
			 -->
			<generator class="increment"></generator>
		</id>

		<!-- name:是实体中属性的名称,column:是表中字段的名称,type是数据类型 
			在这里发现后面的 pass和 address 没有写column和type
			如果表字段和实体属性名称一致,可以省略不写
		-->
		<property name="name" column="name" type="java.lang.String"/>
		<property name="pass"/>
		<property name="address"/>
	</class>

</hibernate-mapping>

4. 实体类Users

package com.hib.entity;

public class Users {
	private Integer id;
	private String name;
	private String pass;
	private String address;
	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 getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Users(Integer id, String name, String pass, String address) {
		super();
		this.id = id;
		this.name = name;
		this.pass = pass;
		this.address = address;
	}
	public Users() {
		super();
	}
	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + ", pass=" + pass + ", address=" + address + "]";
	}

}

5. 建表,这里只是测试,所以类型长度就不要在意了。

6.userDao

package com.hib.userDao;

import com.hib.entity.Users;

public interface UserDao {
	// 根据用户id查询用户信息
	public Users queryUserById(Integer id);
	// 插入用户
	public void insertUser(Users user);
	// 删除用户
	public void deleteUser(Integer id);
	// 更新用户数据
	public void updateUser(Users user);
}

7.userDaoImpl

package com.hib.userDao.impl;

import org.hibernate.Session;

import com.hib.entity.Users;
import com.hib.userDao.UserDao;
import com.hib.util.HibUtil;

public class UserDaoImpl implements UserDao{

	// 根据用户ID查询
	@Override
	public Users queryUserById(Integer id) {
		Session session = HibUtil.getSession();
		Users users = session.get(Users.class, id);
		return users;
	}

	// 插入数据
	@Override
	public void insertUser(Users user) {
		Session session = HibUtil.getSession();
		session.save(user);
	}

	// 根据ID 删除
	@Override
	public void deleteUser(Integer id) {
		Session session = HibUtil.getSession();
		Users users = session.get(Users.class, id);
		session.delete(users);
	}

	// 更新
	@Override
	public void updateUser(Users user) {
		Session session = HibUtil.getSession();
		session.update(user);
	}
}

8.userService

package com.hib.services;

import com.hib.entity.Users;

public interface UserServices {
	// 根据用户id查询用户信息
		public Users queryUserById(Integer id);
		// 插入用户
		public void insertUser(Users user);
		// 删除用户
		public void deleteUser(Integer id);
		// 更新用户数据
		public void updateUser(Users user);
}

9.userServiceImpl

package com.hib.services.impl;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hib.entity.Users;
import com.hib.services.UserServices;
import com.hib.userDao.UserDao;
import com.hib.userDao.impl.UserDaoImpl;
import com.hib.util.HibUtil;

public class UserServicesImpl implements UserServices{
	private UserDao ud = new UserDaoImpl();

	@Override
	public Users queryUserById(Integer id) {
		Session session = null;
		Transaction tx = null;
		Users user = null;

		try {
			session = HibUtil.getSession();
			tx = session.beginTransaction();
			user = ud.queryUserById(id);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException("查询出错!");
		}
		return user;
	}

	@Override
	public void insertUser(Users user) {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibUtil.getSession();
			tx = session.beginTransaction();
			ud.insertUser(user);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException("插入错误!");
		}
	}

	@Override
	public void deleteUser(Integer id) {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibUtil.getSession();
			tx = session.beginTransaction();
			ud.deleteUser(id);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException("删除错误!");
		}
	}

	@Override
	public void updateUser(Users user) {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibUtil.getSession();
			tx = session.beginTransaction();
			ud.updateUser(user);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException("更新错误!");
		}
	}

}

10.util 工具类

package com.hib.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * 
 * @author admin
 *	生产session
 */
public class HibUtil {
	private static Configuration cfg = new Configuration().configure();
	private static SessionFactory factory = cfg.buildSessionFactory();

	public static Session getSession(){
		return factory.getCurrentSession();
	}
	public static Session openSession(){
		return factory.openSession();
	}
}

11.测试

package com.hib.test;

import org.junit.Test;

import com.hib.entity.Users;
import com.hib.services.UserServices;
import com.hib.services.impl.UserServicesImpl;

public class TestUser {
	private UserServices us = new UserServicesImpl();

	// 插入数据
	@Test
	public void insert(){
		us.insertUser(new Users(null, "小李飞刀", "xlfd", "china"));
	}
	// 测试查询
	@Test
	public void query(){
		Users users = us.queryUserById(1);
		System.out.println(users);
	}
	// 更新
	@Test
	public void update(){
		us.updateUser(new Users(1, "小李飞刀他妈", "xlfdtm", "AAAAA"));
	}
	// 删除
	@Test
	public void delete(){
		us.deleteUser(1);
	}
}

12. dao 是和数据打交道

service 是控制业务,事务,实际开发业务就是在这里写

注意: 这里用的数据库是oracle,测试时候,需要在hibernate.cfg.xml 中把数据库名称和密码修改为自己的。

时间: 2024-10-26 02:19:40

hibernate 增删改查小测试的相关文章

肝 hibernate 配置and增删改查 and 测试

已经通宵三天撸代码了,现在的我已经养成晚上修仙写代码的节奏了.....最近 刚刚复习到了 hibernate 谈谈 这篇文章就谈谈我对这货的理解吧. 在看这篇文章之前希望你 知道sessionfactory 和session 还有 transaction(事物) 诶嘿不造的可以去看看http://blog.csdn.net/u012377333/article/details/48086193  OK正题开始 步骤 我们需要一个可以持久化的bean类 还有它的附属映射 hbm.xml文件 以及d

Java_Web三大框架之Hibernate增删改查

下面介绍一下Hibernate的增删改查. 第一步:编写用户实体类以及User.hbm.xml映射 package com.msl.entity; public class User { private int id; private String name; private String password; private String telephone; private String username; private String isadmin; public User() { } p

hibernate课程 初探单表映射3-5 hibernate增删改查

本节简介: 1 增删改查写法 2 查询load和查询get方法的区别 3 demo 1 增删改查写法 增加 session.save() 修改 session.update() 删除 session.delete() 查询 session.get()/session.load() 2 查询load和查询get方法的区别 a get 不考虑缓存情况下,get会在调用之后立即向数据库发送sql语句,返回持久化对象.load 是调用后返回代理对象,该代理对象只保存实体对象id,只有使用对象非主键属性才

TP5学习基础一:增删改查小demo

①TP5--增删改查简单的demo 我先吐槽一下:因为工作需要研究tp5,去官网看了一下哎呦,资源挺多挺全啊!然后下载唯一免费的官方教程,我曹pdf打开533页.讲的很细但是开发能等看完才做吗?看到精简版快速入门的还软妹币20试读3章.寻思找个demo案例吧,要不加群拿源码,要不视频教程收费.特喵的框架是开源的但是教程是收费的.寻思去论坛看看问题,不是我喷好多技术小白的问题,我想看看怎么获取传参传值,泥煤那个系统变量是什么鬼?挣扎了3个小时我放弃了官网.在度娘上找到一个demo,吭哧吭哧啃完.一

JDBC增删改查简单测试

首先编写一个entity以便与数据库表文件相对应 lyTable.java public class LyTable implements java.io.Serializable { private Integer id; private Integer userId; private Date date; private String title; private String content; public Integer getId() { return id; } public voi

基于maven+ssm的增删改查之测试相关ssm环境是否成功

接上一节. 1.首先我们在com.gong.curd.controller中新建EmployeeController.java(我们使用分页技术) package com.gong.curd.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import

ADO.net 增删改查小练习

练习题:1.查询显示2.请输入你想要做的操作(1:添加,2:删除,3:修改):3.提示用户操作是否成功,刷新数据,回到2等待用户操作 建表: 1 create database ADOlianxi0425 2 go 3 use ADOlianxi0425 4 go 5 create table student 6 ( 7 code int primary key identity(100,1), 8 name nvarchar(50), 9 sex char(5), 10 birthday da

对hibernate增删改查总结

(1)Hql 更新 A. 注意这里是部分更新.如果直接进行更新session.update(js);将会默认更新所有的字段.设置更新的字符时,采用的是下标(0,1,2,3)的形式. @Override public void upadteJS(BJs js) { BJs是类 String hql = "update BJs js set  js.jsxm=?,js.jsztbm=?, js.xlbm=?,js.xwbm=?,js.zcbm=?,js.bmbm=? where js.jsbh =?

Hibernate下的增删改查

概述: 关系--对象映射的中间件,属于开源ORM框架,是我们业务逻辑层中的调用数据库的中间件 演变: jdbc---hibernater---mybatis hibernate和mybatis区别? 1:hiberanter学习的难度要比mybatis要大,复杂度要高 2:hibernate不需要写sql语句,自动生成,而mybatis需要写sql语句进行数据操作 3:hibernate支持分页(API),而mybatis不支持分页(那是属于插件) 4:hibernate支持事务处理,而myba