hibernate4使用本地sql查询和删除

简介: public List listAll(Map map, int pn, int pageSize) throws Exception { ...
    public List<MMSTable> listAll(Map<Object, String> map, int pn, int pageSize)  
            throws Exception  
        {  
            // 定义StringBuffer对象,拼装sql语句  
            StringBuffer sb = new StringBuffer();  
            sb.append("select m.* from MMSTable as m ");  
            if (!Global.isEmpty(map.get("mmsReceNo")))  
            {  
                sb.append(" inner join ReceiptNoInfo as r on m.msgId = r.msgId");  
            }  
            sb.append(" where 1=1 ");  
            if (!Global.isEmpty(map.get("mmsSubject")))  
            {  
                sb.append("and m.mmsSubject = '" + map.get("mmsSubject") + "'");  
            }  
            if (!Global.isEmpty(map.get("startMmsDate")))  
            {  
                sb.append("and m.mmsDate >= '" + map.get("startMmsDate") + "'");  
            }  
            if (!Global.isEmpty(map.get("endMmsDate")))  
            {  
                sb.append("and m.mmsDate <= '" + map.get("endMmsDate") + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsOrigNo")))  
            {  
                sb.append("and m.mmsOrigNo = '" + map.get("mmsOrigNo") + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsReceNo")))  
            {  
                sb.append(" and r.mmsReceNo like '" + map.get("mmsReceNo") + '%' + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsStatus")))  
            {  
                sb.append("and m.mmsStatus = '" + map.get("mmsStatus") + "'");  
            }  
            sb.append("order by m.mmsDate DESC");  
              
            // 获取本地sql语句对象  
            SQLQuery query = getSession().createSQLQuery(sb.toString());  
              
            // 设置将SQL表的别名和实体类联系起来  
            query.addEntity(MMSTable.class);  
              
            // 分页代码  
            if (pn > -1 && pageSize > -1)  
            {  
                query.setMaxResults(pageSize);  
                int start = pn;  
                if (start != 0)  
                {  
                    query.setFirstResult(start);  
                }  
            }  
              
            // 执行查询方法,返回结果  
            List<MMSTable> mmsList = query.list();  
              
            // 返回执行结果  
            return mmsList;  
        }  
          
        /** 
         * {@inheritDoc} 
         */  
        @Override  
        public int countAll(Map<Object, String> map)  
            throws Exception  
        {  
            // 定义StringBuffer对象,拼装sql语句  
            StringBuffer sb = new StringBuffer();  
            sb.append("select count(*) from MMSTable as m ");  
              
            // 如果接受电话号码存在则做内连接  
            if (!Global.isEmpty(map.get("mmsReceNo")))  
            {  
                sb.append(" inner join ReceiptNoInfo as r on m.msgId = r.msgId");  
            }  
            sb.append(" where 1=1 ");  
            if (!Global.isEmpty(map.get("mmsSubject")))  
            {  
                sb.append("and m.mmsSubject = '" + map.get("mmsSubject") + "'");  
            }  
            if (!Global.isEmpty(map.get("startMmsDate")))  
            {  
                sb.append("and m.mmsDate >= '" + map.get("startMmsDate") + "'");  
            }  
            if (!Global.isEmpty(map.get("endMmsDate")))  
            {  
                sb.append("and m.mmsDate <= '" + map.get("endMmsDate") + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsOrigNo")))  
            {  
                sb.append("and m.mmsOrigNo = '" + map.get("mmsOrigNo") + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsReceNo")))  
            {  
                sb.append(" and r.mmsReceNo like '" + map.get("mmsReceNo") + '%' + "'");  
            }  
            if (!Global.isEmpty(map.get("mmsStatus")))  
            {  
                sb.append("and m.mmsStatus = '" + map.get("mmsStatus") + "'");  
            }  
              
            // 获取本地sql语句对象  
            SQLQuery query = getSession().createSQLQuery(sb.toString());  
              
            // 执行查询方法,返回结果  
            Integer count = Integer.valueOf(query.uniqueResult().toString());  
            return count;  
        }  
AI 代码解读

hibernate高级查询技巧:

Hibernate对本地查询提供了内置支持,为了把SQL查询返回的关系数据映射为对象,需要在SQL查询语句中为字段制定别名。如下面代码所示:

String sql=”select cs.id as {c.id},cs.name as {c.name},cs.age as {c.age} from customer cs where cs.id=’1’ ”;
Query query=session.createSQLQuery(sql,”c”,Customer.class);
以上的程序代码将Customer实体对象的别名设置为c,customer表的别名设置为cs,字段的别名必须位于大括号之内。
   本地SQL查询还可以支持连接查询,如下面的程序代码:
String sql=”select {c.*},{o.*} from customer c inner join order o where c.id=o.customer_ID”;
Query query=session.createSQLQuery(sql,
new String[]{“c”,”o”},
new Class[]{Customer.class,Order.class});
List list=query.list();
for(int i=0;i<list.size();i++){
 Object objs=(Object[])list.get(i);
 Customer customer=(Customer)objs[0];
 Order order=(Order)objs[1];
}
值得注意的是以上程序代码中Querylist()方法返回的结果集中存放的是对象数组,在对象数组中成对存放着一对Customer对象和Order对象。

删除操作

public void deleteMMSTable(String msgId)  
       throws Exception  
   {  
       // 封装参数  
       Object[] paramlist = new Object[] {msgId};  
         
       // 拼装sql语句  
       String sql = "delete from MMSTable where msgId = ?";  
         
       // 执行sql语句  
       SQLQuery query = getSession().createSQLQuery(sql);  
       setParameters(query, paramlist);  
       query.executeUpdate();  
   } 
AI 代码解读


目录
打赏
0
0
0
0
3
分享
相关文章
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
162 77
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
利用 PolarDB PG 版向量化引擎,加速复杂 SQL 查询!完成任务领发财新年抱枕!
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
25 1
|
2月前
|
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
57 17
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
132 6
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
513 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
3月前
|
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
127 9
|
4月前
|
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
57 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等