月度归档:2014 年二月

mybatis自动生成代码文件

下载文件:https://code.google.com/p/mybatis/downloads/list?can=1&q=Product%3DGenerator
下载后解压,里面包含文档,我下载的是1.3.2版本。
建立generator.xml:

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration  
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
      
    <generatorConfiguration>  
      <!-- classPathEntry:数据库的JDBC驱动的jar包地址-->  
      <classPathEntry location="D:\jarlib\jdbc\mysql-connector-java-5.1.27.jar" />  
    <context id="DB2Tables" targetRuntime="MyBatis3">  
      <commentGenerator>  
        <!-- 是否去除自动生成的注释 true:是 : false:否 -->  
        <property name="suppressAllComments" value="true" />  
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->  
      </commentGenerator>  
      <jdbcConnection driverClass="com.mysql.jdbc.Driver"  
              connectionURL="jdbc:mysql://localhost:3306/mydb"  
              userId="root"  
              password="root">  
      </jdbcConnection>  
        <!--  默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer   
             true,把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal   
         -->   
      <javaTypeResolver >  
         <property name="forceBigDecimals" value="false" />  
      </javaTypeResolver>  
      <!-- targetProject:自动生成代码的位置 -->  
      <javaModelGenerator targetPackage="entity" targetProject="D:\workspace\jarvis\test\webtest\src">  
          <!-- enableSubPackages:是否让schema作为包的后缀 -->       
          <property name="enableSubPackages" value="true" />  
        <!-- 从数据库返回的值被清理前后的空格  -->   
          <property name="trimStrings" value="true" />  
      </javaModelGenerator>  
      <!-- mapper xml -->  
      <sqlMapGenerator targetPackage="conf"  targetProject="D:\workspace\jarvis\test\webtest\src">  
           <property name="enableSubPackages" value="false" />  
      </sqlMapGenerator>  
       <!-- mapper Interface --> 
      <javaClientGenerator type="XMLMAPPER" targetPackage="mapper"  targetProject="D:\workspace\jarvis\test\webtest\src">  
        <property name="enableSubPackages" value="true" />  
      </javaClientGenerator>  
      <!-- tableName:用于自动生成代码的数据库表;domainObjectName:对应于数据库表的javaBean类名 -->  
      <table schema="untodo" tableName="t_student" domainObjectName="Student" >
	   <!--<property name="useActualColumnNames" value="true"/>-->
      <generatedKey column="id" sqlStatement="MySql" identity="true" />
      <columnOverride column="student_num" property="studehtNum" />
     <!-- <ignoreColumn column="FRED" /> -->
     <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />-->
	  </table>
      <table schema="untodo" tableName="t_teacher" domainObjectName="Teacher" >  </table>  
    </context>       
</generatorConfiguration>  

通过命令执行:java -jar mybatis-generator-core-1.3.1.jar -configfile D:\mybatistool\mybatis-generator-core-1.3.1\genrator.xml -overwrite

Java(Android)线程池【转】


介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。
1、new Thread的弊端
执行一个异步任务你还只是如下new Thread吗?
[Java]
new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
}
}).start();[/java]
那你就out太多了,new Thread的弊端如下:
a. 每次new Thread新建对象性能差。
b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。
c. 缺乏更多功能,如定时执行、定期执行、线程中断。
相比new Thread,Java提供的四种线程池的好处在于:
a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
c. 提供定时执行、定期执行、单线程、并发数控制等功能。

