随笔 - 16  文章 - 0  trackbacks - 0
<2011年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿

随笔档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

第一步、配置实体Bean:
@Entity
@Table(name = "t_bd_city")
public class City extends BaseObject {
   
    /**
     * 省份
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fprovinceid")
    private Province province;
}

第二步、手动提交保存方法:

public abstract class CoreDaoHibernate<Entity extends CoreObject> implements CoreObjectDao<Entity> {

    /**
     * Log variable for all child classes. Uses LogFactory.getLog(getClass())
     * from Commons Logging
     */
    protected final Log log = LogFactory.getLog(getClass());
    private Class<Entity> persistentClass ;
    private HibernateTemplate hibernateTemplate;
    private SessionFactory sessionFactory;


    public CoreDaoHibernate(){
        Class<?> c = this.getClass();
        Type t = c.getGenericSuperclass();
        if(t instanceof ParameterizedType){
           this.persistentClass =  (Class<Entity>)((ParameterizedType) t).getActualTypeArguments()[0];
        }
    }

    public HibernateTemplate getHibernateTemplate() {
        return this.hibernateTemplate;
    }

    public SessionFactory getSessionFactory() {
        return this.sessionFactory;
    }

    @Autowired
    @Required
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Entity save(Entity object) {
        Entity result =  hibernateTemplate.merge(object);
        hibernateTemplate.flush();
        return result;
    }
}

第三步、配置web.xml
   <filter>
        <filter-name>lazyLoadingFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sessionFactory</param-value>
        </init-param>
        <init-param>
            <param-name>singleSession</param-name>
            <param-value>true</param-value>           
        </init-param>
        <init-param>
            <param-name>flushMode</param-name>
            <param-value>AUTO</param-value>        
        </init-param>
    </filter>
  <filter-mapping>
        <filter-name>lazyLoadingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

posted @ 2012-06-18 23:24 民工二代 阅读(308) | 评论 (0)编辑 收藏
     摘要: 在线创建Oracle分区表
第一步,检查源表是否可以在线重定义;
第二步、创建一张分区表做为中间表;
第三步、拷备源表中的记录;
第四步、同步更新数据;
第五步、转换完成  阅读全文
posted @ 2012-06-18 09:23 民工二代 阅读(344) | 评论 (0)编辑 收藏
最近因为开发需要,自己做了一个小的Demo部署在网上,具体网址http://www.17chuxing.com,实现一个类似公交查询的功能,目前基本上能够正常运行。

现在总结一下,以便以后查询使用;
一、技术方面
     1、demo的整体技术结构采用比较简单的Struts+spring+hibernate,struts 可以定义全局的异常、返回值、拦截器,hibernate采用统一的Spring-hibernate模板进行数据提交,减少开发量。如果采用hiberante懒加载方式,需要手工flush(),web.xml需要增加lazyLoadingFilter;
    <filter>
        <filter-name>lazyLoadingFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>
     2、数据量较小采用了mySql作为数据库,采用mysql需要注意的是早期的mysql版本,表名区分大小写,a 与A的结果不一样;
     3、在展现层方面采用sitemesh装饰器对展现的页面进行渲染(包括样式、页头、页脚、统计代码),保证每个网页的风格一致性,并且可以减少一定开发工作量;
        <filter>
            <filter-name>sitemesh</filter-name>
            <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
        </filter>

     4、采用gzipFilter对请求进行压缩,减少每次请求所需网络流量;
        <filter>
            <filter-name>gzipFilter</filter-name>
            <filter-class>net.sf.ehcache.constructs.web.filter.GzipFilter</filter-class>
        </filter>
     5、首页尽可能减少跳转(redirect),因为每次跳转都需要一定的时间;

二、部署流程
     1、申请域名
     2、选择虚拟机托管商
     3、部署程序
     4、申请备案

三、其他方面;
      1、向搜索引擎提交网站
      2、其它思考点,通过rewrite 技术实现反写,生成相应的静态文件;
<filter>
        <filter-name>rewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <!-- sets up log level (will be logged to context log)
            can be: TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, log4j, commons, sysout:{level} (ie, sysout:DEBUG)
            if you are having trouble using normal levels use sysout:DEBUG -->
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>commons</param-value>
        </init-param>
        <!-- set the amount of seconds the conf file will be checked for reload
            can be a valid integer (0 denotes check every time,
            -1 denotes no reload check, default -1) -->
        <init-param>
            <param-name>confReloadCheckInterval</param-name>
            <param-value>-1</param-value>
        </init-param>
    </filter>
posted @ 2012-04-25 13:16 民工二代 阅读(514) | 评论 (0)编辑 收藏
调试环境:struts,Spring,jsp

第一步:安装插件
在pom.xml文档中增加相应依赖:

<dependency>
   <groupId>org.sitemesh</groupId>
   <artifactId>sitemesh</artifactId>
   <version>2.4.2</version>
  </dependency>
  <dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-sitemesh-plugin</artifactId>
   <version>2.3.1.2</version>
  </dependency>

