`
realizeamg
  • 浏览: 33163 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
文章列表
classloader准备一个类大致分为三步: 1 加载 查找并加载类的class文件的二进制数据到内存中,将其存放在运行时数据区的方法区内,然后在堆区创建一个Class对象,用来封装在方法去内的数据结构 2 链接 将已经读入到内存中的类的二进制数据合并到虚拟机的运行时环境中去 (1)验证:确保被加载类的正确性,包括类文件结构检查,语义检查,字节码验证,二进制兼容性验证 (2)为类的静态变量分配内存,并将其初始化为默认值 (3)把类中的符号引用转换为直接引用 3 初始化 为类的静态变量赋予正确的初始化值 JVM规范要求虚拟机在每个类或接口被java程序主动使用时才初始化他们,而类加载器并不需要 ...
在iBatis中(现在已经更名为mybatis),当要实现在某个数据表字段和POJO的 property之间做特殊类型的转换时,如果两个类型转换不是iBatis默认支持的,需 要自己实现一个TypeHandler来满足要求。TypeHandler是iBatis中定义的接口 public interface TypeHandler {   public void setParameter(PreparedStatement ps, int i, Object parameter, String jdbcType)       throws SQLException;   public Objec ...

iBatis小经验

    博客分类:
  • Java
1. 在MySQL下,对于autoincrement的pk,在insert的时候是通过last_insert_id()来获得。但如果插入失败,MySQL会返回最近一个insert结果的id,对于insert后要获取id来进一步处理的时候,可以结合row_count()来判断是否insert成功 select if(row_count() > 0, last_insert_id(), 0) as id from dual  或者 select case row_count() when 1 then last_insert_id() else 0 end as id
在Spring中实现AOP根据版本不同,可以有大致四种配置方式。现简单列一下。在介绍Spring的AOP配置方式前,先要注意Spring中Advisor的概念。在Spring中Advisor是Advice和Pointcut的结合,但它还不是AOP概念上的Aspect。因为在Spring中Advisor还是Spring用来生成Aspect对象的一个原型,根据配置的不同,Spring可以只对某个类生成Aspect,也可以对所有的类生成Aspect。 1. 基于xml配置文件的代理配置方式 这种方式在2.0以后很少用了,原因是配置项过多,过于繁琐。但对于理解Spring AOP还是很有帮助的 1.1 ...
目前AOP的三个主要实现为 AspectJ(http://eclipse.org/aspectj) JBoss AOP(http://labs.jboss.com/portal/jbossaop/index.html Spring AOP(http://www.springframework.org) 惭愧,目前还只是初步了解Spring AOP,对另外两个完全无知 希望后面可以找点时间了结下AspectJ(祈祷老婆不要总是透支我的时间在商场或去商场的路上 ) Spring AOP是采用运行时织入的,是基于代理实现的。因此SpringAOP就局限于方法织入,如果需要构造器或属性织入,Spri ...
AOP可以方便的实现一些交叉事务的功能,使程序员能够专注于主要的业务逻辑。同事,也提高了程序的可维护性。但AOP的一些概念个人感觉比较难理解,而且翻译成中文就更晦涩难懂。自己慢慢有了一些体会,为了对付烂记性,写的不一定对,如果哪里有错误了,还希望网友能给指正。先谢谢了 Advice:通知 Advice定义了切面做什么,什么时候做。这里切面这个词又引入了另外的概念,这不循环定义了么?我的理解,Advice就是定义了你要交叉进主业务的那个业务要做什么,什么时候做。这个什么是后,其实就是方法调用前,调用后,还是前后都要,或抛出异常的情况下。其实说什么时候,确切的说也是什么地方啦。方法调用前/后,不也 ...
定义:策略模式定义算法族,分别封装起来,算法之间可以互相替换。算法的变化独立于使用算法的客户。 说白了,就是如果我定义一个类A,而这个类的某些行为相对独立而又经常变化,那么就可以将这些行为封装为B,并通过使用不同的实现类B1,B2等来实现行为的变化。 在开发中,会碰到一个类的某些行为在子类间是不同的,一些子类是这样,而另外一些又是那样。如果通过继承,将行为定义在父类中,则不能兼顾子类的不同情况,满足不了需求,通过将这些行为定义在接口中或抽象方法,再由子类实现,那么相同行为的子类间会重复大量的代码,不利于修改和维护。这时候策略模式就比较适用了。通过将行为定义到策略接口中,并在不同的策略子类中实 ...
临时要用freemarker,可选的几个eclipse插件 (1)http://freemarker-ide.sourceforge.net/ ,没用过 (2)http://sourceforge.net/project/showfiles.php?group_id=163305 解压的plugin下,另外再把插件内freemarker的jar包用freemarker最新的替换掉,再编辑一下MANIFEST.MF里的Bundle-ClassPath,用自己的新jar包。最后,再设置一下eclipse的preference就ok了
全columns插入,指定全部列值: INSERT [IGNORE] INTO table_a VALUES (....); 指定部分列 INSERT INTO table_a (column_a, column_b, ....) VALUES (...) 使用query结果 INSERT INTO table_a (colume_a, column_b ) SELECT column_a, column_b FROM table_a where ....;
数据备份: mysqldump --user=user --password=pwd --result-file=data.sql --where= "where condition" database_name table_name 恢复:从命令行或者mysql client导入 查看mysql日志: mysqlbinlog log_path 从日志恢复数据: mysqlbinlog logs | mysql 数据写入文件 SELECT column_a, column_b FROM table_a INTO FILE 'data.csv' FIELDS TERM ...
如果用几个COLUMN共同建立了一个INDEX,如果查询时只指定了部分的字段,如果满足以下条件,也可以利用INDEX: (1)建立INDEX的前n个字段必须出现在查询条件中,出现几个字段,MySQL就可以索引到第几个层次 (2)查询中不能有没有建立INDEX的COLUMN用于OR子句 使用索引的小技巧: (1)如果有多个字段一起建立INDEX,那么重复值越高的COLUMN在建立索引的子句中应该越优先,这样可以减小INDEX数量,加快速度 (2)索引越小,速度越快。如果对很大的COLUMN建立索引,索引就会很大。索引尽量在设计表的时候保证COLUMN的类型尽量小 (3)对长的COLUMN,比如V ...
一、学习Ruby离不开的网站 Ruby的项目主页:http://www.ruby-lang.org Ruby开源项目:http://rubyforge.org/,包括Rake,ActiveRecord等都汇集于此 Ruby文档:http://www.ruby-doc.org/ 二、安装Ruby 目前大多数的Linux发行版都已经自动安装Ruby,Windows下可以选择installer程序自动安装或者安装Cgwin(里面带有Ruby)。高手也可以编译安装了 。具体的安装包http://rubyforge.org上面有,也可以从http://ruby-lang.org上找到入口。 三、安装R ...
一、Aliases: (1)Column Aliases aliase不能用在WHERE,USING,ON等子句中 (2)Table Aliases 多用来实现单一表的关联查询。比如,在一个唱片表album(artist_id, album_id, album_name)中,想要知道是否有不同人的唱片同名,不用aliases就无法实现: SELECT a1.artist_id, a2.album_id FROM album AS a1, album AS a2 WHERE a1.album_name=a2.album_name AND a1.artist_id <> a2.artis ...
方括号中的属性可以在DDL语句中控制COLUMN的详细属性 一、整数型 1.INT[(width)][UNSIGNED][ZEROFILL] MySQL用4 bytes存储INT型数据,其值在-2,147,483,648到2,147,483,647之间,如果选择了UNSIGNED类型,那么值在0到4,294,967,295。INT和INTEGER可以互换。(width)指定了数字的位数,如果实际的值超出了这个位数,那么(width)会被忽略。如果是UNSIGEND,通过指定ZEROFILL会由0在左侧占位补足 2.BOOLEAN 也可以写为BOOL或BIT,需要1个byte空间,用来存储boo ...
1.创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [DEFAULT CHARACTER SET character_set_name COLLATE collate_name] COLLATE决定了选择的字符集在作字符串排序时候的顺序规则 2.删除数据库 DROP DATABASE 3.创建表 CREATE [TEMPORARY] TABLE table_name (     column_name_one DATATYPE(BITS) [NOT NULL|NULL] [DEFAULT value]  [AUTO_INCREMENT] ...
Global site tag (gtag.js) - Google Analytics