2、Java 线程池
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
(1). newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。示例代码如下:

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    final int index = i;
    try {
        Thread.sleep(index * 1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
 
    cachedThreadPool.execute(new Runnable() {
 
        @Override
        public void run() {
            System.out.println(index);
        }
    });
}

线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

(2). newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例代码如下:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
    final int index = i;
    fixedThreadPool.execute(new Runnable() {
 
        @Override
        public void run() {
            try {
                System.out.println(index);
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()。可参考PreloadDataCache。

(3) newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下:

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
 
    @Override
    public void run() {
        System.out.println("delay 3 seconds");
    }
}, 3, TimeUnit.SECONDS);

表示延迟3秒执行。

定期执行示例代码如下:

scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
 
    @Override
    public void run() {
        System.out.println("delay 1 seconds, and excute every 3 seconds");
    }
}, 1, 3, TimeUnit.SECONDS);

表示延迟1秒后每3秒执行一次。
ScheduledExecutorService比Timer更安全,功能更强大,后面会有一篇单独进行对比。

(4)、newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:


ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
    final int index = i;
    singleThreadExecutor.execute(new Runnable() {
 
        @Override
        public void run() {
            try {
                System.out.println(index);
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

结果依次输出,相当于顺序执行各个任务。
现行大多数GUI程序都是单线程的。Android中单线程可用于数据库操作,文件操作,应用批量安装,应用批量删除等不适合并发但可能IO阻塞性及影响UI线程响应的操作。

mybatis实战教程(mybatis in action),mybatis入门到精通【转】

写在这个系列前面的话:
以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程.

什么是mybatis
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.

orm工具的基本思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory  产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。

这是一个系列教程。我将把所有的链接都记录在此,以供参考.所有程序的 jar  包,可以在 第六个例子的程序中下载得到.

mybatis实战教程(mybatis in action)之一:开发环境搭建

mybatis实战教程(mybatis in action)之二:以接口的方式编程

mybatis实战教程(mybatis in action)之三:实现单表的增删改查等操作

mybatis实战教程(mybatis in action)之四:实现关联数据的查询

mybatis实战教程(mybatis in action)之五:mybatis与spring3集成

mybatis实战教程(mybatis in action)之六:mybatis与spring3 MVC 集成例子

mybatis实战教程(mybatis in action)之七:实现mybatis分页(源码下载)

mybatis实战教程(mybatis in action)之八:mybatis 动态 sql 语句基础

mybatis实战教程(mybatis in action)之九:mybatis 代码生成工具的使用

mybatis实战教程(mybatis in action)之十:mybatis SqlSessionSupport 的使用,构件DAO 层的应用

————————————–补充教程——————————————-
mybatis补充教程之一:在控制台显示sql语句,类似hibernate show_sql.

mybatis补充教程之二:传递多个参数的方法(Multiple parameters)

mybatis补充教程之三:缓存的使用

原文链接:http://www.yihaomen.com/article/java/302.htm

spring jar包说明【转】

Spring.jar是包含有完整发布的单个jar包,Spring.jar中包含除了 Spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到Spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的。

除了Spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个Spring.jar的所有类文件。

1.Spring-core.jar
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。

2.Spring-beans.jar
这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入Spring-core.jar及Spring- beans.jar文件就可以了。

3.Spring-aop.jar
这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。

4.Spring-context.jar
这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。

5.Spring-dao.jar
这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含Spring-aop.jar。

6.Spring-hibernate.jar
这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。

7.Spring-jdbc.jar
这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。

8.Spring-orm.jar
这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖 Spring-dao.jar里的类,用这个包时你需要同时包含Spring-dao.jar包。

9.Spring-remoting.jar
这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。

10.Spring-support.jar
这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。

11.Spring-web.jar
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。

12.Spring-webmvc.jar
这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、 XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。

13.Spring-mock.jar
这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

如何选择这些发布包,决定选用哪些发布包其实相当简单。如果你正在构建Web应用并将全程使用Spring,那么最好就使用单个全部的Spring.jar文件;如果你的应用仅仅用到简单的Inversion of Control / Dependency Injection(IoC/DI)容器,那么只需Spring-core.jar与Spring-beans.jar即可;如果你对发布的大小要求很高,那么就得精挑细选了,只取包含自己所需特性的jar文件了。采用独立的发布包你可以避免包含自己的应用不需要的全部类。当然你可以采用其它的一些工具来设法令整个应用包变小,节省空间的重点在于准确地找出自己所需的Spring依赖类,然后合并所需的类与包就可以了。Eclispe有个插件叫 ClassPath Helper可以帮你找找所依赖的类。

Spring包依赖说明:
1) Spring-core.jar需commons-collections.jar,Spring-core.jar是以下其它各个的基本。

2) Spring-beans.jar需Spring-core.jar,cglib-nodep-2.1_3.jar

3) Spring-aop.jar需Spring-core.jar,Spring-beans.jar,cglib-nodep-2.1_3.jar,aopalliance.jar

4) Spring-context.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,commons-collections.jar,aopalliance.jar

5) Spring-dao.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,Spring-context.jar

6) Spring-jdbc.jar需Spring-core.jar,Spring-beans.jar,Spring-dao.jar

7) Spring-web.jar需Spring-core.jar,Spring-beans.jar,Spring-context.jar

8) Spring-webmvc.jar需Spring-core.jar/Spring-beans.jar/Spring-context.jar/Spring-web.jar

9) Spring -hibernate.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,Spring- dao.jar,Spring-jdbc.jar,Spring-orm.jar,Spring-web.jar,Spring-webmvc.jar

10) Spring-orm.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,Spring- dao.jar,Spring-jdbc.jar,Spring-web.jar,Spring-webmvc.jar

11) Spring -remoting.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,Spring- dao.jar,Spring-context.jar,Spring-web.jar,Spring-webmvc.jar

12) Spring-support.jar需Spring-core.jar,Spring-beans.jar,Spring-aop.jar,Spring-dao.jar,Spring-context.jar,Spring-jdbc.jar

13) Spring-mock.jar需Spring-core.jar,Spring-beans.jar,Spring-dao.jar,Spring-context.jar,Spring-jdbc.jar

IntelliJ Idea使用记录

初次使用Idea,比起以前使用的eclipse,有很大的不习惯。
首先有很多概念上的区别。如:

eclipse idea
工作空间 workspace project
项目 project Module

其次,使用上的区别:
打开文件与路径关联:eclipse下是按下QQ图片20140207221022按钮即可。
在idea下可以按下QQ截图20140207221203来进行关联,但是这仅仅是单次的,并不会在下次打开文件的时候自动去关联,可以通过勾选QQ图片20140207225740中的Autoscroll to Source和Autoscroll from Source来实现。
显示行号:这里你可以右键文件编辑窗口右侧,选择“show line Numbers”来实现,但是这同样是单次有效,要实现全局有效,可在File–>Settings–>Editor–>Appearance勾选“Show line numbers”来实现。QQ图片20140207230642

像eclipse中一样自动编译部署:默认jsp,html等文件修改后,都不会自动部署,在tomcat设置窗口中设置下图选项(on ‘update’ action,on frame deactivation):QQ截图20140210143043,这样修改文件保存以后,便会自动编译部署,可以马上看到修改的效果了