Hibernate总结

1.什么是ORM?为什么使用Hibernate?

对象关系映射;为了少写和底层数据库相关的sql语句,方便程序的维护、修改,提高跨平台性和可扩展性。Hibernate是Java领域内的一款技术成熟稳定的ORM框架

2.Hibernate开发的基本步骤?

1)新建项目,导入Hibernate必须的架包(点击打开链接编写配置文档hibernate.cfg.xml;


下面是配置MySql数据库的示例:

<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)-->  
     <?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节点就够了,除非我们中间使用了多个数据库-->  
     <session-factory>  
     <!--用户名 -->  
     <property name="connection.username">root</property>  
     <!--url信息 -->  
     <property name="connection.url">jdbc:mysql://localhost:3306/webases</property>  
     <!--数据库方言信息-->  
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
     <!--密码 -->  
     <property name="connection.password">root</property>  
     <!--数据库驱动信息 -->  
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
     <!--指定Hibernate映射文件路径 -->  
     <mapping resource="com/Hibernate/test_products.hbm.xml" />  
     </session-factory>  
     </hibernate-configuration>   

2)编写实体类。注意:每一个实体类都要与数据库中的一张表一一对应,实体类的编写要遵循JavaBean的要求;

1)、必须是公有类。

2)、提供共有的不带参数的默认构造方法。

3)、属性私有。

4)、属性setter/getter封装,以及toString方法。

import java.util.Date;


public class Students {


	private int sid;//学号
	private String sname;//姓名
	private String gender;//
	private String Address;//地址
	private Date birthday;//生日
	
	
	public int getSid() {
		return sid;
	}


	public void setSid(int sid) {
		this.sid = sid;
	}


	public String getSname() {
		return sname;
	}


	public void setSname(String sname) {
		this.sname = sname;
	}


	public String getGender() {
		return gender;
	}


	public void setGender(String gender) {
		this.gender = gender;
	}


	public String getAddress() {
		return Address;
	}


	public void setAddress(String address) {
		Address = address;
	}


	public Date getBirthday() {
		return birthday;
	}


	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}


	public Students(){
		
	}


	public Students(int sid, String sname, String gender, String address, Date birthday) {
		this.sid = sid;
		this.sname = sname;
		this.gender = gender;
		Address = address;
		this.birthday = birthday;
	}


	@Override
	public String toString() {
		return "Students [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", Address=" + Address
				+ ", birthday=" + birthday + "]";
	}
	
}

(3)生成对应实体类的映射文件并添加到配置文档中;
Students.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>
<class name="com.wangchao.DAO.Students" table="STUDENTS">
<id name="sid" type="int">
<column name="SID"/>
<generator class="assigned" />
</id>
<property name="sname" type="java.lang.String">
<column name="SNAME"></column>
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER"></column>
</property>
<property name="birthday" type="java.util.Date">
<column name="BIRTHDAY"></column>
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS"></column>
</property>
</class>
</hibernate-mapping>

(4)调用Hibernate API进行测试

使用Junit进行测试要使用到的标签:

@Test:要测试的方法。

@Before:初始化方法(表示在测试前会先执行before方法进行初始化)。

@After:释放资源。

执行次序:@before标签下的方法——>@test方法——>@after释放资源

import java.util.Date;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import com.MyBlog.XYXY.domain.Students;


//测试类
public class StudentsTest{
       private SessionFactory sessionFactory;
       private Session session;
       private Transaction transaction;




@Before
public void init()
{
//创建配置对象
Configuration config = new Configuration().configure();


//创建服务注册对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).getBootstrapServiceRegistry();


//创建会话工厂对象
sessionFactory = config.buildSessionFactory(serviceRegistry);


//会话对象
session = sessionFactory.openSession();


//开启事务
transaction = session.beginTransaction();
}




@After
public void destory()
{
   transaction.commit();    //提交事务
   session.close();         //关闭会话
   sessionFactory.close();  //关闭会话工厂
}


@Test
public void testSaveStudents(){
   //生成学生对象
   Students s=new Students(1,"熊长","男",new Date(),"长白山");
   session.save(s);   //保存对象进入数据库
}


}

3.什么是session?

类似于JDBC里面的connection对象。调用session操作数据库,实际上就是调用connection的各种API函数来实现的。

4.openSession与getCurrentSession的区别?

(1)openSension每次都是创建新的session对象,而getCurrentSenssion使用单例模式,每次创建都是相同的对象。

(2)openSession在使用完毕后需要显式地关闭,而getCurrentSession在事务提交之后会自动关闭。

5.单表操作有哪些常用的方法?

增删改查对应使用session当中的save、delete、update、get/load方法.6.单表操作,查询一条记录时,get和load的区别?

答:get在使用的时候立即发送sql语句,并且获得的是实体类的对象类型,而load只有在使用具体对象的非主键属性的时候才会发送sql语句,而且返回的是一个代理对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值