个人小笔记

1.<context:property-placeholder location="classpath*:*.properties"/>


classpath*指的是src以及其子包(至于是直接子包,还是包括所有的子包,目前不清楚)
classpath指的是src包


2.@service 注解
如果@service后面接了从controller那边传过来的实现类对象名称
即 @service("bs") 那么在applicationContext-service.xml
里就不用配置<bean id="bs" class="ssm_ch01.demo.service.impl.BizServiceImpl"></bean>
反之,只是@service,就需要配置bean


3.@autowired [自动连接] 注解,
在不使用注解时候(即所有的注解都不使用的时候),我们需要配置相应的bean
比如说applicationContext-service.xml中的




并且在服务层,也就是实现类中,要给私有化的接口
[如:private BizDao bizDao]提供set和get的方法,


public BizDao getBizDao() {
return bizDao;
}


public void setBizDao(BizDao bizDao) {
this.bizDao = bizDao;
}

但是使用@autowired即:
@Autowired
private BizDao bizDao;


之后,我们就可以不用配置
<bean id="bs" class="ssm_ch01.demo.service.impl.BizServiceImpl"></bean>


同时也不用写set和get方法了,因为spring已经帮我们做了




4.model.addAttribute和request.setAttribute同理


5.copy项目的时候,除了变量、链接地址、xml文件、别名、还有注解需要更改添加


6.注解代替response.getWriter时候,

