首页 > 其他分享 >2013年工作中遇到的20个问题:121-140

2013年工作中遇到的20个问题:121-140

时间:2023-06-08 11:07:00浏览次数:54  
标签:Map sqlSessionFactory 20 140 121 bean 使用 class 2013


 
121.Springz中,根据实现类找不到bean。

UserImpl implements User{
   
   }
   
    XmlWebApplicationContext context;
    context.getBean(User.class);√jav
 context.getBean(UserImpl.class);获取不到


 
 没有使用Cgilib库!
 
 --------貌似也不行------------
 因为spring的bean都是做了包裹的。所以你用 ServiceImpl 建立了一个bean,实际上他是新建了一个类似于 ServiceImplWrapper的继承 Service的接口的类来封装的,这样才能做到AOP的效果。
    所以新建的Bean,实际上是Spring新建的那个类型的,而不是ServiceImpl类型。因此只能用 Service接口寻找。
 
 但如果使用cglib的话,包裹类是直接继承ServiceImpl的,因此就可以找到了。
 --------------------
 按照类型找bean好像有专门的配置。 先看看文档吧。--------------------
 
 综上所述,目前没有找到原因。

122.SpringMVC 使用实体类User{Date date}不能接收“2013-7-24”这样的日期,
类型转换会失败。只能使用String接收,手动进行类型转换。

像 2013-09-31 这种字符串 把它parse为日期的时候,parse成 2013-10-01比较好,还是抛异常比较好?
simpledateformat 会将它parse成2013-10-01

public static Date parseDate(String date) {
  if(StringUtils.isEmpty(date)){
   return null;
  }
  
  SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-HH");
  Date d = null;
  try {
   d = format.parse(date);
  } catch (ParseException e) {
   e.printStackTrace();
  }
  return d;
 }123.


按名称搜索,需要使用 like '%aa%',而aa是Mybatis动态获得的。

##不对
<select id="searchBrand" parameterType="string" resultType="Integer">
  select id from organization where englishName like '%#{agencyName}%'
  and orgTypeId = 50004
 </select>
 
##官方例子,bind不识别,可能是 Mybatis新增的
<select id="selectBlogsLike" parameterType="Blog" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

只能在Java中设置了,agencyName="%"+agencyName+"%";

124.界面自适应宽度
大屏幕,普通笔记本

3个大屏幕合成1个超级大的“虚屛”

125.ssh 配置
我想通过Windows的Putty,配置ssh key来访问远程主机,没有配好。
最后,实在Linux下配了个,然后访问的。

126. 防火墙
Java通过 http连接 linux C++程序,失败。
防火墙 屏蔽了 端口。

127. 上传图片
我在使用阿里云上传,图片的时候,总是上传失败,提示"失败信息"。
连续2天都这样,我想阿里云的网站不可能一直出问题,所以我怀疑自己的图片出问题了。

经过分析和判断,最终发现 图片太大,有2M。

这让我想到Struts2和Spring中配置上传文件的最大值。

128. 日志性能
程序运行时,打印日志会降低程序的性能么?
把日志级别设置为error,info,debug,trace,对程序的性能有影响么?

打印日志太多了必然会降低性能啊
因为打印日志是IO操作,所以写程序时一定要注意好是 info还是debug。
线上运行的一般都是info。

129.  读取Excel文件
我的笔记本和公司的Linux服务器,读取1个具有8个sheet的Excel文件,需要6到11s。
而公司的1个项目,需要下载这种报表,后台数据计算就需要5到10s,客户要求总共时间在10s。
所以,只能提高前端的效率。

最终的解决方法:在系统初始化时,预先创建N个Workbook对象,缓冲起来。
启动1个定时器,检查Workbook对象个数,当达到最低值时,就再创建若干个,达到最大值。

有2点说明:
1.该项目的并发量很小,只要求20个,所以预先创建N个对象,是够用的。
空间换时间,在这种情况下是可行的。

