hibernate之增删改查demo
package dao; import java.util.ArrayList;
import java.util.List; import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Transaction; import com.sun.org.apache.bcel.internal.generic.GETSTATIC; import common.BaseDAO;
import common.DataZh; import entity.Station; //station和ddxx是一对多关系,为保证代码整洁,每个实体的增删改查写在自己的dao,复杂查询可以写在需要的dao里
public class StationDAO extends BaseDAO<Station> { ////////////////////////////////////////////////////////////////演示hql查询
// 使用Hql查询站名里含"京"字的所有站点
public List findByproperty(String propertyName) { // 通过占位符传参
String querystring = "from Station as model where model.czmc like ?"; // 显示传参
// String
// querystring="from Station as model where model.czmc like '%"+propertyName+"%'"; Query queryObject = gs().createQuery(querystring); queryObject.setParameter(0, "%" + propertyName + "%"); // 传参 return queryObject.list();
} // 查询最后一个字是"京"字并且等级是"一级的"所有站点
public List findByKey(String Key1, String Key2) { String querystring = "from Station as model where model.czmc like ? and model.dj=?"; // 显示传参
// String
// querystring="from Station as model where model.czmc like '%"+propertyName+"%'"; Query queryObject = gs().createQuery(querystring); queryObject.setParameter(0, "%" + Key1);
queryObject.setParameter(1, Key2); // 传参 return queryObject.list();
} // 通过判断参数动态组合Hql语句,生成基本通用查询
public List find(Station entity) {
List reuslt = null; // 字符串辅助类
StringBuffer hql = new StringBuffer("from Station where 1=1"); List vp = new ArrayList(); if (entity != null) { // 小于0的和null都不做比较
if (entity.getCzdm() != null && entity.getCzdm() < 0) {
hql.append(" and czdm=?");
vp.add(entity.getCzdm());
} // 空字符串和null都不做比较
if (entity.getCzmc() != null && entity.getCzmc().length() > 0) {
hql.append(" and czmc = ?");
vp.add(entity.getCzmc());
} if (entity.getDj() != null) {
hql.append(" and dj=?");
vp.add(entity.getDj());
}
} Query q = gs().createQuery(hql.toString()); for (int i = 0; i < vp.size(); i++) {
q.setParameter(i, vp.get(i));
} reuslt = q.list();
return reuslt;
} ////////////////////////////////////////////////////////////////演示复杂查询 // 使用原生sql,根据等级模糊查询符合条件的所有车站名
public List<String> findonebydj(String dj) {
// sql语句
String sql = "select czmc from station where dj like '%" + dj + "%'"; SQLQuery q = gs().createSQLQuery(sql); return DataZh.ObjtoStr(q.list());
} // 使用原生sql,根据等级模糊查询符合条件的所有的车站名和车站代码
public List<String[]> findmanybydj(String dj) {
// sql语句
String sql = "select czmc,czdm from station where dj like '%" + dj
+ "%'"; SQLQuery q = gs().createSQLQuery(sql); return DataZh.ObjArrtoStrArr(q.list());
} // 使用原生sql,关联两表station,ddxx, 查询广州东发出的所有订单id,状态,等级
public List<String[]> findmanysbydj(String dj) {
// sql语句
String sql = "select a.czmc,id,b.status,dj from station a,ddxx b where a.czdm=b.czid and a.czmc='"
+ dj + "'"; SQLQuery q = gs().createSQLQuery(sql);
return DataZh.ObjArrtoStrArr(q.list());
} ////////////////////////////////////////////////////////////////演示复杂删除 // 输入车站代码,将相关的车站和订单全部删除
public int excuteFzDelete(Integer id) { //分别删除
String sql = "delete from station where czdm=" + id;
String sql2 = "delete from ddxx where czid=" + id; // 增删改需要事务,事务开始
Transaction tx = null;
tx = gs().beginTransaction(); SQLQuery q = gs().createSQLQuery(sql); int a = q.executeUpdate(); SQLQuery q2 = gs().createSQLQuery(sql2);
int b = q2.executeUpdate(); tx.commit(); // 提交事务 if (a > 0 || b > 0) //有效删除则返回1
return 1;
else
return 0; //无效删除则返回0 } ////////////////////////////////////////////////////////////////演示复杂更新 // 将所有无效的(车站已经不存在的)订单全部车站ID(czid)全部更新为指定的车站ID //复杂更新,需用inner join
//update ddxx a INNER JOIN
//(select id from ddxx where czid not in(select DISTINCT czdm from station)) as b
//ON a.id=b.id set czid=222
public int excuteFzUpdate(Integer czid)
{
StringBuffer s=new StringBuffer();
s.append("update ddxx a INNER JOIN");
s.append("(select id from ddxx where czid not in(select DISTINCT czdm from station)) as b");
s.append(" ON a.id=b.id set czid="+czid); //增删改加事务
Transaction tx;
tx=gs().beginTransaction();
SQLQuery q=gs().createSQLQuery(s.toString()); //受影响的行数
int a=q.executeUpdate();
tx.commit();
return a;
} ////////////////////////////////////////////////////////////////演示多对多 /*
* 站点(Station)与线路(Line)是多对多关系,
* 在数据库里面,解决方式是拆成三张表,做一个中间表,中间表要包含两个主表的主键
* 多对多拆成了两个一对多
*
*/ //查询经过指定站点的所有线路名称
public List<String> searchLineByStation(String czmc)
{
String sql = "select xlmc from line where xlid in (select a.LID from stationjoinline a,station b where a.SID = b.czdm and b.czmc=?)";
SQLQuery q=gs().createSQLQuery(sql); //建议使用setParameter加参数
q.setParameter(0, czmc);
return DataZh.ObjtoStr(q.list());
} //查询指定线路经过的所有站点名称,站点ID
public List<String[]> searchStationByLine(String xlmc)
{
String sql="SELECT * from station c WHERE c.czdm IN"+
"(SELECT b.SID FROM stationjoinline b WHERE b.LID IN"+
"(SELECT a.xlid FROM line a WHERE a.xlmc=?))";
SQLQuery q=gs().createSQLQuery(sql);
q.setParameter(0, xlmc);
List<String[]> list=q.list();
return DataZh.ObjArrtoStrArr(q.list());
} ////////////////////////////////////////////////////////////dao总结
/*
* 总结:
*
* --------------------------------------查询
* 1.hql查询
*
* StringBuffer hql = new StringBuffer("from Station where 1=1");
*
* Query q = gs().createQuery(hql.toString());
*
* q.list();
*
* 2.sql查询
*
* String sql = "select czmc,czdm from station where dj like '%" + dj
+ "%'"; SQLQuery q = gs().createSQLQuery(sql); //sql查询使用createSQLQuery q.list();
*
* DataZh.ObjArrtoStrArr(q.list()) //sql查询返回的是Object,记得转换
*
*
* --------------------------------------增删改
* 使用原生sql语句执行
*
* String sql = "delete from station where czdm=" + id;
*
* Transaction tx = null;
tx = gs().beginTransaction(); SQLQuery q = gs().createSQLQuery(sql); * tx.commit(); // 提交事务
*
* q.executeUpdate() //增删改的语句使用这个函数
*
* return result //返回受影响的行数
*
*/ }
hibernate之增删改查demo的更多相关文章
- SSH登录与增删改查demo详解+源代码
点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679 一.框架概述 spri ...
- 【讲义提纲】以一个实战新闻cms增删改查demo为例,给学院国创队伍培训php
PHP实战基础——以一个新闻cms的增删改查为例 一. 环境配置 二. 数据库创建 三. 增删改查demo 连接数据库 <?php $link=mysq ...
- mvc模式jsp+servel+dbutils oracle基本增删改查demo
mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址
- mvc模式jsp+servel+jdbc oracle基本增删改查demo
mvc模式jsp+servel+jdbc oracle基本增删改查demo 下载地址
- ssm学习(四)--完整的增删改查demo
上一篇文章简要介绍了将sping mvc加入整个框架,算是完成了ssm的集成.本节继续前面的内容,结合spring mvc做一个简单的增删改查demo. 1.首先,重写一下GeckoList.jsp页 ...
- ztree--插件实现增删改查demo(完整版)
ztree--插件实现增删改查demo(完整版) var setting = { async: { enable: true, ...
- EasyUI + Spring MVC + hibernate实现增删改查导入导出
(这是一个故事--) 前言 作为一个JAVA开发工程师,我觉得最基本是需要懂前端.后台以及数据库. 练习的内容很基础,包括:基本增删改查.模糊查询.分页查询.树菜单.上传下载.tab页 主管发我一个已 ...
- Hibernate全套增删改查+分页
1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...
- Hibernate的增删改查
一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构
随机推荐
- 【测试】解决loadrunner11无法运行负载测试
问题: LoadRunner11版,录制完脚本,准备运行时提示‘ loadrunner controller 无法创建 vuser 确保您的 load generator ’, 脚本已经录好,但是运行 ...
- MVC自学系列之一(MVC入门篇)
MVC是如何适用于ASP.NET中的 自从2002年ASP.NET 1.0版本的首次发布,就知道ASP.NET和Web Forms是同样一回事.ASP.NET由抽象两层类所支持: -->Sy ...
- 监控 DNS 流量,预防安全隐患五大招!
尽管 IT 管理员尽心尽责地监控设备.主机和网络是否存在恶意活动的迹象,却往往出力不讨好.主机入侵检测和端点保护对很多公司来说可能是"必需"的安全措施,但如果要找出 RAT.roo ...
- asp.net关于Cookie跨域(域名)的问题
Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上 说,一个cookie只能用于一个域名,不能够发给其它的域 ...
- mysql 字段存储类型
摘自:http://zuo.ai.xiao.blog.163.com/blog/static/6079155320121293750732/ 1.数字类型 ...
- DUILIB创建不规则窗体,自定义控件(很不错的几十篇文章)
http://blog.csdn.net/harvic880925/article/details/8925650 http://blog.csdn.net/harvic880925/article/ ...
- Android与服务器端数据交互(http协议整合struts2+android)
在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 一:基于Http协议获取数据方法 ...
- bzoj2809
可以先穷举那个是管理者,然后就发现其实就是求每个子树选尽可能多的人,使薪水和小于m这显然是从小往大选,可以用启发式合并但是用主席树写的更简单一点吧,dfs序之后每课线段树不仅维护出现出现个数,然后在维 ...
- Say To ME
每天都要有计划,无计划不生活. 计划包括天计划和月计划. 每个月应该有月主题. 避免大概,可能,貌似,等不肯定的词语.增强自信心,增强给别人的自信心. 不熬夜,早睡. 多运动,每周应该至少出门一次,运 ...
- HTTP 错误 500.21 - Internal Server Error处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
HTTP 错误 500.21 - Internal Server Error处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipel ...