`

Spring学习2

阅读更多
   1、 关于在Spring中嵌入hibernate使用sql语句问题:

        在使用hibernate的时候,有的时候需要用sql语句来执行,而HibernateDaoSupport方便了操作后,执行sql时候遇到不能执行的问题,  
下列方法是一个内部类来执行sql,可以写一个通用方法来执行sql,通常如果没有必要尽量不使用sql,但是有的时候就必须使用了,就想下列的查询分组查询,不想在hibernate中使用一对多关系,而又必须使用group by 哪么只能使用下列方式,  
import org.hibernate.HibernateException;  
import org.hibernate.Session;  
import org.springframework.orm.hibernate3.HibernateCallback;  
import java.sql.SQLException;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
 
public List<KnowledgeQueryBean> getKnowledgeQueryInfo() {  
        List<KnowledgeQueryBean> ListAll = new ArrayList<KnowledgeQueryBean>();  
        final String sql = "SELECT  ky.KNOWLEDGEQUERYID,ky.TITILE,ky.CREATEDATE,eu.USERNAME ,ky.USERID,COUNT(kyr.KNOWLEDGEQUERYID) AS COUNT"+  
                " FROM  KNOWLEDGEQUERY ky LEFT JOIN KNOWLEDGEQUERYANSWER kyr ON  ky.KNOWLEDGEQUERYID =  kyr.KNOWLEDGEQUERYID" +  
                " LEFT JOIN EOM_USER eu  ON ky.USERID = eu.USER_ID"+  
                " GROUP BY ky.KNOWLEDGEQUERYID,ky.TITILE,ky.CREATEDATE,eu.USERNAME,ky.USERID ORDER BY ky.CREATEDATE DESC";  
        ListAll = (List<KnowledgeQueryBean>)this.getHibernateTemplate().execute(  
                new HibernateCallback(){  
                    public Object doInHibernate(Session session)  
                    throws HibernateException, SQLException {  
                    Connection con = session.connection();  
                    PreparedStatement ps = con.prepareStatement(sql);  
                    ResultSet rs = ps.executeQuery();  
                    List<KnowledgeQueryBean> all = new ArrayList<KnowledgeQueryBean>();  
                    while(rs.next()){  
                        KnowledgeQueryBean kqb = new KnowledgeQueryBean();  
                        kqb.setKnowledgeQueryId( rs.getLong("KNOWLEDGEQUERYID"));  
                        kqb.setTitle(rs.getString("TITILE"));  
                        kqb.setCreateDate(rs.getDate("CREATEDATE"));  
                        kqb.setContent(rs.getString("USERNAME"));  
                        kqb.setUserId(rs.getLong("USERID"));  
                        kqb.setCount(rs.getInt("COUNT"));  
                        all.add(kqb);  
                    }  
                    rs.close();  
                    ps.close();  
                    session.flush();  
                    session.close();  
                    return all;  
                    }  
                }  
        );  
        return ListAll;  
    }

3、  我遇到了很多人——他们既想赶时髦用Hibernate来完成ORM;同时又意图节约学习成本,使用原来纯JDBC时候的书写方式……

    Hibernate执行原生SQL语句的方法
    如下代码:
(注意该类继承自HibernateDaoSupport ,要在applicationContext.xml中将sessionFactory注入此类中)

public class DaoUtil extends HibernateDaoSupport {


public Object executeMySQL(final String sql){
System.out.println(sql);
return getHibernateTemplate().execute( new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Connection CurConn = session.connection();
PreparedStatement ps = CurConn.prepareStatement(sql);
ps.execute();
ps.close();
session.flush();
return null;
}

} );
}

public Object executeBetchSQL(final ArrayList sqlList){
return getHibernateTemplate().execute( new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Connection CurConn = session.connection();
int count = sqlList.size();
for(int i=0;i//System.out.println(sqlList.get(i));
PreparedStatement ps = CurConn.prepareStatement(sqlList.get(i));
ps.execute();
ps.close();
session.flush();
}
return null;
}

} );
}

public static DaoUtil getFromApplicationContext(
ApplicationContext ctx) {
return (DaoUtil) ctx.getBean("DaoUtil");
}
}



   2、 再论Spring中的AOP

   我在《Spring 初体验》一文中曾提到过Aop , 但是那种方式的AOP写的通知还必须得实现 MethodInterceptor 接口, 今天介绍的这个不用实现接口, 有两种方式实现同样的功能, 一个是使用配置applicationContext.xml的方式, 另外一种则是使用注脚(Annotation)。

      现贴出我的练习代码:

  Work.java   ————接口

  public interface Work {

public String doWork();

}

WorkImpl.java  ——实现类

public class WorkImpl implements Work {

public String doWork() {
  System.out.println("正在工作.....");
  try {
   Thread.sleep(3000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println("^_^  ^_^  ");
  return "ok";
}

}

ArroundLog.java  ————切面代码

@Aspect
/**
* 编写切面代码
* @author Administrator
*
*/
public class ArroundLog {

/**
  * 在WorkImpl调用之前调用前, 提供日志服务
  */
@Before ("execution(* cn.com.aop.version2.WorkImpl.*(..))")

public Object printLog(){
  System.out.println("正准备工作....");
  return null;
}

}

Test.java  ————测试类

public class Test {

public static void main(String[] args) {
  ApplicationContext beanContext = new ClassPathXmlApplicationContext(
    new String[]{"applicationContext.xml"} );
  Work work = (Work)beanContext.getBean("realWork");
  work.doWork();
 
}

}

  配置文件:

!-- 配置真实对象 -->
<bean id="realWork" class="cn.com.aop.version2.WorkImpl" scope="prototype"></bean>
<!-- 配置通知 -->
<bean id="beforeLog" class="cn.com.aop.version2.ArroundLog"></bean>

  <!-- 自动产生代理对象 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
<!-- spring aop 配置 -->
<aop:config>
   <!-- 切面配置 -->
   <aop:aspect id="myAop" ref="beforeLog">
   <!-- 定义连接点 (用于指定那些方法调用时自动调用beforeLog) -->
   <aop:pointcut id="method" expression="execution(* cn.com.aop.version2.WorkImpl.*(..))"/>
   <!-- 使用通知为方法自动提供服务 -->
   <aop:before method="printLog" pointcut-ref="method"/><!-- 在调用method指定的方法之前调用 -->
   </aop:aspect>
</aop:config>

注脚的方式:

  在ArroungLog.java中加入注脚:

   @Aspect  ————加在类前

   @Before ("execution(* cn.com.aop.version2.WorkImpl.*(..))")  ————加在要调用的服务方法前

分享到:
评论

相关推荐

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    spring学习资料大全

    以下是对"Spring学习资料大全"的详细解析: 1. **Spring框架基础**: - **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,它允许开发者在运行时通过XML配置或注解方式来管理对象间的依赖关系,...

    spring学习.zip

    本资源集合围绕"spring学习.zip",提供了多本深入讲解Spring及其相关技术的电子书籍,旨在帮助读者深入理解和掌握Spring生态。 1. **《深入实践Spring Boot.陈韶健.pdf》**:这本书详细介绍了Spring Boot,它是...

    springcloud视频学习

    《SpringCloud视频学习》 SpringCloud作为微服务架构的重要实现框架,深受广大开发者的喜爱。本资源包含了两部关于SpringCloud的视频教程,由尚硅谷出品,内容详实且易于理解,是学习SpringCloud的理想资料。 一、...

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    spring 学习

    2. **理解Spring IoC**:通过示例理解依赖注入的原理,学习配置Bean的方式,包括XML配置、注解配置和Java配置。 3. **掌握Spring AOP**:学习如何定义切面、切入点以及如何通过切面增强程序功能。 4. **实践Spring...

    Spring学习笔记 自我总结

    spring学习笔记

    详尽的Spring2.0学习提纲

    2. Spring AOP实现:学习基于代理的AOP实现,包括JDK动态代理和CGLIB代理。 3. 自定义切面:编写切面类,定义通知(前置、后置、异常、最终、环绕通知),并配置切入点表达式。 4. AOP在实际项目中的应用:例如日志...

    关于Spring学习总结

    为了深入学习Spring,你可以参考官方文档、在线教程、书籍,如《Spring in Action》等,以及参与开源社区,如Stack Overflow、GitHub等,积累实战经验。 总的来说,Spring框架是Java开发的强大工具,理解和掌握其...

    Spring学习资料文档合集

    Spring学习资料文档合集,包含 spring2.0-reference_RC2.1_zh_cn spring_reference_inchinese_m2 SpringGuide Spring基础教程 spring框架,技术详解及使用指导

    spring学习

    spring系统学习,解读spring,源码解读 spring系统学习,解读spring,源码解读 spring系统学习,解读spring,源码解读

    Spring学习思维导图(仅供参考)

    Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图Spring学习思维导图...

    Spring学习笔记.zip

    "Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3"则可能讲解了Spring MVC、Spring Boot或Spring Data等内容。 为了充分利用这些笔记,建议按照顺序阅读,理解每个阶段的内容,然后实践操作以巩固...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    springcloud学习笔记.pdf

    Spring Cloud 学习笔记 本笔记主要介绍了从单体架构到微服务架构的演变过程,以及 Spring Cloud 中的微服务架构搭建。下面是本笔记的详细知识点总结: 一、单体架构 单体架构是指整个系统只有一个工程,打包往往...

    spring学习资源

    学习spring资源书籍,第三版讲解的很全面,包括springmvc的整合

    springCloud学习手册.zip

    SpringCloud学习手册是一个针对微服务架构的资源包,主要涵盖了SpringCloud的相关知识,适用于初学者。SpringCloud作为Java领域中的主流微服务框架,为开发者提供了构建分布式系统所需的工具和服务发现、配置管理、...

    Spring 学习文档集合

    这个压缩包文件集合提供了丰富的学习资源,帮助初学者深入了解和掌握Spring框架。让我们逐一解析这些资源: 首先,"spring2.0-reference_final_zh_cn.chm" 是Spring 2.0的中文参考手册。这个手册详细阐述了Spring ...

    Spring学习笔记( spring视频笔记)

    Spring学习笔记( spring视频笔记)

    springsecurity学习笔记

    - 学习如何集成Spring Security与OAuth2,为API提供授权服务。 - 了解如何使用JWT进行状态管理,包括生成和验证JWT。 - 遇到问题时的调试技巧,如日志配置和安全相关的异常处理。 以上只是Spring Security学习过程...

Global site tag (gtag.js) - Google Analytics