第二步:配置监听
在web.xml文档中,增加过滤器
<!-- sitemesh 装饰器 -->
 <filter>
      <filter-name>sitemesh</filter-name>
      <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
 </filter>
  <filter-name>sitemesh</filter-name>
      <url-pattern>*</url-pattern>
 </filter-mapping>

第三部:配置装饰器
在WEB-INF文件夹下,新建装饰器配置文档:decorators.xml
文档内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE decorators PUBLIC "-//OpenSymphony//SiteMesh 1.5 Decorators//EN" "http://www.opensymphony.com/sitemesh/dtd/sitemesh_1_5_decorators.dtd">
<decorators defaultdir="/decorators"><!--文件夹可以修改-->
 <!-- 放弃装饰部分 -->
     <excludes>
          <pattern>/40*.jsp</pattern>
          <pattern>/*ajax=true*</pattern>
          <pattern>/scripts/dojo/*</pattern>
          <pattern>/struts/dojo/*</pattern>
          <pattern>/resources/*</pattern>
     </excludes>
 <!--装饰名称,可以设置多个-->
 <decorator name="default" page="default.jsp">
      <pattern>*</pattern>
 </decorator>
</decorators>

第四步  在WEB-INF文件夹下,新建sitemesh配置文档:sitemesh.xml
<sitemesh>
    <property name="decorators-file" value="/WEB-INF/decorators.xml"/>
    <excludes file="${decorators-file}"/>
    <page-parsers>
        <parser default="true" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
        <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
        <parser content-type="text/html;charset=ISO-8859-1" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
    </page-parsers>

    <decorator-mappers>
        <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
            <param name="config" value="${decorators-file}"/>
        </mapper>
    </decorator-mappers>
</sitemesh>



第五部:编写装饰模板并引用标签
在<decorators defaultdir="/decorators">指定的文件下,新加模板:default.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <%@ include file="/common/meta.jsp"%>
    <title><decorator:title /> | Demo</title>
    <decorator:head />
</head>
<body
     <decorator:getProperty property="body.id" writeEntireProperty="true"/>
     <decorator:getProperty property="body.class" writeEntireProperty="true"/>>
     <div id="page">
          <div id="header" class="clearfix">
           <jsp:include page="/common/header.jsp" />
          </div>

          <div id="content" class="clearfix">
           <div id="main">
           <%@ include file="/common/messages.jsp"%>
      <h1>
           <decorator:getProperty property="meta.heading" />
      </h1>
          <decorator:body />
     </div> 
  <c:set var="currentMenu" scope="request">
   <decorator:getProperty property="meta.menu" />
  </c:set>
 
  <div id="nav">
   <div class="wrapper"></div>
    <hr />
   </div>
   <!-- end nav -->
  </div>
 
  <div id="footer" class="clearfix">
   <jsp:include page="/common/footer.jsp" />
  </div>
 </div>
</body>
</html>

第五部:测试
期待正确的结果。

posted @ 2012-03-15 09:00 民工二代 阅读(1537) | 评论 (0)编辑 收藏

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.1.xsd        
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

 <!-- 拦截配置 -->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes>
            <!--说明事务类别 read-only表示不支持事务,propagation的事务类别与EJB保持一致-->
           <tx:method name="find*" read-only="true" />
           <tx:method name="get*" read-only="true" />
           <tx:method name="load*" read-only="true" />
           <tx:method name="save*" propagation="REQUIRED" />
           <tx:method name="insert*" propagation="REQUIRED" />
           <tx:method name="update*" propagation="REQUIRED" />
           <tx:method name="delete*" propagation="REQUIRED" />
           <tx:method name="*" propagation="REQUIRED" />
      </tx:attributes>
 </tx:advice>

 <!-- 切入点 -->
 <aop:config>
      <!-- Dao层事务 说明你要拦截那些包下面的类的方法-->
      <aop:advisor id="daoTx" advice-ref="txAdvice"  pointcut="execution(* *..dao.impl.*.*(..))" order="0" />
      <!-- service层事务 -->
      <aop:advisor id="serviceTx" advice-ref="txAdvice"  pointcut="execution(* *..service.impl.*.*(..))" order="1" />
 </aop:config>

 <!-- Enable @Transactional support -->
 <tx:annotation-driven />
 
 <!-- 事务管理 -->
 <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
 </bean>
。。。下面是具体的dataSource配置
或下载附件http://www.blogjava.net/Files/yiqi/application-resources.rar

posted @ 2012-03-13 10:56 民工二代 阅读(296) | 评论 (0)编辑 收藏
oracle 的 ojdbc无法支持通过maven使用,需要手工将oracle-ojdbc手工加入maven仓库。

mvn
install:install-file
-DgeneratePom=true
-DgroupId=com.oracle
-DartifactId=ojdbc14 
-Dversion=10.2.0.4.0  版本号
-Dpackaging=jar 打包方式
-Dfile=D:\sale_workspace\sale\third_lib\ojdbc-14.jar 本地文件路径
posted @ 2012-03-13 09:09 民工二代 阅读(421) | 评论 (0)编辑 收藏

        昨天参与了项目组的用例需求评审会,发现大家对用户用例与系统用例存在部分差异,包括架构师与需求分析师对他的理解,最后经过总结明确如下:
        1、通过对业务流程进行梳理,得出业务流程图,通过“用户用例”编写对业务流程图进行细化;
        2、“用户用例”的编写主要目的:用于描述业务现状,正常情况是怎么样做的,出现异常了什么做的;不需要考虑“做什么”与“怎么做”,如果该业务的部分操作已经由系统实现,尽可能的规避原有的系统操作,以免被原来的系统框架限制;说简单一点就是“什么人,在什么情况下,做了什么事,有什么结果”;
        3、“系统用例”的编写目的:主要是根据“用户用例”分析得出,要系统要“做什么”,需要考虑有什么业务规则,但是该阶段仍然不需要考虑怎么做;“系统用例”需要考虑做事要遵循哪些业务规则,提前告知应用设计师,设计时要考虑哪些问题,如何处理异常流程;

posted @ 2012-03-08 08:45 民工二代 阅读(1415) | 评论 (0)编辑 收藏
     摘要: 经过IBM老师的培训,对性能优化方面进行一个简单的总结

系统优化从架构层面,可以考虑从以下方面进行思考:
一、结构
1、业务需求方面
与用户沟通确认,自己对业务理解是否存在误区,用户对业务响应的期望本身就没有那么高;
2、产品选型
应该反思我们在选择产品方面是否存在缺陷,软件的设计初衷就与你的希望不一致,还要需要考虑产品是否支持容错、集群、横向扩展等
  阅读全文
posted @ 2012-02-29 13:29 民工二代 阅读(1567) | 评论 (0)编辑 收藏
<!-- 查询脚本 -->
 <select id="query" parameterType="Province" resultMap="provinceMap">
  <![CDATA[
   select fid,fname,fnumber,fsimpleName,fdescription,fcreateTime,flastUpdateTime,fdirect
   from t_yp_province
   where fname like '%'|| #{name} || '%'
  ]]>
 </select>
posted @ 2012-02-25 11:24 民工二代 阅读(362) | 评论 (0)编辑 收藏

我们在使用 Hibernate scalar 中 hibernate类型 Hibernate.DATE获取的数据只包含年月日不包含时分秒数据,即只能 2010-01-15 ,
所以一定要改成 Hibernate.TIMESTAMP ,然后在前台进行格式化。

posted @ 2012-02-22 17:34 民工二代 阅读(358) | 评论 (0)编辑 收藏
     摘要: import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;

/**
引入Spring配置文件,以便注入
**/
@ContextConfiguration(
locations = {"classpath:/mybatis-config.xml" ,
"classpath:/application-resources.xml",
"classpath:/application-dao.xml",
"classpath:/application-service.xml",
"classpath:/application-s  阅读全文
posted @ 2012-02-22 16:24 民工二代 阅读(1286) | 评论 (0)编辑 收藏
mybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换,

解决方法:

在insert语句中,增加jdbcType解决问题

<insert id="save" parameterType="Province">
  <![CDATA[
  insert into t_yp_province
  (fid,fname,fnumber,fsimpleName,fdescription,fcreateTime,flastUpdateTime,fdirect)
  values
  ( #{id,jdbcType=VARCHAR},
   #{name,jdbcType=VARCHAR},
   #{number,jdbcType=VARCHAR},
   #{simpleName,jdbcType=VARCHAR},
   #{description,jdbcType=VARCHAR},
   #{createTime,jdbcType=DATE},
   #{lastUpdateTime,jdbcType=DATE},
   #{direct,jdbcType=NUMERIC}
  ) 
  ]]>
 </insert>;

更多jdbcType请参考以下网址
http://www.jarvana.com/jarvana/view/org/mybatis/mybatis/3.0.1/mybatis-3.0.1-javadoc.jar!/org/apache/ibatis/type/JdbcType.html
posted @ 2012-02-22 12:18 民工二代 阅读(2835) | 评论 (0)编辑 收藏
     摘要: 通过Maven快速搭建Struts2 + Spring + myBatis开发环境,避免自己下载各类Java包引起的版本冲突,POM.xml负责整个Maven工程的jar包依赖管理管理。

POM.xml文件内容如下
  阅读全文
posted @ 2012-02-14 11:25 民工二代 阅读(2861) | 评论 (0)编辑 收藏
Enum Constant Summary
ALL
          Cascade all operations
MERGE
          Cascade merge operation
PERSIST
          Cascade persist operation
REFRESH
          Cascade refresh operation
REMOVE
          Cascade remove operation
posted @ 2011-09-27 22:29 民工二代 阅读(175) | 评论 (0)编辑 收藏