2012年工作中遇到了很多问题,刚刚开始时,遇到的问题没有及时记载下来,挺可惜的。
1.构造SQL语句--简化构造
select * from user where 1 =1 ; if(name != null){ and name ="fans"; } if(age != null){ and age= 1; } 如果不使用“1=1”, name != null name == null && age != null name == null && age == null 3种情况,太麻烦了。 如果有更多的参数,根本不能忍受!!
2. 前端js导入
<script type=""></script> 这种方式可以导入。
<script />不可以,有点不合理啊。
3.MySQL中使用getGeneratedKeys获取最后插入记录的自增id值有时当我们向MySQL数据库中插入一条记录后,我们需要获取最后插入记录的自增id值以进行接下来的查询等操作。
下面是在java中使用PreparedStatement的对象的getGeneratedKeys()方法获取最后插入记录的自增id值的示例:
String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//传入参数:Statement.RETURN_GENERATED_KEYS
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getEmail());
pstmt.executeUpdate();//执行sql
ResultSet rs = pstmt.getGeneratedKeys(); //获取结果
rs.next();
int id = rs.getInt(1);//取得id的值
// Mybatis中获取自增的主键值,是直接在 返回结果的Map<String,Object>中直接取出,而不是通过Dao层 返回值来获得的。 4.Eclipse自动提示功能配置:
配置步骤:
1 Window > Preferences > Java > Editor > Content Assist2 “Auto Activation triggers for java”这个选项就是指触发代码提示的的选项,
把“.”修改成".abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
意思就是指遇到26个字母的大小写和.(这些符号就触发代码提示功能了)
5. maven打包 存在旧的文件
使用Maven部署时,启动时总是报错。后来发现,没能将旧版class文件删掉,导致冲突。
6. mybatis的 resultMap和resultType不同,使用 提示功能时,选择错了,很难查找。
7. left join
如果id存在,连接查询,取出名字;否则,不连接。 2张表连接, 工作中,需要获得一个广告主的信息。如果广告主设置了行业信息,需要获得该行业的名字。
使用Left join可以解决。
8. Eclipse项目出现问题
build path出现问题:.classpath文件 项目名称 红叹号-资源文件确实 .classpath 其实是个文本格式的文件,使用Nodepad打开。 <?xml version="1.0" encoding="UTF-8"?><classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> <classpathentry kind="lib" path="lib/httpclient-4.2.jar"/> <classpathentry kind="lib" path="lib/httpcore-4.2.jar"/> <classpathentry kind="lib" path="lib/log4j-1.2.9.jar"/> <classpathentry kind="lib" path="lib/dom4j-1.6.1.jar"/> <classpathentry kind="output" path="bin"/></classpath>
把不需要的classpathentry删掉就可以了。 9.struts2 集成tiles 问题及解决办法
dtd 的语法定义和官方的不一样 。 struts2 提供的 是 <put name="title" value="Tiles Showcase"/>
而tiles 自己的是 <put-attribute name="title" value="Tiles Showcase"/>
10.Servlet 单实例 多线程
(MVC与三层架构 都是虚的,没有统一的答案) SpringMVC-Controller,Struts2 Action都可以是单例的? Service/DAO 都是单例的。 MVC与三层架构 都是 抽象的概念,有没有重复?有没有关系? MVC(解决展现层 问题) Model:Service层的输出? View:JSP/HTML Controller:SpringMVC-Controller,Struts2 Action 三层架构 显示层 ui、display 、 view (controller) 业务处理 business/logic 数据层 db、model、dao 11. Mybatis 数据类型 已经转好了,不必要再次转换 数据库中有个Timestamp类型的字段,Mybatis取出放进Map<String,Object>时,实际类型已经是Date类型了。 可以直接强制转换成Date类型。 Date date = (Date)map.get("startTime");
12. 看书?研究代码? 看书和研究代码 都是 提高编程功底的可行方法,你觉得呢?
13.$().post()同步异步14.性能监测工具JavaMelody 项目中用到了,值得熟悉下。
15. Hibernate 2级缓存--EhCache
项目中有些报表数据,数据量很大,使用了EhCache。后来又经常报错,去掉了。游资段为Blob类型的PO,User.hbm.xml则不能 使用EhCache。
16.Hibernate Session问题。
Hibernate老版使用的是org.hibernate.classic.Session,新版使用的是org.hibernate.Session。 17.找不到类org/apache/commons/lang/xwork/StringUtils Struts2-Spring-Plugin版本不兼容 18. Dom4j删除元素时,需要先找到 父结点,通过父结点删除 子元素。 Element parent; parent.remove(Element child); 而不能直接通过 根节点来删除。 19.当处理映射文件时,Hibernate 用反射(reflection)来决定这个映射类型。
这需要时间和资源,所以如果你注重启动性能,你应该考虑显性地定义所用的类型。
这个是网上看到的,感觉有点道理,待实践体会。
20.Spring注入bean时,有时会失败,然后程序中出现NullPointerException; 一种可能的因素是new了对象,比如 MyObject myObject = new MyObject(); 此时,Spring不再负责MyObject的注入。
相关阅读