2.Workbook对象,每用1个,就需要删掉。里面的数据已经变了,不能再次使用了。

130.SpringMVC使用 Map和实体类接收参数 各有千秋。
实体类编写比较繁琐,好处是 接收到参数后,类型已经转换成功了。

131.SpringMVC 处理全局异常。
@Component(提示:需要扫描这个异常所在的包)

public class OurException implements HandlerExceptionResolver {
 public ModelAndView resolveException(HttpServletRequest request,
   HttpServletResponse response, Object handler, Exception ex) {
   
 }

 也可以通过在xml文件中注册bean。
<bean class="××.exception.OurException">  </bean>

http://fuliang.iteye.com/blog/947191

132.严格按照顺序 构造SQL语句。
select
from
where
group by
having
order by
limit

133.mysql字符串比较时,不区分大小写
binary char,可以区分大小写
或者设置数据库的collate。

create database FansUnion default character set utf8 collate utf8_general_ci

SELECT * FROM User WHERE loginName = #{loginName} COLLATE utf8_bin

134.检验一个名字等是否重复时,需要排除自身这个实体。
比如有个叫 name的用户,修改name的时候,需要检验数据库是否存在重名,
这个时候应该排除name这个用户。

135.DateFormat setLenient
之前都没注意过有这么个方法,否则判断日期格式就太不靠谱了。
又是晦涩的单词:setLenient(false),严格匹配日期格式

136.json转换
JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性 因为JSONObject.toBean()把JSON字符串转换为一个自己定义的类,当其中属性有类似List , Map ,ArrayList的时候,麻烦就来了。

错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean

解决方法:
 
在JSONObject.toBean的时候
 
如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();
 
在classMap中put你要转换的类中的集合名,像:classMap.put("data", StoDataInfo.class);
 
当然也可以put一个集合类("data",Map.class)
 
然后在toBean()的时候把参数加上, 像:ShenTongInfo stInfo=(ShenTongInfo) JSONObject.toBean(o, ShenTongInfo.class, classMap);

http://www.111cn.net/jsp/Jsp-Servlet/41930.htm

137.Mybatis 原样输出${status} string类型的参数,会报 no getter方法,换成Map就没问题。

138.Spring解析${jdbc.driverClass}失败。
Could not load driverClass ${jdbc.driverClass} java.lang.ClassNotFoundException: ${jdbc.driverClass}

在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。

解决方法:Spring升级到3.1.1,Mybatis升级到3.1.1,mybatis-spring插件升级到1.1.1
使用"sqlSessionFactoryBeanName"而非"sqlSessionFactory"

<bean name="mapperScannerConfigurer_aa" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <!--  <property name="sqlSessionFactory" ref="sqlSessionFactory_aa"/> -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_aa"/>
        <property name="basePackage" value="..." />
        <property name="markerInterface" value="..." />
    </bean>


139.缩小filter的过滤范围。

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
/** 
 * 缩窄OpenSessionInViewFilter的过滤范围,请求css、js、图片等静态内容时不创建Session连接.  
 * 在web.xml中可配置excludeSuffixs参数,多个后缀名以','分割. 
 *  
 */

140.SpringMVC Controller方法接收Web请求参数。
使用@RequestParam这个注解。

让人意外的是:Integer和User等实体类,可以不使用这个注解。
而用Map接收参数时,必须使用@RequestParam这个注解。

默认使用@RequestParam Integer id,没有接收到id,会报错。
@RequestParam(required=false)表示id参数是可选的。


 

标签:Map,sqlSessionFactory,20,140,121,bean,使用,class,2013
From: https://blog.51cto.com/fansunion/6438174

相关文章

