- 浏览: 508579 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
wang1352083:
正在搭建tomcat源码.一会儿参照楼主经验搭建spring源 ...
Eclipse中阅读开源项目代码 -
w123456789zzzz:
谢谢你,问题解决了,楼主万岁!!
eclipse中如何安装插件 -
xiaoLee:
...
软件性能测试论文草稿 -
铃儿响叮当:
...
使用firefox调试js -
gogopengyou:
很细心啊
eclipse中如何安装插件
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.*(..))") ————加在要调用的服务方法前
在使用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.*(..))") ————加在要调用的服务方法前
发表评论
-
性能问题
2013-09-04 20:13 0<SERVICE CLASS=" ... -
ant中使用svn检出代码
2011-05-14 21:33 2956[size=large][size=large][size=l ... -
Ant与批处理(win环境)学习3
2011-04-10 23:48 1211此篇主要讲实践,大多数情况下是直接贴的代码了 ... -
VNC之代理
2011-03-27 22:48 2771[size=large] 背景:使用VNC客户端去连接DC上 ... -
1号~15号工作日志
2011-01-16 22:23 8841、 Flex的includeInLayout属 ... -
JAVA异常处理
2011-01-11 22:51 696在je上看到一篇有关异常处理的文章,觉得还不错... . ... -
Java配置项
2011-01-11 20:44 900背景:项目中有许多可选参数,这时如果采取硬编码的方式将非 ... -
offLineMap2工作日记之getBoolean
2011-01-06 23:25 7911、如字段不是get**开头的boolean 如: boole ... -
开发常用小工具集
2011-01-06 22:26 2014毕业也有半年了,我有幸能加入一家知名IT公司并从事时下最 ... -
Eclipse中阅读开源项目代码
2010-12-25 22:57 2713[size=large] 背景:由于最近较为系统地学习了 ... -
Eclipse调试深入
2010-12-25 18:59 1316背景:我个人的调 ... -
Java打包总结
2010-12-19 22:35 1407背景:最近下载了一 ... -
Ant与批处理(win环境)学习笔记(2)
2010-12-19 22:01 1224在《Ant与批处理(win环境)学习笔记》中学习了Ant的一些 ... -
Ant与批处理(win环境)学习笔记
2010-12-19 10:27 1443背景:最近个人附 ... -
JDK工具学习
2010-12-18 22:14 1026[size=large] 起因:在 ... -
Eclipse插件安装总结
2010-12-18 12:29 1202大学时一直使用的 ... -
使用Ant和Maven构建时出现OOM异常
2010-12-14 23:14 1756今日更新测试环境时报OOM错误(工程中使用了Ant和Ma ... -
JAVA技术见识集
2010-12-12 09:34 870[size=large] 将网上看到的一些适用于指定场景的 ... -
Eclipse异常集
2010-12-08 19:52 22871、 Eclipse异常说An internal Error ... -
将批处理文件注册成服务
2010-11-15 19:49 3532前两天完成了将java程序注册成win服务,如今本人有一 ...
相关推荐
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
以下是对"Spring学习资料大全"的详细解析: 1. **Spring框架基础**: - **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,它允许开发者在运行时通过XML配置或注解方式来管理对象间的依赖关系,...
本资源集合围绕"spring学习.zip",提供了多本深入讲解Spring及其相关技术的电子书籍,旨在帮助读者深入理解和掌握Spring生态。 1. **《深入实践Spring Boot.陈韶健.pdf》**:这本书详细介绍了Spring Boot,它是...
《SpringCloud视频学习》 SpringCloud作为微服务架构的重要实现框架,深受广大开发者的喜爱。本资源包含了两部关于SpringCloud的视频教程,由尚硅谷出品,内容详实且易于理解,是学习SpringCloud的理想资料。 一、...
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
2. **理解Spring IoC**:通过示例理解依赖注入的原理,学习配置Bean的方式,包括XML配置、注解配置和Java配置。 3. **掌握Spring AOP**:学习如何定义切面、切入点以及如何通过切面增强程序功能。 4. **实践Spring...
spring学习笔记
2. Spring AOP实现:学习基于代理的AOP实现,包括JDK动态代理和CGLIB代理。 3. 自定义切面:编写切面类,定义通知(前置、后置、异常、最终、环绕通知),并配置切入点表达式。 4. AOP在实际项目中的应用:例如日志...
为了深入学习Spring,你可以参考官方文档、在线教程、书籍,如《Spring in Action》等,以及参与开源社区,如Stack Overflow、GitHub等,积累实战经验。 总的来说,Spring框架是Java开发的强大工具,理解和掌握其...
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_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3"则可能讲解了Spring MVC、Spring Boot或Spring Data等内容。 为了充分利用这些笔记,建议按照顺序阅读,理解每个阶段的内容,然后实践操作以巩固...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
Spring Cloud 学习笔记 本笔记主要介绍了从单体架构到微服务架构的演变过程,以及 Spring Cloud 中的微服务架构搭建。下面是本笔记的详细知识点总结: 一、单体架构 单体架构是指整个系统只有一个工程,打包往往...
学习spring资源书籍,第三版讲解的很全面,包括springmvc的整合
SpringCloud学习手册是一个针对微服务架构的资源包,主要涵盖了SpringCloud的相关知识,适用于初学者。SpringCloud作为Java领域中的主流微服务框架,为开发者提供了构建分布式系统所需的工具和服务发现、配置管理、...
这个压缩包文件集合提供了丰富的学习资源,帮助初学者深入了解和掌握Spring框架。让我们逐一解析这些资源: 首先,"spring2.0-reference_final_zh_cn.chm" 是Spring 2.0的中文参考手册。这个手册详细阐述了Spring ...
Spring学习笔记( spring视频笔记)
- 学习如何集成Spring Security与OAuth2,为API提供授权服务。 - 了解如何使用JWT进行状态管理,包括生成和验证JWT。 - 遇到问题时的调试技巧,如日志配置和安全相关的异常处理。 以上只是Spring Security学习过程...