【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写。而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门。毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写。上次那篇《【Hibernate】最简单的Hibernate工程——账号注册系统》(点击打开链接)杂糅Struts的技术其实是不对的。因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务。之后Java与Jsp前台页面的交互任务交给Struts完成就好了。因此,只要利用一个Java工程就足以说明Hibernate的问题。你不大了甚至还可以把Hibernate看作,只是一个类似Qrcode.lib二维码处理的《【Java】利用Java对网址进行二维码的编码与解码操作》(点击打开链接)的一个Java插件。放好jar文件,Hibernate就足以开始工作了。


一、基本目标

在Mysql数据库中存在着一张如下图的usertable表:

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第1张图片

里面一开始的数据如下:


经历完把aaa,bbb插入到testtable表中,把testtable表中id=1的Username改成ccc,删除username=ccc,number=bbb那些项三个操作之后,数据如下:

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第2张图片


二、基本准备

1、这东西本来一个简单的,到网上搜一下就有的mysql-connector-java-5.1.32.jar,配合SQL就能够完成的,具体见《【Mysql】Java中对Mysql数据库的增删改查、Java的System类》(点击打开链接),但现在人人都用Hibernate你也不得不学,先要到Hibernate的官网(点击打开链接)如下图,下载Hibernate的最新版本,国外网站,速度就这样,也可以用下载工具下载如下的网址(点击打开链接)

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第3张图片

2、在Eclipse新建一个Java工程HibernateTest,注意是Java工程,不是JavaWeb工程!打开这个Java工程的在你的电脑下的目录,在src下面新建一个hibernate.cfg.xml在里面写入如下东西,注意修改你该修改的东西。

<?xml version="1.0" encoding="UTF-8"?>
<!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">com.mysql.jdbc.Driver</property>
		<!--所用的数据库登陆密码  -->
		<property name="hibernate.connection.password">root</property>
		<!--所用的数据库名称为test,根据实际更改 -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
		<!--所用的数据库用户名  -->
		<property name="hibernate.connection.username">root</property>
		<!--所用的数据库方言,与所用数据库驱动一样,可以在网上查到,这里是mysql -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
		<property name="hibernate.format_sql">true</property>
		<!--如果是update表明Hibernate将保留原来的数据记录,插入时把新记录添加到已有的表,-->
		<!--如果是create,则总是创建新的表,如果原来数据库已有的这个表,则这个表的记录会被全部清洗  -->
		<property name="hibernate.hbm2ddl.auto">update</property>
	</session-factory>
</hibernate-configuration>

3、打开这个Java工程的在你的电脑下的跟目录,在里面新建一个lib文件夹。把下载之后的hibernate-release-4.3.8.Final解压,hibernate-release-4.3.8.Final\lib\required下面的所有lib文件,拷贝到Java工程下面的lib文件夹。这次真的是required下面的所有lib了,不像上次《【Struts2】Struts2纯手工安装、配置以及Helloworld,以最新版struts 2.3.20 GA做例子》(点击打开链接)那样,多拷了就跑不起来。在把到网上搜一下就有的mysql-connector-java-5.1.32.jar也放进去lib里面。此时Java工程下的lib文件夹如下图:

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第4张图片

4、先刷新一下Eclipse的HibernateTest,具体是,右键这个工程,选择刷新

5、之后再于eclipse导入lib包,如下图,右击Java工程HibernateTest选择属性->Java Build Path->Add Jars,选择HibernateTest下的所有JAR文件导入即可。


这就完成了Hibernate的基本配置。


三、制作过程

1、Hibernate就是把数据库testtable整张表拿进Java,然后再让你慢慢操作的。首先要把testtable拿进Java,在src下面之间创建一个Testtable如下,

import javax.persistence.*;

@Entity
@Table(name="testtable")
public class Testtable {
	private int id;
	private String username;
	private String number;
	//表示主键与自动生成项
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Column(name = "username")
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@Column(name = "number")
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}	
	

}

