sql 中 select * from A left join B on A.id=B.id where A.id=? 如果在Hibernate 中 用HQL 怎么表达呢 ?

sql 中 select * from A left join B on A.id=B.id where A.id=? 如果在Hibernate 中 用HQL 怎么表达呢 ?,第1张

hibernate几乎是用不到left join这个了。
你在配置文件里面配置A实例 和B实例的 set关系
hibernate本来就是以面向对象的思想封装sql,如果你还要用sql语句,那就没必要用hibernate了,这样没发挥出它的优势,等于摆设,又浪费资源。
hql毕竟是封装过的,不是底层的,所以速度肯定比底层的慢,如果你要实现这个语句的话,干脆直接使用exec。

我好不容易才找到个遇见同一个问题的人哦,刚才终于解决了。方法如下:
hql=from message m where mtitle like :name
我用的MAP来装参数Map<String,Object> eqs = new HashMap<String,Object>();
name ='%'+name+'%';
eqsput("name",name);
在Dao层,查询的时候,就遍历MAP设置参数:
foreach(String property : eqskeySet()){
QuerysetParameter(property,eqsget(property));
}
提示:你可以把条件是等于的装在一个MAP里面,是模糊查询的装在另外一个MAP,

这里只写了DAO和业务逻辑组件、ACTION的具体实现类,PO和和接口自己应该会写吧,HQL采用的是结合SQL的那种写法,增删改查全在里面了,修改下马上就能跑了,不清楚再问,我详细解答,因为这个是我第一给回答问题,分给我吧。呵呵
package daoimpl;
import javautilList;
import orghibernateQuery;
import orghibernateSession;
import orgspringframeworkormhibernate3supportHibernateDaoSupport;
import pojoUser;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
//根据标识属性加载User实例
public User get(String sysid)
{
return (User)getHibernateTemplate()get(Userclass, sysid);
}
//持久化指定的User实例
public String save(User user)
{
return (String)getHibernateTemplate()save(user);
}
public void update(User user)
{
getHibernateTemplate()update(user);
}
public void delete(User user)
{
getHibernateTemplate()delete(user);
}
public void delete (String sysid)
{
getHibernateTemplate()delete(get(sysid));
}
public List<User> findAll(String hsql) {
Session session = getHibernateTemplate()getSessionFactory()openSession();
Query query = sessioncreateQuery(hsql);
querysetFirstResult(0);
querysetMaxResults(10);
List<User> list = (List<User>) querylist();
sessionclose();
return list;

}
public List<User> findUserByRequest(User user) {
// TODO Auto-generated method stub
return null;
}
}
package serviceimpl;
import javautilList;
import pojoUser;
import daoimplUserDao;
public class UserServiceImpl implements UserService
{
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
thisuserDao = userDao;
}

public User save(User user) {
userDaosave(user);
return user;
}
public User delete(String sysid) {
userDaodelete(sysid);
return userDaoget(sysid);
}
public List<User> findAllUser(User user) {
String hsql="from User";
return userDaofindAll(hsql);
}
public User update(User user) {
userDaoupdate(user);
return user;
}
public List<User> findUserByRequest(User user) {
String hsql="from User ";
String where = " where 1=1";
if (usergetSysid()!=null && !""equals(usergetSysid())) {
where+=" and sysid='"+usergetSysid()+"'";
}
if(null!=usergetName() && !""equals(usergetName())){
where+=" and name='"+usergetName()+"'";
}
hsql+=where;
return userDaofindAll(hsql);
}
public User delete(User user) {
userDaodelete(user);
return user;
}

}
//ACTION
package action;
import javautilList;
import orgapachestruts2ServletActionContext;
import pojoUser;
import serviceimplUserService;
import comopensymphonyxwork2ActionSupport;
public class UserAction extends ActionSupport{

private User user;
private UserService userServer;

public User getUser() {
return user;
}
public void setUser(User user) {
thisuser = user;
}
public UserService getUserServer() {
return userServer;
}
public void setUserServer(UserService userServer) {
thisuserServer = userServer;
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return findAll();
}

// public String list(){
public String findAll(){
List<User> list = userServerfindAllUser(user);
ServletActionContextgetRequest()setAttribute("list", list);
return "list";
}
public String findUserByRequest(){
List<User> list = userServerfindUserByRequest(user);
ServletActionContextgetRequest()setAttribute("list", list);
return "list";
}
public String add()
{
return "add";
}
public String addSure()
{
userServersave(user);
return "list";
}
public String deleteBySysid()
{
userServerdelete(user);
return "list";
}
public String showUpdate() {
List<User> list = userServerfindUserByRequest(user);
user = listget(0);
ServletActionContextgetRequest()setAttribute("list", list);
return "update";
}
public String updateSure() {
userServerupdate(user);
return "list";
}
}

or本身就是取的并集,后边为null并不影响前面的查询条件 ,如果查不出的话就说明前面的查询条件也有问题,你可以去掉其中一个查询条件在查看,看看哪出问题了,也可以把生成的sql语句去数据库中执行一遍,这样子就可以定位到错误出现在哪了

Hibernate也有方法执行sql语句,像这种带子查询的语句hql好像执行不了,复杂我们一般都用sql语句,Hibernate执行sql如下:
Query query = sessioncreateSQLQuery(sql)setResultTransformer(TransformersALIAS_TO_ENTITY_MAP);
List list = querylist();

设置好关系。 查询用户表就可以顺带查出菜单了。
用户表和角色表不是应该多对一
User{
String name;
String password;
Role role;
setter/getter
}
Rol{
String id;
String name;
String menus;
setter/getter
}
HQL:from User where name={input_name}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13380349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存