Hibernate基于持久层框架的DAO模式应用
来源:互联网 发布:通化县教育局网络办公 编辑:程序博客网 时间:2024/05/11 09:14
实验七 基于持久层框架的DAO模式应用
2.掌握持久类的创建及其映射文件的配置
3.掌握基于Hibernate的DAO模式的运用
实验步骤:
①建立数据库
③将以下JAR文件及数据库驱动类库添加到构建路径
<!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>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">157582</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="com/sise/hibernate/lesson1/domain/Person.hbml.xml"/>
</session-factory>
</hibernate-configuration>
package com.sise.hibernate.lesson1.domain;
import javax.persistence.Entity;
public class Person{
private Integer id;
private String name;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
private int age;
private String sno;
private char sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
⑥编写映射文件Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.sise.hibernate.lesson1.domain">
<class name="Person" table="person">
<id name="id">
<generator class="native"/>
</id>
<property name="sno" type="java.lang.String" length="12" not-null="true" column="sno"/>
<property name="name" type="java.lang.String" length="12" not-null="true" column="name"/>
<property name="sex" type="character" length="2"/>
<property name="age" type="integer" />
</class>
</hibernate-mapping>
⑧编写DAO接口
package com.sise.hibernate.lesson1.dao;
import com.sise.hibernate.lesson1.domain.Person;
public interface HibernateDao {
public void addPerson(Person person);
public void deletePerson(Person person);
public void updatePerson(Person person);
public Person getPersonById(int id);
}
⑨使用Hibernate API实现DAO接口
package com.sise.hibernate.lesson1.dao.impl;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.omg.CORBA.TCKind;
import com.sise.hibernate.lesson1.dao.HibernateDao;
import com.sise.hibernate.lesson1.domain.Person;
import com.sise.hibernate.lesson1.util.HibernateUtil;
public class HibernateDaoImpl implements HibernateDao {
@Override
public void addPerson(Person person) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.persist(person);
tx.commit();
} catch (Exception e) {
if(null!=tx) tx.rollback();
e.printStackTrace();
}
}
@Override
public void deletePerson(Person person) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.delete(person);
tx.commit();
} catch (Exception e) {
if(null!=tx) tx.rollback();
e.printStackTrace();
}
}
@Override
public void updatePerson(Person person) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
try {
session.update(person);
tx.commit();
} catch (Exception e) {
if(null!=tx) tx.rollback();
e.printStackTrace();
}
}
@Override
public Person getPersonById(int id) {
Session session=HibernateUtil.getSession();
Transaction tx=session.beginTransaction();
Person person=session.get(Person.class,id);
tx.commit();
return person;
}
}
⑩编写测试类,查看结果。
package com.sise.hibernate.lesson1.test;
import com.sise.hibernate.lesson1.dao.HibernateDao;
import com.sise.hibernate.lesson1.dao.impl.HibernateDaoImpl;
import com.sise.hibernate.lesson1.domain.Person;
public class HibernateDaoTest {
public static void main(String[] args) {
HibernateDao hibernateDao=new HibernateDaoImpl();
Person person1=new Person();
person1.setSno("14401122");
person1.setName("Jack");
person1.setSex('男');
person1.setAge(22);
Person person2=new Person();
person2.setSno("14401123");
person2.setName("John");
person2.setSex('女');
person2.setAge(21);
hibernateDao.addPerson(person1);
hibernateDao.addPerson(person2);
Person p1=hibernateDao.getPersonById(1);
System.out.println("ID:"+p1.getId()+"\n"+"学号:"+p1.getSno()+"\n"+"姓名:"
+p1.getName()+"\n"+"性别:"+p1.getSex()+"\n"+"年龄:"+p1.getAge());
Person p2=hibernateDao.getPersonById(2);
System.out.println("ID:"+p2.getId()+"\n"+"学号:"+p2.getSno()+"\n"+"姓名:"
+p2.getName()+"\n"+"性别:"+p2.getSex()+"\n"+"年龄:"+p2.getAge());
p1.setAge(39);
hibernateDao.updatePerson(p1);
Person p3=hibernateDao.getPersonById(3);
if (null==p3) {
System.out.println("Sorry,John已经被删除");
}
}
}
实验结果截图:
实验总结:实验成功。实验一开始遇到如下问题:
org.hibernate.MappingException:
Unknown entity:com.sise.hibernate.lesson1.domain.Person
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1460)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:225)
原因是:
不同版本的获取SessionFactory的方法不一样。 例如Hibernate 4.3 其中的一种 获取SessionFactory的方法
ServiceRegistry service=new StandardServiceRegistryBuilder().applySettings(con.getProperties()).build();
而Hibernate 5.1 的获取SessionFactory的方法
StandardServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();
而我在Hibernate5.0.2的版本下用了Hibernate4.3的获取SessionFactory的方法
所以会出现上面所示的错误。
分享经验,一起努力。
1 0
- Hibernate基于持久层框架的DAO模式应用
- 基于Hibernate框架的泛型DAO层---SwiftDAO
- 基于Hibernate的数据持久层应用简述
- 自定义持久层(dao)框架
- 持久层dao设计模式
- 基于Hibernate的持久层的组成
- DAO与Factory模式的结合——持久层的设计模式分析(深入浅出Hibernate笔记)
- 基于hibernate的泛型Dao框架
- Spring+Hibernate DAO 持久层开发
- hibernate的dao层
- 数据持久层框架Hibernate
- Hibernate持久层框架详解
- 工厂模式的应用——SSM框架中DAO层工厂
- 基于hibernate的泛型Dao层设计
- 通过Hibernate框架搭建简单的dao层
- 基于mvc模式的应用框架之Hibernate(一)
- 基于mvc模式的应用框架之Hibernate(二)
- 基于mvc模式的应用框架之Hibernate(三)
- 以任意字符分割字符串
- 蓝桥杯JAVA语言B组_圆周率
- 利用ArcGIS统计各地区内路网密度(道路长度/面积)
- 运维学习9
- Web项目同时使用Struts2和SpringMVC
- Hibernate基于持久层框架的DAO模式应用
- Android Studio JNI开发入门教程
- JavaSE 学习参考:字节流和字符流转换
- PhantomJS :一个基于 WebKit 的服务器端 JavaScript API。
- python中调用c++
- 遇到的一个MR处理业务
- Android studio 2.2里的scratch file设置
- PreferenceActivity的使用
- python UUID学习总结