学习日记(二)Hibernate用法:针对数据库表数据的增加,查询,更新,删除

一、首先要搞定配置文档:

1、hibernate.cfg.xml;2.struts.xml;3.web.xml;4.XXX.hbm.xml


最主要的是配置hibernate.cfg.xml,位置必须与src同一路径,并且是src下的第一子菜单中,也就是打开src就能看到他,和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>
	<property name="dialect">
        	org.hibernate.dialect.MySQLDialect</property>		<!-- 数据库方言 -->
    <property name="connection.url">
        	jdbc:mysql://192.168.4.139:3306/test</property><!-- 数据库连接URL -->
    <property name="connection.username">leo</property>	<!-- 数据库用户名 -->
    <property name="connection.password">cicdata</property>	<!-- 数据库用户密码 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>	<!-- 数据库驱动类 -->
	<property name="show_sql">true</property>
	<mapping resource="com/sterning/books/model/books.hbm.xml"></mapping>
	
	
</session-factory>
</hibernate-configuration>




二、增添数据:

首先你要创建要创建表的属性值,并配置其.hbm.xml文档。

Books.java

package com.sterning.books.model;

public class Books {
	// Fields
	private int bookId;// 编号
	private String bookName;// 书名

	public int getBookId() {
		return bookId;
	}

	public void setBookId(int bookId) {
		this.bookId = bookId;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

}
books.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.sterning.books.model.Books" table="LEARN_FRAME" >
		 <id name="bookId" type="java.lang.Integer">
            <column name="ID" length="5" />
            <generator class="assigned" />
        </id>
		<property name="bookName" type="java.lang.String">
            <column name="NAME" length="100" />
        </property>
     </class>
</hibernate-mapping>

三、更新和删除数据

如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据,例如:

package com.sterning.bean.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sterning.books.model.Books;

public class TestUpdate {

	private static Object updated;

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		SessionFactory sFactory=new Configuration().configure().buildSessionFactory();
		org.hibernate.classic.Session session=sFactory.openSession();
		
		
		java.util.List books=session.find("from Books");
		for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
			Books book = (Books) iterator.next();
			if(updated == null)
			updated = book;  
			System.out.println(
			"\n\tID: " + book.getBookId()+
			"\n\tNAME: " + book.getBookName());
			}
		
		((Books) updated).setBookName("Jesse");
		session.flush();
		books = session.find("from Books");   
		session.close(); 
		sFactory.close();
		for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
		Books book = (Books) iterator.next();            
		System.out.println(book.getBookName() +
				"\n\tID: " + book.getBookId()+
				"\n\tNAME: " + book.getBookName());
		} 
		
	}

}

这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下:

Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_

	ID: 2
	NAME: 哈哈

	ID: 4
	NAME: 哈哈

	ID: 5
	NAME: 254534

	ID: 6
	NAME: 2534
Hibernate: update LEARN_FRAME set NAME=? where ID=?
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
INFO - closing
INFO - cleaning up connection pool: jdbc:mysql://192.168.4.139:3306/test
Jesse
	ID: 2
	NAME: Jesse
哈哈
	ID: 4
	NAME: 哈哈
254534
	ID: 5
	NAME: 254534
2534
	ID: 6
	NAME: 2534

如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下:

HibernateTest.java

import onlyfun.caterpillar.*; import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; import java.util.*; public class HibernateTest { public static void main(String[] args) throws HibernateException { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession();     List users = session.find("from User"); // 关闭这个Session session.close(); User updated = null; for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next(); if(updated == null) updated = user; System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); } // 使用者作一些操作,之后储存 updated.setName("caterpillar"); // 开启一个新的Session session = sessionFactory.openSession();   // 更新数据 session.update(updated); users = session.find("from User");      session.close(); sessionFactory.close(); for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { User user = (User) iterator.next();            System.out.println(user.getName() + "\n\tAge: " + user.getAge() + "\n\tSex: " + user.getSex()); }       } }

这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL:

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex,

ser0_.age as age from USER user0_ justin Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F Hibernate: update USER set name=?, sex=?, age=? where user_id=? Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex,

ser0_.age as age from USER user0_ caterpillar Age: 28 Sex: M momor Age: 25 Sex: F Bush Age: 25 Sex: M Becky Age: 35 Sex: F

Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新:

User.hbm.xml

unsaved-value

可以设定的值包括:

◆any - 总是储存
◆none - 总是更新
◆null - id为null时储存(预设)
◆valid - id为null或是指定值时储存
 
这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。
 
如果要删除数据,只要使用delete()方法即可,直接看个例子。

package com.sterning.bean.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sterning.books.model.Books;

public class TestDel {

	private static Object updated;

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		SessionFactory sFactory=new Configuration().configure().buildSessionFactory();
		org.hibernate.classic.Session session=sFactory.openSession();
		
		
		java.util.List books=session.find("from Books");
		for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
			Books book = (Books) iterator.next();
			if(updated == null)
			updated = book;  
			System.out.println(
			"\n\tID: " + book.getBookId()+
			"\n\tNAME: " + book.getBookName());
			}
		
		session.delete(updated);
		books = session.find("from Books");   
		session.close(); 
		sFactory.close();
		for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
		Books book = (Books) iterator.next();            
		System.out.println(book.getBookName() +
				"\n\tID: " + book.getBookId()+
				"\n\tNAME: " + book.getBookName());
		} 
		
	}

}


一个执行的结果范例如下:

Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_

	ID: 2
	NAME: Jesse

	ID: 4
	NAME: 哈哈

	ID: 5
	NAME: 254534

	ID: 6
	NAME: 2534
Hibernate: delete from LEARN_FRAME where ID=?
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
INFO - closing
INFO - cleaning up connection pool: jdbc:mysql://192.168.4.139:3306/test
哈哈
	ID: 4
	NAME: 哈哈
254534
	ID: 5
	NAME: 254534
2534
	ID: 6
	NAME: 2534


Hibernate对于数据的更新、删除等动作,是依赖id值来判定,如果您已知id值,则可以使用load()方法来加载资料。


部分参考 51CTO.com


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个项目为公司开发的一个商业项目,当时团队研发从需求分析阶段到代码的实现和维护经过了时长4个多月的时间才完成的,因此这个项目是花费了大量的人力和物力才完成的.因此要下载此项目源码的读者必须用10积分才能下载,希望读者能理解.也希望你能从这个代码中能够很好的利用它. 注:里面的数据库文件都放在datebase目录下.(由于此处描述不支持图片功能,因此不能很好的展示效果图)希望读者见谅,读者可以在index.jsp文件里查看视图.下面是项目的功能简介: 基于Struts2+Hibernate+Spring+MySQL的信通B2C网站管理系统信通购物网 采用当前最流行的技术平台,Struts2+Hibernate+Spring+MySQL。 1、首页:增加动态效果,产品分类栏目,首页广告,网站公告; 2、会员功能:注册会员,修改会员资料; 登录系统后可以选购商品,放入购物车(修改购物数量、删除购物车里的内容),继续购物,最后确认下订单,在线支付所选商品所选商品所需支付的金额; 3、产品展示带导航功能; 4、新闻频道功能:最新新闻,新闻列及页面显示。 后台 1、会员管理:会员的审核,删除; 2、分类管理:一级分类的添加、删除、修改,; 3、产品管理:产品的添加、修改、删除; 4、订单管理:订单的查看,处理(是否发货,是否付款)。 5、新闻管理:新闻的添加、删除、修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值