这个Testtable.java是与表的结构是对映的:

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第5张图片

表中有多少列,它就应该有多少个静态成员变量,同时必须要有相应的getter与setter,这种Annotation的方式,不同于以往的要多建立一个xml的文件的方式,简单快捷。

为了使这个映射文件生效,还在hibernate.cfg.xml需要补充多一句话<mapping class="Testtable" />,如下图:

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查_第6张图片

2、最后,才是我们真正的执行文件Test.java

import java.util.*;

import org.hibernate.*;
import org.hibernate.cfg.*;
public class Test {

	public static void main(String[] args) {
		//这里是所谓的建立事务
		Session session=new Configuration().configure().buildSessionFactory().openSession();
		Transaction transaction=session.beginTransaction();
        Testtable Testtable=new Testtable();
        List<Testtable> list = new ArrayList<Testtable>();
		System.out.println("此时的Testtable表:");
        list=session.createQuery("from Testtable").list();
        for(int i=0;i<list.size();i++){
        	System.out.println(list.get(i).getId()+","+list.get(i).getUsername()+","+list.get(i).getNumber());
        }
        System.out.println("========取出Testtable表第2项==========");        
		Testtable=(Testtable)session.get(Testtable.class, 2);
		System.out.println(Testtable.getId()+","+Testtable.getUsername()+","+Testtable.getNumber());
        System.out.println("=========把aaa,bbb插入到Testtable表中=========");  
		Testtable=new Testtable();
		Testtable.setUsername("aaa");
		Testtable.setNumber("bbb");
		session.save(Testtable);
		System.out.println("此时的Testtable表:");
        list=session.createQuery("from Testtable").list();
        for(int i=0;i<list.size();i++){
        	System.out.println(list.get(i).getId()+","+list.get(i).getUsername()+","+list.get(i).getNumber());
        }
        System.out.println("=============把Testtable表中id=1的Username改成ccc=================");
        list=session.createQuery("from Testtable where id=1").list();
        for(int i=0;i<list.size();i++){
        	list.get(i).setUsername("ccc");
        	session.save(list.get(i));
        }
        System.out.println("此时的Testtable表:");
        list=session.createQuery("from Testtable").list();
        for(int i=0;i<list.size();i++){
        	System.out.println(list.get(i).getId()+","+list.get(i).getUsername()+","+list.get(i).getNumber());
        }
        System.out.println("=======删除username=ccc,number=bbb那些项=============");
        list = session.createQuery("from Testtable where number like 'bbb' and username like 'ccc' ").list();
        for(int i=0;i<list.size();i++){
        	session.delete(list.get(i));
        }
        System.out.println("此时的Testtable表:");
        list=session.createQuery("from Testtable").list();
        for(int i=0;i<list.size();i++){
        	System.out.println(list.get(i).getId()+","+list.get(i).getUsername()+","+list.get(i).getNumber());
        }
        //这里是所谓的执行并提交事务
		transaction.commit();
		session.close();
		
		
	}

}
整个文件的思想核心是,利用HQL语句把查询结果转化成list利用一个动态数组来保存各个查询结果。

list必须注明是TestTable的List。

HQL语句其实不难的,细读一下就可以看懂,在createQuery方法里面的参数就是HQL。它是是从Testtable这里类来查询,必须大写。

增加一条记录是先构造好一个类,再用save方法保存进去

删除的时候也要构造好一个类再删除。

修改的时候,是先把要修改的项查询出来,构造好这个类,再进行删除。

这就是整个Hibernate的思想。

Java程序运行之后就不会停止了,要自己手工停止,因为数据库与JAVA的映射一直在进行,很适合服务器运行。所以它可以配合Struts嘛。运行结果就不贴了,太长,不同的表结果是不同。反正这算是一个Hibernate的入门吧!


你可能感兴趣的:(数据库,annotation,Hibernate,mysql,helloworld)