hibernate框架主要是实现数据库与实体类间的映射,使的操作实体类相当与操作hibernate框架。
只要实体类写好配置文件配好,就能实现和数据库的映射,其中实体类对应表,类的属性对应数据库的表字段。 这样就不用管数据库的相关操作了。
一:映射
下面介绍使用hibernate框架实现简单的单表和实体间的映射。
如学生实体类Student映射成数据库中的T_student表
首先需要我们编写实体类,提供属性的set get方法
实体类和数据库表的映射全靠映射文件,也就是xml配置文件,配置文件是和实体类对应的,一个实体类对应一个映射配置文件。配置文件内容解析如下:
二:使用
1,环境配置
配置Hibernate框架的环境,需要拷贝框架的jar包到我们程序中,常用的jar包一般有14个,如下图:
2,创建javabean对象(以User为例)
对象的属性一般与对应表中的字段一致,需要提供每个属性的set、get方法,用工具生成就行了,不用工具生成的话,一定要注意命名规范,属性的名称首字母大写后在前面加set或get字段。
3,配置hibernate.cfg.xml文件
配置一个关联与特定数据库全局的工厂<SessionFactory>如果要使用多个数据库,就多配置一个<SessionFactory>标签,标签中制定连接数据库的信息。
我们需要把配置文件存在在项目的src下面,Hibernate启动时会自动到classpath根目录下面查找名为hibernate.cfg.xml文件,所以配置文件的名称不要更改。
<?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPEhibernate-configuration PUBLIC "-//Hibernate/HibernateConfiguration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--配置连接数据库信息 --> <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/egov</property> <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <propertyname="hibernate.connection.username">egov</property> <propertyname="hibernate.connection.password">egov</property> <propertyname="show_sql">true</property> <propertyname="hibernate.format_sql">true</property> <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--实体类的路径--> <mappingresource="com/hibernate/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>
4,配置映射文件
映射文件是和javabean对象对应的,一般以对象的名称加.xml文件命名,映射文件的作用就是要告诉Hibernate应该访问数据库的哪个表以及表中的哪个对象。
在hibernate-mapping标签(tag)之间,含有一个class元素。所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要的实体)都需要一个这样的映射,来把类对象映射到SQL数据库里的表。
<hibernate-mapping> <class name="beanname" table="tablename"/> </hibernate-mapping>
配置好映射文件后需要在hibernate.cfg.xml文件中配置<mapping resource>标签,指向刚定义的映射文件。
实例:
<?xmlversion="1.0" encoding="UTF-8"?> <!DOCTYPEhibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.pojo.User" table="t_user"lazy="true"> <!--id标签用来映射主键字段--> <id name="username" column="username"length="20"> <generatorclass="assigned"/> </id> <propertyname="userpswd" column="userpswd" length="20"not-null="true"/> </class> </hibernate-mapping>
5,编写dao层
public class UserDao{ public void insert(User user){ //加载配置文件:classpath:hibernate.cfg.xml Configurationconfig = new Configuration().configure(); //创建连接工厂 SessionFactorysf = config.buildSessionFactory(); //会话对象,表示与数据库的连接会话过程 Sessionsession = null; Transactiontx = null ; try{ session= sf.openSession(); //开启事务 tx= session.beginTransaction(); session.save(user);//调用sava方法 //提交事务 tx.commit(); }catch(Exceptione){ e.printStackTrace(); tx.rollback(); }finally{ if(session!=null){ session.close(); } } } }
6,编写测试类
以上四步完成后就可以进行测试了,看配置的信息能否成功插入一条数据。
public static void main(String args[]){ Useruser = new User(); user.setUsercode("zhangsan"); user.setUserpswd("123"); user.setOrgtype("1"); user.setRegdate("2014-03-0711:56:00"); user.setUsername("张三"); UserDaodao = new UserDao(); dao.insert(user); }
为了测试么,我们直接new的dao层对象,在实际项目中hibernate框架和spring框架和struts2框架结用,创建对象和组合对象的关系交给spring去完成。这样层与层之间就不会耦合了。