hibernate学习笔记一

l模型不匹配(阻抗不匹配)

Java面向对象语言,对象模型,其主要概念有:继承、关联、多态等;

数据库是关系模型,其主要概念有:表、主键、外键等。

l解决办法

1使用JDBC手工转换。

2使用ORM(Object Relation Mapping对象关系映射)框架来解决,主流的ORM框架有Hibernate、TopLink、OJB。

安装配置

l下载地址http://www.hibernate.org,本教程使用3.2.5。 3.3对缓存做了些处理,其他没有什么变化

l将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:

antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar

l配置文件hibernate.cfg.xml和hibernate.properties,XML和properties两种,这两个文件的作用一样,提供一个即可,推荐XML格式,下载目录/etc下是示例配置文件。

可以在配置文件指定:

数据库的URL、用户名、密码、JDBC驱动类、方言等。

启动时Hibernate会在CLASSPATH里找这个配置文件。

l映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有完整的hibernate示例。

l快速开始小例子

package myk;

import java.util.Date;

public class User {
	private int id;

	private String name;

	private Date birthday;

	/**
	 * Domain Object限制 1.默认的构造方法(必须的)。 
	 * 2有无意义的标示符id(主键)(可选) 
	 * 3非final的,对懒加载有影响(可选),final的无法继承
	 */

	// hibernate 需要一个缺省的构造函数,你不写是可以的,编译器会给你加一个默认的无参构造函数,
	// 如果你写了一个带参数的构造函数,hibernate是无法完成映射的,因为hibernate是通过反射来完成对象的
	// 创建的
	public User() {

	}

	public Date getBirthday() {
		return birthday;
	}

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

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}


package myk;

import java.util.Date;

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

public class Base {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Configuration cfg = new Configuration();
		cfg.configure();
		SessionFactory sf = cfg.buildSessionFactory();
		Session s = sf.openSession();
		
		//如果引擎是InnoDB则需要打开实务然后提交
		Transaction tx = s.beginTransaction();
		User user = new User();
		user.setBirthday(new Date());
		user.setName("name");
		s.save(user);
		tx.commit();
		s.close();
		
		
		/**
		 * 
		 * mysql 缺省引擎是ENGINE=MyISAM ,该引擎不支持事务,所以开启事务和不开启是一样的,
		 * 插入之后不能回滚
		mysql> show create table user;
			+-------+---------------------------------------
			------------------------------------------------
			---------------------------------------------+
			| Table | Create Table
			
			                                             |
			+-------+---------------------------------------
			------------------------------------------------
			---------------------------------------------+
			| user  | CREATE TABLE `user` (
			  `id` int(11) NOT NULL auto_increment,
			  `name` varchar(255) default NULL,
			  `birthday` datetime default NULL,
			  PRIMARY KEY  (`id`)
			) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
			+-------+---------------------------------------
			------------------------------------------------
			---------------------------------------------+
			
			mysql支持下面几种引擎
			mysql> show engines;
+------------+---------+-------------------------------------------------------
--------+
| Engine     | Support | Comment
        |
+------------+---------+-------------------------------------------------------
--------+
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance
        |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tab
es      |
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign
eys     |
| BerkeleyDB | NO      | Supports transactions and page-level locking
        |
| BLACKHOLE  | NO      | /dev/null storage engine (anything you write to it dis
ppears) |
| EXAMPLE    | NO      | Example storage engine
        |
| ARCHIVE    | YES     | Archive storage engine
        |
| CSV        | NO      | CSV storage engine
        |
| ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables
        |
| FEDERATED  | NO      | Federated MySQL storage engine
        |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables
        |
| ISAM       | NO      | Obsolete storage engine
        |
+------------+---------+-------------------------------------------------------
--------+
12 rows in set (0.00 sec)
			
		*/
	}
}

<?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 package="myk">
	<!-- 如果不写table缺省和类名是相同的 -->
	<class name="User" table="user">
		<id name="id">
			<!-- native其实是一个类名的简写 -->
			<generator class="native" />
		</id>
		<property name="name"/>
		<property name="birthday" />
	</class>
</hibernate-mapping>

<!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="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<!-- 如果连接的是本机而且缺省端口是3306就可以用///来代替 -->
	<property name="connection.url">jdbc:mysql:///test</property>
	<property name="connection.username">root</property>
	<property name="connection.password"></property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<!--
		它包含4个属性:
		create:会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变 
		create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除 
		update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 
		validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值
	-->
	<property name="hbm2ddl.auto">create</property>
	<property name="show_sql">true</property>
	<mapping resource="myk/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值