hibernate学习笔记01----hibernate介绍

1、用JDBC进行数据库操作时:
	查询数据库中的一条user记录:
		(1)首先通过sql查询出一条记录
		(2)User user=new User();
			user.setId(rs.getInt("id"));
			user.setName(rs.getString("name"));
			......
	向数据库中插入一条user记录
		(1)写sql:sql="insert into user(name,age) values(?,?)";
			PreparedStatement ps=conn.prepareStatement(sql);
			ps.setString(1,user.getName());
			ps.setInt(2,user.getAge());
			.....
	以上可以看出用jdbc时都是将数据"解封装"然后在"封装"
	现在有一些框架----ORM(Object Relation Mapping对象关系映射)可以简化上面的操作;
	hibernate就是其中的一种ORM框架。
2、hibernate的使用:
	(1)导入jar包
	(2)创建hibernate的配置文件如:(hibernate.cfg.xml)
	(3)创建orm映射文件如:(User.hbm.xml)
	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">
		<!-- Generated by MyEclipse Hibernate Tools.                   -->
		<hibernate-configuration>
			<session-factory>
				<!--指定方言,告诉hibernate操作的是什么数据库-->
				<property name="dialect">
					org.hibernate.dialect.MySQLDialect
				</property>
				<property name="connection.url">
					jdbc:mysql://127.0.0.1:3306/hibernatedemo
				</property>
				<property name="connection.username">root</property>
				<property name="connection.password">123</property>
				<property name="connection.driver_class">
					com.mysql.jdbc.Driver
				</property>
				<property name="myeclipse.connection.profile">mysql</property>
				<property name="show_sql">true</property>
				<property name="hbm2ddl.auto">create</property>
				<mapping resource="com/lid/hibernate/domain/User.hbm.xml" />
			</session-factory>
		</hibernate-configuration>
	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 package="com.lid.hibernate.domain">
			<class name="User">
				<id name="id">
					<generator class="native" />
				</id>
				<property name="name">
				</property>
				<property name="birthday">
				</property>
			</class>
		</hibernate-mapping>
3、JDBC 获取Connection对象:
	public class DatabaseConnection{
		private static final String DBDRIVEDR="org.gjt.mm.mysql.Driver";
		private static final String DBURL="jdbc:mysql://localhost:3306/test";
		private static final String DBUSERNAME="root";
		private static final String DBPASSWORD="123";
		private Connection conn=null;	
		public DatabaseConnection() throws Exception{
				Class.forName(DBDRIVEDR);
				conn=DriverManager.getConnection(DBURL,DBUSERNAME,DBPASSWORD);
			}
		//得到数据库的连接
		public Connection getConnection() throws Exception{
				return this.conn;
			}
		//关闭连接
		public void close() throws Exception{
				if(conn!=null){
						conn.close();
					}
			}
	}
4、用hibernate操作数据库:
	public static void main(String[] args){
		Configaration cfg=new Configuration();
		cfg.configure();
		SessionFactory sf=cfg.buildSessionFactory();
		
		Session s=sf.openSession();
		
		//JDBC的提交时自动的,而hibernate必须人为开启
		Transaction tx=s.beginTransaction();
		//因为是测试,此次认为定义一个User对象,
		//其实该对象在实际应用中通过参数的方式传入的
		User user=new User();
		user.setName("lid");
		user.setAge("20")
		
		s.save(user);
		tx.commit();
		
		s.close();
	}
	ps:SessionFactory 类似于JDBC中的DriverManager,而Session就
		类似于JDBC中的Connection;
		通过对比可以发现使用hibernate操作至少省去了解封装的操作如下:
			.....
			ps.setString(1,user.getName());
			ps.setInt(2,user.getAge());
			.....
		这些操作。
		
	注意:有些时候用hibernate时没有提交,数据库里也有数据了
		这是我们应该看看我们用的数据库是什么引擎,有的引擎是
		不支持事物的,所以即使不提交也会有数据;而有的引擎则是
		支持事物的(ENGINE=InnoDB),如果没有提交,则会将插入的事物
		回滚,这样数据就相当于没有插入进去。
5、Hibernate的映射文件
	用于向Hibernate提供关于将对象持久化到关系数据库中的信息.
	


你可能感兴趣的:(hibernate学习笔记01----hibernate介绍)