  • 2013年工作中遇到的20个问题(Bug):161-180
    161.用户表和超级用户分成2个表,很不合理,查询的时候,非常复杂。162.leftjoin还是很有“市场”的。机构表Org连接User时,想获得user的名字,可能存在,也可能不存在,leftjoin就适合。##多个leftjoin之间不能使用","隔开selectcg.*,u.loginNamecreatorName,org.nativeNameadvertiser......
  • 即将开幕!神策数据 2023 年金融营销科技价值发现论坛亮点前瞻
    由神策数据主办Hi-Finance、爱设计、亚马逊云科技协办和支持的开放融合引领营销5.0新纪元暨2023年金融营销科技价值发现论坛即将于6月9-10日在中国·杭州开幕届时百余位金融数字化从业者将共聚一堂探讨金融业发展的新思路、新路径、新趋势2023年,数字经济正进一步推动生产......
  • 如何续订Exchange2016的自签名证书
    续订Exchange自签名证书续订Exchange自签名证书的过程基本上相当于制作了一个新的证书。使用EAC以续订Exchange自签名证书打开EAC并导航到 “服务器>证书”。Inthe Selectserver list,selecttheExchangeserverthatholdsthecertificatethatyouwa......
  • SummerResearch_Log_20230607
    WorkingContent:1.阅读"VariationalContinualLearning"论文及代码关于ContinualLearning(CL)的认识:这是一个贝叶斯推断过程,这里是gpt给出的贝叶斯推断概念和例子:即先确定一个先验分布,需要求的未知参数是θ(当然也可以添加其他类似α,β)的超参数之类的)。接下来我们进行实......
  • P3498 [POI2010]KOR-Beads 题解
    前言:最近在做哈希的题,发现了这道好题,看题解里很多大佬的方法都很巧妙,自己就发一个较为朴素的方法吧。题意:题目传送门给你一个序列,需要求出数k,使划分的子串长度为k时,不同的子串数量最多。还要注意几件事:子串可以反转,比如(1,2,3)看做与(3,2,1)相同。如果不能正好划......
  • 200SMART CPU输入/输出接线的几个关键点
    总结来看,S7-200系列PLC提供4个不同的基本型号的8种CPU,其接线方式也可大致分为6种:1.CPUSR20接线2.CPUSR40接线3.CPUCR40接线4.CPUST40接线5.CPUSR60接线6.CPUST60接线除了CPU外,我们还需要了解200smartPLC的数字量输入/输出接线。1.数字量输入接线S7-200SMART的数字量输入......
  • 【题解】 P2221 [HAOI2012]高速公路
    传送门输入时将\(r\)先减1。发现收费之和为$$ans=\sum\limits_{i=l}^{r}a_i\times(r-l+1)\times(i-l+1)$$化简得\[ans=\sum\limits_{i=l}^{r}a_i\times(-i^2+i\times(r+l)+(r-r\timesl-l+1))\]发现可以用线段树来维护:\(s......
  • ubuntu 20.04 lxd 配置容器内使用GPU
    1.检查自己的显卡类型,同时在宿主机上安装显卡驱动一般选择推荐的proprietary,tested  2.配置lxd的容器并添加GPU设备 3.在容器中运行相同驱动版本在nvidia官网上下载驱动 shNVIDIA-Linux-x86_64-520.61.05.run--no-kernel-module4.在容器中配置docker版本19......
  • CMU15445 (Fall 2020) 之 Project#1 - Buffer Pool 详解
    前言去年暑假完成了CMU15-445Fall2019的四个实验,分别对应下述博客:CMU15445(Fall2019)之Project#1-BufferPool详解CMU15445(Fall2019)之Project#2-HashTable详解CMU15445(Fall2019)之Project#3-QueryExecution详解CMU15445(Fall2019)之Proje......
  • 2023.6.7 Linux系统日志管理
    01Linux系统⽇志管理系统⽇志架构概述syslog⽇志审查Journal⽇志审查Journal⽇志持久化⽇志轮询logrotate系统⽇志架构概述在rhel7系统中有两个⽇志服务,分别是传统的rsyslog和新添加的systemd-journalsystemd-journald是⼀个改进型的⽇志管理服务,可以收集来⾃内核......