解决方法一:
 @RequestMapping(value="/getphone",produces = "text/plain;charset=utf-8")




    /**输入手机号码后判断手机号是否存在*/
    @RequestMapping(value="/getphone",produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String getphone(String phone,HttpSession session){
       Users u=service.selectPhoneService(phone);
       if(u==null){//如果为空,则需要注册
          String str="请您先注册,再登录。";
          session.setAttribute("str", str);
          return "请您先注册,再登录。";
       }
       return "true";




方法二,在spring-mvc.xml中添加:


<!-- 处理请求返回json字符串的中文乱码问题 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>



7.Integer int一些关系
Integer a1=new Integer(x)
Integer a2=new Integer(x)
a==a2
两个都是 new Integer 的时候,其他的不用看,结果为false(比的是堆内存的地址,都是new出来的,所以地址不同,由程序员控制)


Integer a1=new Integer(x)
Integer a2=x
a1==a2
一个是 a1的new Integer 引用的堆内存的地址(或者说引用指向堆),而a2指向专门存放它们的内存(方法区的常量池)
所以也是false


Integer a1=127
Integer a2=127
栈内存缓存区会对值是-128到127的Integer对象进行缓存,所以在这个取值范围内的Integer对象值相同时,
指向专门存放它们的内存(方法区的常量池)的地址相同,而非这个范围,就会被重新new也就重新实例化,那么就是false


int a1=222
Integer a2 =222
int和integer之间会有自动拆装箱的过程,所以是true




8.http://www.mvnrepository.com
mavenrepository下载地址


9.response.getCookie()
(JSP中获取cookie)


10.把JSON字符串转pojo的时候,JSON对象中的键要和pojo中的私有属性名一致
Product Pro = (Product) JsonUtil.getObject4JsonString(pro,
Product.class);





@RequestMapping(value = "/ajax.action", produces = "text/plain;charset=UTF-8")
@ResponseBody
public String executionQuery(@RequestParam("pro") String pro,
HttpServletRequest request, HttpServletResponse response,
Model model) {
System.out.println("接收到的-----------------------------------"+pro);
Product Pro = (Product) JsonUtil.getObject4JsonString(pro,
Product.class);
if(Pro==null){
System.out.println("pro居然是空的");
}
System.out.println("proname:**********************************"+Pro.getProname());
// 把JSON字符串变成pojo对象
List<SmbmsBill> ListPro = bs.getQueryBillByKeyWords(Pro);


JSONArray jarr = JSONArray.fromObject(ListPro);
return jarr.toString();
}





11.单例和SqlSessionFactory
需要导入jar包

package com.accp.util;


import java.io.InputStream;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class BuildSqlSessionUtil {
private BuildSqlSessionUtil() {
}


public SqlSessionFactory ssf = null;
public static BuildSqlSessionUtil bscu = null;


public static BuildSqlSessionUtil getInstance() {
if (bscu == null) {
bscu = new BuildSqlSessionUtil();
}
return bscu;
}


public SqlSessionFactory getSqlSessionf() {
String resource = "mybatis-config.xml";
try {
if (ssf == null) {


InputStream inputStream = Resources.getResourceAsStream(resource);
ssf = new SqlSessionFactoryBuilder().build(inputStream);
}
return ssf;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}


}


































public class Test_01 {
public static void main(String[] args) {
SqlSessionFactory ssf = BuildSqlSessionUtil.getInstance()
.getSqlSessionf();
SqlSession sqlsession = ssf.openSession();
try {
List<province>pinfo = sqlsession.getMapper(BizMapper.class).getProvinceInfo();
sqlsession.commit();
for (province pv : pinfo) {
System.out.println("qq"+pv.getPid()+"qq"+pv.getPname()+"qq"+pv.getPcity());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
sqlsession.close();
}
}
}













12.Hibernet的实体类中,谁是主键,谁的xml中就可以配置set集合,并且类中也要私有化set集合。
a表
b表
ab表
多对多
ab表可以被配置在a表或者b任意一方中的xml中


我私有的set集合(你的泛型) 共用表 级联
我被引用的主键
你的路径 你的主键名




13.
add import 是快捷键 ctrl+shift+m
organize imports应该是ctrl+shift+o的操作
add import 导入指定的类
organize imports导入所有需要导入的类,并且如果有些
import是没用的,那么eclipse会自动删除


14./**回车 可以完成快速注释,方法被调用时鼠标hover带说明


15.泛型T与占位符


泛型T的理解是这样的,T代表某一个具体的引用数据类型!
List或者Set、Map还有Tree这些集合,是可以存放任何引用数据类型的,但是在我们实际使用的过程中,你会发现,我们在集合中保存的数据,一般来说其类型是一致的!
比如你有一个Student类,一个Teacher有一个存放学生的集合List<Student> studentes = ArrayList<Student>();
泛型的使用,是在编译过程中进行约束性检查!
 
比如studentes.add(new Student())是正确的添加元素!studentes.add(new Teacher())则是错误的!
你的两个方法是有区别的:
第一个方法:返回的是<T>,泛型!有返回值!
第二个方法返回的是空!没有返回值!


16.ctrl+T 打开方法的实现继承层次结构图


17.全外连接full 表数据连接


18.当<welcome-file>后直接是请求时,需要在<servlet-mapping>中
添加该请求的具体请求映射名称:
<url-pattern>/init.action</url-pattern>


具体如下:


<welcome-file-list>
<welcome-file>init.action</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
<url-pattern>/init.action</url-pattern>
</servlet-mapping>


19.
ctrl+o 当前类中查询相关属性
ctrl+shift+r 开启查询功能(当前项目中查询)


20.
A接口的类名后加了泛型,并且泛型继承C类,
此时B类实现A类,被实现的A类的泛型中不需要写C类,
但是B类的类名后要加泛型,并且泛型要继承C类


如: public interface A<T,E extends Serialiazable>


public class B<T,E extends Serialiazable> implements A<T,E>




21.
JSP页面通用头,支持jstl(el表达式)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>




22.对日期转化成普通格式到页面上时
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>


<td>
<fmt:formatDate value="${xl.rq }" type="date" dateStyle="default"/>
</td>


23.传输二进制文件流
<form action="springUpload.action" method="post" enctype="multipart/form-data" style="border:1px solid green; height:100px;">


24.
JSON.stringify("字符串")
JSON.stringify(json对象)


25.
使用ssm框架注解的时候进行ajax的requestMapping时
jsp页面的ajax中必须配置

dataType:"JSON",





26.

数组有四种定义的方式 
使用构造函数: 
var a = new Array(); 
var b = new Array(10); 
var c = new Array("first", "second", "third"); 
或者数组直接量: 
var d = ["first", "second", "third"]; 
扩展:
 function  ObjStory(id,biaoti,author,type) //声明对象
     {
        this.ID = id;
        this.Biaoti= biaoti;
        this.Author= author;
        this.Type = type;
       
     }
var arr = new Array();//声明数组,用来存储标题信息
 var writer= new ObjStory(11,‘大家去看海’,‘李大胆’,‘文艺类’);//声明对象
 arr[0]=writer;//向集合中添加对象
另一种方法:
var Array=[];
Array.push(new ObjStory(12,‘大家去看海’,‘李大胆’,‘文艺类’));
Array.push(new ObjStory(14,‘大家去看天’,‘李小胆’,‘文艺类’));



27.
js把超长毫秒时间戳转年月日格式



得到后台从数据库中拿到的数据我们希望格式是  


                2016年10月25日 17时37分30秒 或者 2016/10/25 17:37:30


然而我们前台得到的却是一段数字(时间戳,毫秒数)


                1477386005     


我们要将时间戳转化为我们想要的格式。


核心方法 :


1477386005是我从后台得到时间戳  (注意:有的时候得到的时间戳是已经乘以1000的)
var unixTimestamp = new Date( 1477386005*1000 ) ;
commonTime = unixTimestamp.toLocaleString();
 alert(commonTime);






但是我希望转换为我自己想要的格式,就在本页面重写一下  toLocaleString()方法即可。


Date.prototype.toLocaleString = function() {
          return this.getFullYear() + "年" + (this.getMonth() + 1) + "月" + this.getDate() + "日 " + this.getHours() + "点" + this.getMinutes() + "分" + this.getSeconds() + "秒";
    };








// 简单的一句代码
var date = new Date(时间戳); //获取一个时间对象


/**
 1. 下面是获取时间日期的方法,需要什么样的格式自己拼接起来就好了
 2. 更多好用的方法可以在这查到 -> http://www.w3school.com.cn/jsref/jsref_obj_date.asp
 */
date.getFullYear();  // 获取完整的年份(4位,1970)
date.getMonth();  // 获取月份(0-11,0代表1月,用的时候记得加上1)
date.getDate();  // 获取日(1-31)
date.getTime();  // 获取时间(从1970.1.1开始的毫秒数)
date.getHours();  // 获取小时数(0-23)
date.getMinutes();  // 获取分钟数(0-59)
date.getSeconds();  // 获取秒数(0-59)







28.
使用ajax时进行append操作,如果用jquery直接绑定到具体元素,会导致翻页后的jquery代码失效
使用live方法可以解决,具体格式

$('.clickme').live('click', function() {
  alert("Live handler called."); 
});

详件jqueryApi中讲解




29.
//Map集合用 JSONObject jarr = JSONObject.fromObject(sth);
//List集合用 JSONArray jarr = JSONArray.fromObject(sth);


30.mybatis模糊查询
1. sql中字符串拼接
   SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');
 
2. 使用 ${...} 代替 #{...}
   SELECT * FROM tableName WHERE name LIKE '%${text}%';
 
3. 程序中拼接
   Java
   // String searchText = "%" + text + "%";
   String searchText = new StringBuilder("%").append(text).append("%").toString();
   parameterMap.put("text", searchText);
 
   SqlMap.xml
   SELECT * FROM tableName WHERE name LIKE #{text};
 
4. 大小写匹配查询
   SELECT *  FROM TABLENAME  WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'
   或者 
   SELECT *   FROM TABLENAME  WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'




31.
遍历Map集合的方法


转]Java中HashMap遍历的两种方式
原文地址: http://www.javaweb.cc/language/java/032291.shtml


第一种:
  Map map = new HashMap();
  Iterator iter = map.entrySet().iterator();
  while (iter.hasNext()) {
  Map.Entry entry = (Map.Entry) iter.next();
  Object key = entry.getKey();
  Object val = entry.getValue();
  }
  效率高,以后一定要使用此种方式!
第二种:
  Map map = new HashMap();
  Iterator iter = map.keySet().iterator();
  while (iter.hasNext()) {
  Object key = iter.next();
  Object val = map.get(key);
  }
  效率低,以后尽量少使用!
 
       HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:
  public class HashMapTest {
  public static void main(String[] args) ...{
  HashMap hashmap = new HashMap();
  for (int i = 0; i < 1000; i ) ...{
  hashmap.put("" i, "thanks");
  }
  long bs = Calendar.getInstance().getTimeInMillis();
  Iterator iterator = hashmap.keySet().iterator();
  while (iterator.hasNext()) ...{
  System.out.print(hashmap.get(iterator.next()));
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
  listHashMap();
  }
  public static void listHashMap() ...{
  java.util.HashMap hashmap = new java.util.HashMap();
  for (int i = 0; i < 1000; i ) ...{
  hashmap.put("" i, "thanks");
  }
  long bs = Calendar.getInstance().getTimeInMillis();
  java.util.Iterator it = hashmap.entrySet().iterator();
  while (it.hasNext()) ...{
  java.util.Map.Entry entry = (java.util.Map.Entry) it.next();
  // entry.getKey() 返回与此项对应的键
  // entry.getValue() 返回与此项对应的值
  System.out.print(entry.getValue());
  }
  System.out.println();
  System.out.println(Calendar.getInstance().getTimeInMillis() - bs);
  }
  }
  对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对应的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。




Java中HashMap遍历的两种方式(本教程仅供研究和学习,不代表JAVA中文网观点)
本篇文章链接地址:http://www.javaweb.cc/language/java/032291.shtml
如需转载请注明出自JAVA中文网:http://www.javaweb.cc/




还是第一种好,简单。。。




32.
JSP中的请求如果没有反应的时候,尝试在JSP文件头的title后添加如下代码
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
<base href="<%=basePath%>"/>
<!-- 该行可要可不要 -->


<link href="<%=basePath%>/css/style.css" rel="stylesheet" type="text/css"/>
<%-- 原本<script type="text/javascript" src="../../js/jquery-1.4.2.js"></script> --%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值