只要实体类写好配置文件配好,就能实现和数据库的映射,其中实体类对应表,类的属性对应数据库的表字段。 这样就不用管数据库的相关操作了。
一:映射
下面介绍使用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文件,所以配置文件的名称不要更改。
- <span style="font-size:18px;"><?xmlversionxmlversion="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>
- <!--配置连接数据库信息 -->
- <propertynamepropertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/egov</property>
- <propertynamepropertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <propertynamepropertyname="hibernate.connection.username">egov</property>
- <propertynamepropertyname="hibernate.connection.password">egov</property>
- <propertynamepropertyname="show_sql">true</property>
- <propertynamepropertyname="hibernate.format_sql">true</property>
- <propertynamepropertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <!--实体类的路径-->
- <mappingresourcemappingresource="com/hibernate/pojo/User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration></span>
4,配置映射文件
映射文件是和javabean对象对应的,一般以对象的名称加.xml文件命名,映射文件的作用就是要告诉Hibernate应该访问数据库的哪个表以及表中的哪个对象。
在hibernate-mapping标签(tag)之间,含有一个class元素。所有的持久化实体类(再次声明,或许接下来会有依赖类,就是那些次要的实体)都需要一个这样的映射,来把类对象映射到SQL数据库里的表。
- <span style="font-size:18px;"><hibernate-mapping>
- <class name="beanname" table="tablename"/>
- </hibernate-mapping>
- </span>
配置好映射文件后需要在hibernate.cfg.xml文件中配置<mapping resource > 标签,指向刚定义的映射文件。
实例:
- <span style="font-size:18px;"><?xmlversionxmlversion="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">
- <generatorclassgeneratorclass="assigned"/>
- </id>
- <propertynamepropertyname="userpswd" column="userpswd" length="20"not-null="true"/>
- </class>
- </hibernate-mapping></span>
5,编写dao层
- <span style="font-size:18px;">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();
- }
- }
- }
- }</span>
6,编写测试类
以上四步完成后就可以进行测试了,看配置的信息能否成功插入一条数据。
- <span style="font-size:18px;">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);
- }</span>
为了测试么,我们直接new的dao层对象,在实际项目中hibernate框架和spring框架和struts2框架结用,创建对象和组合对象的关系交给spring去完成。这样层与层之间就不会耦合了。