Mysql账户体系
1 | mysql> use mysql; |
这里的Type指java.lang.reflect.Type, 是Java中所有类型的公共高级接口, 代表了Java中的所有类型. Type体系中类型的包括:数组类型(GenericArrayType)、参数化类型(ParameterizedType)、类型变量(TypeVariable)、通配符类型(WildcardType)、原始类型(Class)、基本类型(Class), 以上这些类型都实现Type接口.
Type 表示的全部类型而每个Class对象表示一个具体类型的实例,如String.class仅代表String类型。由此看来Type与 Class 表示类型几乎是相同的(Class实现接口Type),只不过 Type表示的范围比Class要广得多而已。当然Type还有其他子类。
在
java.lang.String
的源码中明确说明,String
类表示字符串,Java中所有的字符串传字面值(如:”abc”)都是该类的实例;并且字符串是常量,一旦创建之后则不可以改变,String buffers支持可变的字符串。因为String
对象是不可变的,但是可以共享。
1 | * The {@code String} class represents character strings. All |
通过API定义总结以下信息:
Serializable
,说明可以进行序列化Comparable
,说明可以大小比较CharSequence
,说明String本身就是char类型的数组,而且通过成员变量定义可以进行佐证在Java中的方法调用使用的都是值传递,Java 中的所有自变量或参数传递都是通过传递句柄进行的。也就是说,当我们传递“一个对象”时,实际传递的只是指向位于方法外部的那个对象的“一个句柄”。所以一旦要对那个句柄进行任何修改,便相当于修改外部对象。此外:
hibernate中session.find/load方法都能通过指定实体类名和id从数据库中读取指定的记录,并且返回与之对映的实体对象。但是它们也有很大的区别 ,find()和load()方法在执行检索时的区别:
find()在类检索级别时总是执行立即检索而且如果检索不到相关的对象的话会返回null,load()方法则会抛出一个ObjectNotException
load()方法可返回一个实体代理类类型,而find()方法直接返回的是实体类对象。
load()方法可以充分利用内部缓存和二级缓存,而find()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询。
所谓N+1问题,使用hibernate查询数据,首先返回数据的id信息,并没有返回所有的对象信息,只有在真正使用的时候,在使用这个id对数据库中查询数据,一次查询多次调用数据库(缓存)的情况,就是所谓的N+1问题。以下方法或者策略会出现N+1问题:
存在iterator的原因是,有可能会在一个session中查询两次数据,如果使用list每一次都会把所有的对象查询上来,如果使用iterator仅仅只会查询id,此时所有的对象已经存储在一级缓存(session的缓存)中,可以直接获取
1 | /** |