最近老师让做个web小应用,大三的时候学习过一点J2EE的东西,也做过一些web相关的XXX管理系统,都是用servlet,jsp这些完成的,虽然勉强能够完成任务,但其中各种代码掺杂在一起,不好看而且维护起来也很麻烦,出了一点问题要调试好久才能解决。这次打算让自己多学一点东西,在项目的架构上我使用了struts2实现了多层代码的分离,在数据库方面,因为以往的经历都需要对连接数据库进行一个封装,里面包含有数据库的连接,记录的添加,查询,修改和删除等操作,每次使用的过程中都需要先实现一个连接对象然后再进行数据库的操作,而面向对象编程中对于不同对象,传统的数据库操作只能够完成一个泛化的任务,不同的对象需要不同的处理方式,所以我们需要一个使用面向对象思想描述数据库的一个框架来完成这样的任务,通过度娘就找到了Hibernate。
那么在这里我将记录下我学习Hibernate框架的过程,以免用过之后又给忘记了。。。
今天我将完成环境的配置以及建立一个简单的Hibernate的工程,使用的开发工具为myeclipse10,数据库为mysql。
在此之前我们要做一些必要的准备:java jdk还有mysql的问题我就不说了,这里只涉及项目配置以及必要代码的编写,我们要先下载Hibernate的jar包,解压后找到这几个文件:hibernate-annotations.jar,hibernate-commons-annotations.jar,hibernate-entitymanager.jar,hibernate-validator.jar,hibernate3.jar。
打开myeclipse后建立一个web项目,将上述的Jar包导入到项目中,这里我自己建立一个数据库lan,里面有一个表叫user,其中包括U_ID,U_NAME,U_PASSWORD三个,我们的任务就是在程序中实现一个User类,完成User类与数据库中user表的映射,并向表中添加一个记录。
一个hibernate的项目有必不可少的两个文件,一个是hibernate.cfg.xml,用于完成项目与数据库的映射。另一个是xxx.hbm.xml,即表与类对象映射的文件,实现类属性与表中属性的映射。
首先要完成项目与数据库的映射关系,在这里需要写一个配置文件来完成,命名为hibernate.cfg.xml,路径放在src根目录就好。
1 <?xml version=‘1.0‘ encoding=‘UTF-8‘?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 6 <!-- Generated by MyEclipse Hibernate Tools. --> 7 <hibernate-configuration> 8 9 <session-factory> 10 <property name="dialect"> 11 org.hibernate.dialect.MySQLDialect 12 </property> 13 <property name="hibernate.connection.url"><!-- 填写数据库路径 --> 14 jdbc:mysql://127.0.0.1:3306/lan 15 </property> 16 <property name="connection.username">root</property><!-- 填写数据库用户名 --> 17 <property name="connection.password">root</property><!-- 填写数据库密码 --> 18 <property name="connection.driver_class"><!-- 填写数据库驱动 --> 19 com.mysql.jdbc.Driver 20 </property> 21 <property name="myeclipse.connection.profile">lan</property> 22 <mapping resource="./User.hbm.xml" /><!-- 表映射文件--> 23 24 </session-factory> 25 26 </hibernate-configuration>
其中的表映射文件我们下面说。
然后写一个User类(注意我们的模型类和表内容必须是一一对应的,即属性之间是一一对应的关系):
1 class User{ 2 private int id; 3 private String name; 4 private String password; 5 6 public void setId(int id){ 7 this.id = id; 8 } 9 public void setName(String name){ 10 this.name = name; 11 } 12 public void setPassword(String password){ 13 this.password = password; 14 } 15 16 public int getId(){ 17 return id; 18 } 19 public String getName(){ 20 return name; 21 } 22 public String getPassword(){ 23 return password; 24 } 25 }
其中的数据成员分别对应数据库user表中的三个元素:U_ID,U_NAME,U_PASSWORD。
有了user类,我们下一步就是要实现数据库表user与程序中的模型类User的映射关系了,此时我们需要一个表映射文件:XXX.hbm.xml(本文我们将其命名为user.hbm.xml)
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- 5 Mapping file autogenerated by MyEclipse Persistence Tools 6 --> 7 <hibernate-mapping> 8 <class name="model.User" table="user" catalog="lan"> 9 <id name="id" type="int"> 10 <column name="U_ID" length="11" /> 11 <generator class="assigned"></generator> 12 </id> 13 <property name="name" type="string"> 14 <column name="U_NAME" length="20" not-null="true" /> 15 </property> 16 <property name="password" type="string"> 17 <column name="U_PASSWORD" length="20" not-null="true" /> 18 </property> 19 </class> 20 </hibernate-mapping>
其中class name选项是项目中数据库表对应的类路径,table选项为表名,catalog为数据库名。
完成了上述的准备过程,我们下面就要尝试对项目进行测试了,我们向数据库中添加一个的记录的代码如下:
1 User user; //定义一个model 2 user.setId(1); //设置user的属性值 3 user.setName("name"); 4 user.setPassword("password"); 5 Session session; 6 // 找到Hibernate配置 7 Configuration config=new Configuration().configure(); 8 //从配置中取出SessionFactory 9 SessionFactory factory=config.buildSessionFactory(); 10 //从SessionFactory中取出一个Session 11 session=factory.openSession(); 12 Transaction tran=session.beginTransaction(); 13 //执行语句 14 this.session.save(user); 15 //提交事务 16 tran.commit();//
以上的语句实现了向数据库中添加一条记录的效果,第一次写思维有点混乱。。。