Hibernate小练

概述

Hibernate避免了繁杂的sql语句,通过ORM(对象到关系映射)即持久化类(可以写一个javaBean)还有映射文件(*.hbm.xml)、配置文件(hibernate.cfg.xml),把对数据库的连接(就不必像我们平时写jdbc那样创建很多对象麻烦了),对数据库表的字段的增删改查等(不用sql语句很方便),自动完成。下面是一个入门的栗子(大家下载个hibernate tool会方便很多):
这是我自己工程的路径图:
在这里插入图片描述 (貌似图太大了)
首先我在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="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
		<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=Userlist</property>
		<property name="connection.username">sa</property>
		<property name="connection.password">123456</property>
		<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
		<property name="show_sql">true</property>
    	<property name="format_sql">true</property>
    	<property name="hbm2ddl.auto">update</property>
	
		<mapping resource="Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

(一次做成,以后常用,其他文件需要连接数据库,就在mapping那里引入就行)
然后,写持久化类Person.java:

public class Person {
	private Integer id;
	private String name;
	private String sex;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	//...其他的get和set方法就省略了
	public Person(Integer id ,String name, String sex) {   //方便我直接赋值,加一个有参的构造方法
		super();
		this.id=id;
		this.name = name;
		this.sex = sex;
	}
	public Person() {   //有一个有参的,就不能少写无参的
		super();
	}
	@Override
	public String toString() {    //用来打印看成果
		return "Person [id=" + id + ", name=" + name + ", sex=" + sex + "]";
	}
	
	
}

之后就是映射文件Person.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">
<!-- Generated 2020-3-25 11:13:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="Test.Person" table="PERSON">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="sex" type="java.lang.String">
            <column name="SEX" />
        </property>
    </class>
</hibernate-mapping>

最好加一个测试类加(可以在src右键New直接生成Junit test case,就不用又写一个main了),
HiberTest:

package Test;

import javax.imageio.spi.ServiceRegistry;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;

import junit.framework.TestCase;

public class HiberTest extends TestCase {
	public void test(){
	SessionFactory sessionFactory=null;
	Configuration configuration=new Configuration().configure();	
	sessionFactory =configuration.buildSessionFactory();
	Session session=sessionFactory.openSession();
	Transaction transaction=session.beginTransaction();
	Person person=new Person(1,"Tom", "man");
	System.out.print( person.toString());
	session.save(person);
	transaction.commit();
	session.close();
	sessionFactory.close();
	}
}

运行:
在这里插入图片描述
过程也用sql打印出来,再看看我的数据库,自动生成了一个表:
在这里插入图片描述

一些重要方法

  • session:

1、save(): 通过buildsessionFactory()方法我们实例化了SessionFactory,从而得到session,session负责所有持久化操作。通过session.save(“xx”)把xx实例转为持久状态
2|get/load():
get()和load()都可以装载持久化对象,

修改一点点上面test代码:

person=(Person)session.get(Person.class,new Integer("1"));
	System.out.println("getId:"+person.getId());//get方法

在这里插入图片描述从打印来看,程序立马执行了一次查询即立马加载数据库先,再来打印id;
现在看load():

person=(Person)session.load(Person.class,new Integer("1"));
	System.out.println("loadId:"+person.getId());

在这里插入图片描述load则是打印了id先,因为load需要先返回一个对象代理,就是慢加载,因为之前已经创建了person且已经转为持久状态,所有能返回一个代理对象,这里我们用1唯一标记了这个person,如果没有这个对象,会抛出错误。这里会先输出再去加载数据库。

  • 一级缓存:
person=(Person)session.get(Person.class,new Integer("1"));
	System.out.println("第一次装载对象");
	Person person2=(Person)session.get(Person.class,new Integer("1"));
	System.out.println("第二次装载对象");

运行:
在这里插入图片描述可见第二次加载,程序没有再去查询数据库,第二次根据第一次的结果来直接运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值