1
ToStringBuilder?
系统中一般都要打印日志的,因为所有实体的toString()方法都用的是简单的”+”,因为每”+” 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。使用ToStringBuilder就可以避免暴内存这种问题的。
2
Java对象序列化
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
将那些实现了Serializable接口的对象转换成一个字符序列,并能够在以后将这个字节序列完全恢复为原来的对象。这一过程甚至可通过网络进行,这意味着序列化机制能自动弥补不同操作系统之间的差异。 只要对象实现了Serializable 接口(记住,这个接口只是一个标记接口,不包含任何的方法)。只能将支持java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
3
Jackson常用注解标签介绍:
@jsonignore的作用
一般标记在属性或方法上;作用于序列化与反序列化;作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JsonIgnoreProperties
此注解是类注解,作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JsonIgnore
此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
@JsonFormat
此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如@JsonFormat(pattern= "yyyy-MM-dd HH-mm-ss")
@JsonSerialize
此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。
4
Mybatis的复杂属性
在User对象中有一个字段password,他的类型是其他某个特定的类型T,这个类只有一个字段a。Mybatis的复杂属性指的就是User中password这样的属性。如果我们不用复杂属性这个特性来配置User对象,我们能怎么做呢?
<resultMap type="User" id="UserResult">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="username" jdbcType="VARCHAR" property="username"/>
<result column="password" jdbcType="VARCHAR" property="password.a"/>
</resultMap>
5
Java泛型:泛型类、泛型接口和泛型方法
原谅下面都是从一个博客中copy过来的。。
有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。
泛型类
容器类应该算得上最具重用性的类库之一。先来看一个没有泛型的情况下的容器类如何定义:
public class Container {
private String key;
private String value;
public Container(String k, String v) {
key = k;
value = v;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Container类保存了一对key-value键值对,但是类型是定死的,也就说如果我想要创建一个键值对是String-Integer类型的,当前这个Container是做不到的,必须再自定义。那么这明显重用性就非常低。
当然,我可以用Object来代替String,并且在Java SE5之前,我们也只能这么做,由于Object是所有类型的基类,所以可以直接转型。但是这样灵活性还是不够,因为还是指定类型了,只不过这次指定的类型层级更高而已,有没有可能不指定类型?有没有可能在运行时才知道具体的类型是什么?
所以,就出现了泛型。
public class Container
public class Main {
public static <T> void out(T t) {
System.out.println(t);
}
public static void main(String[] args) {
out("findingsea");
out(123);
out(11.11);
out(true);
}
}
可以看到方法的参数彻底泛化了,这个过程涉及到编译器的类型推导和自动打包,也就说原来需要我们自己对类型进行的判断和处理,现在编译器帮我们做了。这样在定义方法的时候不必考虑以后到底需要处理哪些类型的参数,大大增加了编程的灵活性。
再看一个泛型方法和可变参数的例子:
public class Main {
public static <T> void out(T... args) {
for (T t : args) {
System.out.println(t);
}
}
public static void main(String[] args) {
out("findingsea", 123, 11.11, true);
}
}
输出和前一段代码相同,可以看到泛型可以和可变参数非常完美的结合。
6
trim() 是什么意思? 他的所用是去掉字符序列左边和右边的空格,
7
Eclipse 代码注释的小问题
(1)多行注释
/*
*/
快捷键是 ctrl + shift + /
取消注释 可以是ctrl + shift + / , 也可以ctrl + shift + \,用多行注释的好处是在Eclipse中可以进行折叠
(2)单行注释
//
注释和取消都是 ctrl + shfit + c
8
Integer 和int
int 是基本数据类型
Integer是其包装类,注意是一个类。
int和Integer不能够互用,因为他们是两种不同的数据类型;
ArrayList al=new ArrayList();
int n=40;
Integer nI=new Integer(n);
al.add(n);//不可以
al.add(nI);//可以integer 是对象,用一个引用指向这个对象
更多细节的
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html
这个里说的我觉得更好了。。我也无法去理解的更好了。
9
Object… args
具体就是看到在某个方法的参数列表中出现了
public void find (Object... args){
}
Object表示一个对象,这个意思就是参数是可变的,对象里可以存放任何类型的数据:String int 数组,list ,或者多个不同类型的参数,很灵活的。不过要想使用都要想使用Object里的数据几乎都要先判断是不是null后在转换成想要的数据 。
10
## 标题 ##mysql中tinyint、smallint、int、bigint的区别
tinyint
从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1 个字节。unsigned 是从 0 到 255 的整型数据。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。unsigned 是从 0 到 65535 的整型数据。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字).存储大小为 4 个字节。unsigned 是从 0 到 4294967296 的整型数据。
bigint
从 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 的整型数据(所有数字)。存储大小为8个字节。
在MySQL中,定义诸如int(M),这里int(10)定义为10字节的整型。就是输入的整型长度不能超过10字节。
11
mysql中DATETIME,DATE的区别
DATETIME 类型可用于需要同时包含日期和时间信息的值。MySQL 以’YYYY-MM-DD HH:MM:SS’ 格式检索与显示DATETIME 类型。支持的范围是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。(“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)
DATE 类型可用于需要一个日期值而不需要时间部分时。MySQL 以’YYYY-MM-DD’ 格式检索与显示 DATE 值。支持的范围是 ‘1000-01-01’ 到 ‘9999-12-31’。
TIMESTAMP[(M)]时间戳。范围是’1970-01-01 00:00:00’到2037年。TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
12
数据库连接池(connection pool)
数据库使用时建立连接,完成时断开连接,当处理的数据量很大的时候,就很耗时和效率。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
为解决传统开发中的数据库连接问题,可以采用数据库连接池技术。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
DBCP连接池和C3P0连接池 具体的就是你创建的“dbcp.properties”文件。
后记:最近还在琢磨那个ssm框架的论坛的案例实现整合的事情。所以没怎么学。每天学一点,知道的更多一些。安心踏实的学习。