`
韩悠悠
  • 浏览: 846794 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
文章列表
Hibernate中的对象有三种状态:瞬时(Transient),持久(Persistent),托管(Detached).同时我们称持久层中的对象为PO(Persistence Object),瞬时对象和托管对象也可称为VO(Value Object). 1 对于瞬时状态:由new创建的Java对象。不合Session实例关联,在数据库中没有和瞬时对象关联的记录 2 持久化状态:和Session实例相关联,在数据库中由和持久对象关联的记录。 3 托管状态:以持久化关联的Session被关闭后,对象就会编程托管的。托管的状态还可以转化为持久化状态。它的本质上和瞬时对象相同,只是比瞬时对象多了在数据 ...
Hibernate中又两种缓存:一级缓存和二级缓存。 下面我们来看看一级缓存。在Session中存放的是各种对对象和数据库操作的结果。一般的对于查询操作,首先查找的是缓存,缓存中没有再去查找数据库,如果有则立即换回。这里就涉及到了脏数据的问题。为了保证数据的正确性,我们一般要在必要的时候对缓存进行清理,清理的过程就是把缓存中的数据和数据库中的数据一致的过程。同时Session还有一个功能就是能够减少对数据库直接操作的次数,减少了访问流量。 下面看一下session的清理功能。 在Hibernate中,会在一下情况下调用Session.flush();方法。 1 事务提交时,如果flush的模式不 ...
用语句创建器更新数据库第一个回调接口是PerparedStatementCreator,实现这个接口来覆盖整个更新过程的语句创建任务。我们先看下源代码中的PerparedStatementCreator接口,然后实现我们自己的接 口。   public interface PreparedStatementCreator { /** * Create a statement in this connection. Allows implementations to use * PreparedStatements. The JdbcTemplate will clos ...
jdbcTemplate整理 为了实现基本的CRUD操作,spring给我们提供了jdbcTemplate这个模板类.实现最常用的CRUD操作。先看jdbcTemplate的定义   public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { /** Custom NativeJdbcExtractor */ private NativeJdbcExtractor nativeJdbcExtractor; /** If this variable is false, we will ...
在是使用spring时候,常常配置数据源,   <bean id="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSoruce"> <property name="driverClassName" value="org.apache.derby.jdbc.ClinetDriver"> <property name="url" value=" ...
在java.util类库中可以找到Arrays类,它有一套用于数组的static实用方法,其中有六个基本方法:equals()用于比较俩个数组是否相同(deepEquals()用于多维数组),fill用于填充测试数据,sort()用于对数组排序,binarySearch()用于在已经排序的数组中查找元素,toString()产生数组的String方法,hasCode()产生数组的散列吗,Arrays.asList()接受任何的序列或数组作为参数,并将其转变为List容器,   复制数组 java标准类库提供有static方法System.arraycopy(),用于复制数组,比用for循环 ...
在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常迅速,但是带来的代价是数组对象的大小被固定。并且在其生命周期中不可改变,当然可通过使用ArrayList ...
擦除失去了在泛型代码中执行某些操作的能力,任何在运行时需要知道确切类型信息的操作都将无法工作,看下面的例子:   public class Eras<T>{ public static void main(String[] args){ if(ages instanceof T){}//出错 T var = new T(); //出错 T[] array =new T[100];//出错 } }   在例子中使用instanceof失败,因为它的类型已经被擦除了。     不能创建泛型数组, 如果想创建泛型 ...
泛型的危害不是一个语言特性,我们必须明确这一点,而在在运行时     例如在List<T>这样的类型在运行时都替换成List,而普通的类型变量在未指定边界的情况下都将替换成Object类型   替换的代价是显而易见的,即在运行时不能显示的引用运行的操作,例如转型,instanceof和new表达式。因为所有关于参数类型的信息都被丢失了。 当我们创建了Foot<Cat> foot  = new Foot<Cat>();看起来好像拥有了参数的类型,但事实并非如此,其实它只是一个Object类型而已。   例子:   public class S ...
  在泛型代码内部,无法获得任何有关泛型参数类型的信息。   例如:   public class TypeValue{ public static void main(String[] args){ Class c1 = new ArrayList<String>().getClass(); Class c2 = new ArrayList<String>().getClass(); System.out ...
一个实用的Set例子   public class Sets{ public static <T> Set<T> union<Set<T> a ,Set<T> b){ Set<T> result = new HashSet<T>(a); result.addAll(b); return result; } public static <T> Set<T> intersection(Set<T> a,Set<T> b){ ...
 下面的例子可以为任何类构造一个对象。   public interface Generator<T> { T next(); } public class BasicGenerator<T> implements Generator<T> { private Class<T> type; public BasicGenerator(Class<T> type){ this.type = type; } public T next() { try { // Assumes type ...
泛型方法与可变参数列表能够很好的共存。   看下面的例子     public class GenericVarargs{ public static <T> List<T> makeList<T... args){ List<T> result = new ArrayList<T>(); for(T item :args) result.add(item); return result; } public static void main(String[] args){ ...
我们最大的遗憾也许就是使用了泛型以后,在程序中加入了更多的代码。下面看一个工具类,它包含各种各样的static方法,专门用来创建各种各样的容器对象。   public class New { public static <K,V> Map<K,V> map() { return new HashMap<K,V>(); } public static <T> List<T> list() { return new ArrayList<T>(); } public stati ...
  泛型不经可以用在整个类上,同样也可以用在雷中包含参数化的方法,而这个方法所在的类可以是泛型,也可以不是泛型,也就是说,是否拥有泛型方法,与其所在的类是否是泛型没有关系。   一个基本的原则,优先使用泛型方法,然后才是泛型类,另外对于static方法而言,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。   泛型方法的定义:   public Class Methods{ public <T> void f(T x){ System.out.println(x.getClass().getName()); ...
Global site tag (gtag.js) - Google Analytics