Hibernate -- 项目结构模型改造, 加 Utils 和 Dao层
示例代码:
App.java 模拟客户端
/**
* 模拟客户端
*/
public class App { @Test
public void saveCustomer(){
CustomerDao customerDao=new CustomerDao();
Customer customer=new Customer();
customer.setName("西毒");
customerDao.saveCustomer(customer);
} @Test
public void updateCustomer(){
CustomerDao customerDao=new CustomerDao();
Customer customer=new Customer();
customer.setId(1);
customer.setName("西门公子");
customerDao.updateCustomer(customer);
} @Test
public void findCustomerById(){
CustomerDao customerDao=new CustomerDao();
Customer c=customerDao.getCustomerById(1);
if(c!=null){
System.out.println(c.getId()+" "+c.getName());
}
} @Test
public void findCustomers(){
CustomerDao customerDao=new CustomerDao();
List<Customer> list=customerDao.findCustomers();
if(list!=null&&list.size()>0){
for(Customer c:list){
System.out.println(c.getId()+" "+c.getName());
}
}
} @Test
public void deleteCustomerById(){
CustomerDao customerDao=new CustomerDao();
customerDao.deleteCustomerById(1); }
}
CustomerDao.java Dao层代码
/**
* Dao
*/
public class CustomerDao { public void saveCustomer(Customer customer) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSession();
if(session!=null){
tx=HibernateUtil.beginTransaction(session);
session.save(customer);
HibernateUtil.commitTransaction(tx);
}
} catch (HibernateException e) {
e.printStackTrace();
//事务回滚
HibernateUtil.rollbackTransaction(tx);
}finally{
HibernateUtil.closeSession(session);
}
} public void updateCustomer(Customer customer) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSession();
if(session!=null){
tx=HibernateUtil.beginTransaction(session);
session.update(customer);
HibernateUtil.commitTransaction(tx);
}
} catch (HibernateException e) {
e.printStackTrace();
//事务回滚
HibernateUtil.rollbackTransaction(tx);
}finally{
HibernateUtil.closeSession(session);
} } public Customer getCustomerById(Serializable i) {
Session session=null;
Transaction tx=null;
Customer customer=null;
try {
session=HibernateUtil.getSession();
if(session!=null){
tx=HibernateUtil.beginTransaction(session);
customer=(Customer)session.get(Customer.class, i);
HibernateUtil.commitTransaction(tx);
}
} catch (HibernateException e) {
e.printStackTrace();
//事务回滚
HibernateUtil.rollbackTransaction(tx);
}finally{
HibernateUtil.closeSession(session);
} return customer;
} public List<Customer> findCustomers() {
Session session=null;
Transaction tx=null;
List<Customer> list=null;
try {
session=HibernateUtil.getSession();
if(session!=null){
tx=HibernateUtil.beginTransaction(session);
Query query=session.createQuery("from Customer c");
list=query.list(); HibernateUtil.commitTransaction(tx);
}
} catch (HibernateException e) {
e.printStackTrace();
//事务回滚
HibernateUtil.rollbackTransaction(tx);
}finally{
HibernateUtil.closeSession(session);
} return list;
} public void deleteCustomerById(Serializable id) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtil.getSession();
if(session!=null){
tx=HibernateUtil.beginTransaction(session);
Customer c=(Customer)session.get(Customer.class, id);
session.delete(c);
HibernateUtil.commitTransaction(tx);
}
} catch (HibernateException e) {
e.printStackTrace();
//事务回滚
HibernateUtil.rollbackTransaction(tx);
}finally{
HibernateUtil.closeSession(session);
} } }
HibernateUtil.java 工具类
public class HibernateUtil { private static SessionFactory sf=null; static{
Configuration config=new Configuration();
config.configure("cn/itcast/add/hibernate.cfg.xml");
sf=config.buildSessionFactory();
} //获取session
public static Session getSession(){
if(sf!=null){
return sf.openSession();
}
return null;
} //关闭session
public static void closeSession(Session session){
if(session!=null&&session.isOpen()){
session.close();
}
} //开始事务
public static Transaction beginTransaction(Session session){
if(session!=null&&session.isOpen()){
return session.beginTransaction();
}
return null;
} //提交事务
public static void commitTransaction(Transaction tx){
if(tx!=null&&!tx.wasCommitted()){
tx.commit();
}
} //回滚事务
public static void rollbackTransaction(Transaction tx){
if(tx!=null&&!tx.wasRolledBack()){
tx.rollback();
}
} }
Customer.java bean对象
/**
* 一的一端
*/
@SuppressWarnings("serial")
public class Customer implements java.io.Serializable { private Integer id;
private String name;
//一个客户对应多个订单
private Set<Order> orderes=new HashSet<Order>(0); 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 Set<Order> getOrderes() {
return orderes;
}
public void setOrderes(Set<Order> orderes) {
this.orderes = orderes;
} }
Order.java bean对象
/**
* 多的一端
*/
public class Order {
private Integer id;
private String orderNumber;
private Double price; //建立订单到客户的多一关联
private Customer customer; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getOrderNumber() {
return orderNumber;
} public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
} public Double getPrice() {
return price;
} public void setPrice(Double price) {
this.price = price;
} public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
} }
Customer.hbm.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.add.Customer" table="customers">
<id name="id" type="integer">
<column name="id"/>
<generator class="increment"/>
</id>
<property name="name" type="string">
<column name="name"/>
</property>
<set name="orderes" table="orders" inverse="true">
<key>
<column name="customer_id"/>
</key>
<one-to-many class="cn.itcast.add.Order"/>
</set>
</class>
</hibernate-mapping>
Order.hbm.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.add.Order" table="orders">
<id name="id" type="integer">
<column name="id"/>
<generator class="increment"/>
</id>
<property name="orderNumber" type="string">
<column name="orderNumber"/>
</property>
<property name="price" type="double">
<column name="price"/>
</property> <many-to-one name="customer" class="cn.itcast.add.Customer">
<column name="customer_id"/>
</many-to-one> </class>
</hibernate-mapping>
hibernate.cfg.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property> <!-- 加载映射文件-->
<mapping resource="cn/itcast/add/Customer.hbm.xml"/>
<mapping resource="cn/itcast/add/Order.hbm.xml"/> </session-factory>
</hibernate-configuration>
关于配置文件中使用 entity-name 指向实体, 可做如下修改
Customer.hbm.xml 使用entity-name 指向实体
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
entity-name:指向的名称才是在程序中真正要用到的实体的名称,可以理解成name的别名,
当entity-name存在时,entity-name优先
如果entity-name没有配置,责默认的实体的名称是name执行的类名 -->
<class name="cn.itcast.entityname.Customer" entity-name="CustomerE" table="customers">
<id name="id" type="integer">
<column name="id"/>
<generator class="increment"/>
</id>
<property name="name" type="string">
<column name="name"/>
</property>
<set name="orderes" table="orders" inverse="true">
<key>
<column name="customer_id"/>
</key>
<one-to-many entity-name="OrderE"/>
</set>
</class>
</hibernate-mapping>
这时Dao的代码则需要做相应的改变, 比如saveCustomer时 需要改为 session.save("CustomerE",customer);
必须使用指定的实体名。
Hibernate -- 项目结构模型改造, 加 Utils 和 Dao层的更多相关文章
- SpringMVC + Hibernate + MySQL 的简易网页搭建(Dao层 实现篇)
首先在搭建一个网站后台前,需要明确出一个合理的网页搭建的结构框架,即从DB ==> Dao层 ==>Service层 ==>Control层 ==>View层(该层严格意义 ...
- IDEA项目搭建四——使用Mybatis实现Dao层
一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...
- SSH 项目中 用Hibernate底层 简单的封装DAO层
废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用. 首先:必须要继承的 public class CommonDao extends Hiberna ...
- Spring + Spring MVC + Hibernate项目开发集成(注解)
在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...
- (转)淘淘商城系列——SSM框架整合之Dao层整合
http://blog.csdn.net/yerenyuan_pku/article/details/72721093 一个项目中往往有三层即Dao层.Service层和Web层,看标题就知道了,本文 ...
- Maven搭建SpringMVC+Hibernate项目详解(转)
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- intelj idea 创建聚合项目(典型web项目,包括子项目util、dao、service)
需求:第三方提供了http api接口,我们需要将其数据全部取回来,存放到本地Mysql数据库. 开发工具是intelj idea,准备基于maven创建聚合项目,util作为工具包,单独作为一个工程 ...
- 根据数据库的表生成项目,项目变为hibernate项目(实际开发中常用)
1. 选择模式为Myeclipse Database Explorer perpective 2. (1)右键建立mysql模板,选择默认的mysql模板 (2)drive name (任意这里取m ...
- 关于Hibernate在反向工程时无法选择Spring DAO Type的解决方法【更新版】
目录(?)[+] IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结! 之前有一篇文章中(Hibernate反向工程步骤及DAO Type无法选择Spring DAO解决方法)提到, ...
随机推荐
- group_concat 多对多关联, 统计分组数据, 结果拼接到一个字段
统计用户所有的角色, 结果: 1 张三 普通用户,管理员,XXX 2 李四 普通用户, XXX select ur.user_id,u.login_name,GROUP_CONCAT ...
- crash处理core文件
(一时心血来潮总结的,供大家参考,时间仓促,不足之处勿拍砖,欢迎讨论~)Crash工具用于解析Vmcore文件,Vmcore文件为通过kdump等手段收集的操作系统core dump信息,在不采用压缩 ...
- Exchange Powershell:ForwardingAddress&InboxRule
查询在邮箱上设置的转发功能: Get-Mailbox -server MX01 -Filter {ForwardingAddress -like '*'} | Select-Object Name, ...
- Java基础语法 - 面向对象 - 类的主方法main方法
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...
- Java 运行环境介绍
Java 语言特点: 跨平台性: 一次编译,到处运行.即不受操作系统限制,编译一次,可以在多个平台运行.而这个优势得益于 JVM(Java Virtual Machine, 即Java 虚拟机). 两 ...
- SQL与Access使用查询结果集更新表
SQL语法 update 表1 set 字段1 = bb.字段1 from 表1 as aa, (select 字段1,字段2 from 表) bb where aa.字段2 = bb.字段2 Acc ...
- 003-基于URL的权限管理[不使用shiro]
一.基于url权限管理流程[实现步骤] 基于url拦截是企业中常用的权限管理方法,实现思路是:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配给用户,用户访问系统功能通过Filter ...
- SVM学习笔记(二)----手写数字识别
引言 上一篇博客整理了一下SVM分类算法的基本理论问题,它分类的基本思想是利用最大间隔进行分类,处理非线性问题是通过核函数将特征向量映射到高维空间,从而变成线性可分的,但是运算却是在低维空间运行的.考 ...
- 解决linux下python多版本兼容问题?
环境:CentOS 7(7下默认安装python2.7) Pyhon3在CentOS中需要依赖一些其他的包,我们一次性用yum安装一下: yum install zlib-devel bzip2-de ...
- python 多进程使用Queue通信的例子
import time from multiprocessing import Process,Queue MSG_QUEUE = Queue(5) def startA(msgQueue): whi ...