1.Hibernate的概念:
它是一种完全面向对象的orm(对象关系映射)框架中的佼佼者,因为其完全面向对象和他的轻量级操作使得hibernate在java中的地位非常高,但是又由于它的完全面向对象使其操作相对于mybites来说更为复杂。
2.hibernate + javabean + mysql简单案例
2.1开发步骤:hibernate 所需jar包
2.2.设计数据库
账户,密码,id。 让id作为主键并且唯一的递增的。
create table(
id int primary key,
username varchar(50),
pwd varchar(50)
)
写表名,字段名时,千万要注意别和数据库里面已经定义好的名字重名。否则会出现:
could not insert: [org.sf520.actions.user.News]异常
详细查:http://www.cnblogs.com/IT-BOY/p/3517923.html
2.3 设计javabean对象
public class admin_javabean {
private int id;
private String username;
private int pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getPwd() {
return pwd;
}
public void setPwd(int pwd) {
this.pwd = pwd;
}
}
2.4 为该javabean对象配置上hibernate特有的xml文件(hibernate的秘制酱料,个人记得这才是核心,哈哈)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="javabean">该package是javabean对象所在包的名字
<class name="admin_javabean" table="username">该name是javabean对象本人,而table是连接了数据库的表,如果你在hibernate总配置文件中没有写上自动创表,也就是这个<property name="hibernate.hbm2ddl.auto">update</property>自动创表类型有四种,update:当没有时则创建;create:这个是无论数据库总是否有该表或者字段都得重新创建(这个是好像是刚上台的官员,前任官员做的我不认,我都得重新做),create-dorp:当关闭掉了sessionFactory时,里面的表就没有了(相当于打单机游戏没有保存)
<!-- 主键 ,映射-->
<id name="id" column="id">
<generator class="native"/>
</id>
<!-- 非主键,映射 -->
<property name="username" column="username"></property>
<property name="pwd" column="pwd"></property>
主键映射和非主键映射是关于数据库中字段和javabean之间搭建一座桥梁。
</class>
</hibernate-mapping>
注意:javabean对象的配置文件必须和javabean对象同名。 例如下图所示(admin_javabean.java和admin.hbm.xml),否则会出现 org.hibernate.MappingNotFoundException: resource: javabean/admin.hbm.xml not found (文件找不到)
2.5 配置hibernate总文件
<!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节点代表一个数据库 -->
<session-factory>
<!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">samlin123</property>
<!--
数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="javabean/admin.hbm.xml"/>
</session-factory>
</hibernate-configuration>
总配置文件是java文件和数据库之间的桥梁。(包括数据库地址 端口 账户 密码 数据库语言 采用哪种建表方式等等)
2.6 写上测试类app
package javabean;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;
public class app {
@Test
public void test() throws Exception{
admin_javabean ad = new admin_javabean();
ad.setId(1);
ad.setPwd(151515);
ad.setUsername("sam");
Configuration conf = new Configuration();
conf.configure();
SessionFactory sf = conf.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
session.save(ad);
tx.commit();
sf.close();
session.close();
}
}
写测试类的时候,实际就是运用hibernate过程。
1.获取configuration对象,打开configuration对象的configure方法(此方法是获取总配置文件)
2.创建sessionfactory对象,打开sessionfactory里的session资源,用session资源打开transaction。
3.以上步骤是为了用session一级缓存保存Javabean里面的数据,然后提交到数据库。
以上hibernate案例总结:
这是一个hibernate简单的案例,从这里面可以看出hibernate的一些特性,首先他比jdbc技术更加简单,而且更加java化,从以上写法来看,它没有一丢丢的mysql语法,而jdbc则是有大量的mysql语法,例如:String sql="insert into sam (name,pwd)values(?,?)";之类的mysql语法。所以在改动代码方面hibernate相对简单,耦合性好,对后期维护提供有利条件。