一个简单的项目(click+spring+eclipselink jpa)

一、框架介绍

1.Apache Click 是一个先进的Java企业版的Web应用程序框架,提供一个基于浏览器的富客户端编程模型。

主要的特点包括:

  • 易学
  • 面向组件和页面的设计
  • 基于事件的编程模型
  • 性能非常好
  • 自动的表单生成以及客户端、服务器端数据验证
  • 支持 Velocity、JSP、FreeMarker 等模板引擎
  • 采用 Apache 开源协议
  • 支持 JDK 1.4 以及以后的版本

2.eclipselink jpa是一个类似于hibernate的持久化框架,通过注解的方式实现简单映射。

3.spring就不多介绍,数据库使用mysql,项目管理用maven

 

二、编写框架对应的配置文件

1.通过maven生成一个工程,如工程名为click,然后为工程新建两个maven module,一个为web工程click-web,另一个为普通java工程click-core。

2.为每个工程的pom文件中加入对应的依赖包:

click的pom:

Xml代码
  1. <artifactId>click</artifactId>  
  2.     <groupId>com.xxx</groupId>  
  3.     <version>0.0.1-SNAPSHOT</version>  
  4.     <packaging>pom</packaging>  
  5.     <modules>  
  6.         <module>click-core</module>  
  7.         <module>click-web</module>  
  8.     </modules>  
  9.     <dependencies>  
  10.                   <!--加入一些公用包-->  
  11.         <dependency>  
  12.           <groupId>junit</groupId>  
  13.           <artifactId>junit</artifactId>  
  14.           <version>4.11</version>  
  15.     </dependency>  
  16.     <dependency>  
  17.       <groupId>commons-lang</groupId>  
  18.       <artifactId>commons-lang</artifactId>  
  19.       <version>2.6</version>  
  20.     </dependency>  
  21.     </dependencies>  

 3.click-web的pom:(加入click框架所需包)

Xml代码
  1. <parent>  
  2.     <artifactId>click</artifactId>  
  3.     <groupId>com.xxx</groupId>  
  4.     <version>0.0.1-SNAPSHOT</version>  
  5.   </parent>  
  6.   <groupId>com.xxx</groupId>  
  7.   <artifactId>click-web</artifactId>  
  8.   <version>0.0.1-SNAPSHOT</version>  
  9.   <packaging>war</packaging>  
  10.   <name>click-web Maven Webapp</name>  
  11.   <url>http://maven.apache.org</url>  
  12.   <properties>  
  13.     <javax.servlet.version>2.5</javax.servlet.version>  
  14.     <click.version>2.3.0</click.version>  
  15.   </properties>  
  16.   <dependencies>  
  17.     <dependency>  
  18.         <groupId>com.yaolinnan</groupId>  
  19.         <artifactId>click-core</artifactId>  
  20.         <version>0.0.1-SNAPSHOT</version>  
  21.     </dependency>  
  22.     <dependency>  
  23.             <groupId>javax.servlet</groupId>  
  24.             <artifactId>servlet-api</artifactId>  
  25.             <scope>provided</scope>  
  26.             <version>${javax.servlet.version}</version>  
  27.         </dependency>  
  28.           
  29.     <dependency>  
  30.         <groupId>org.apache.click</groupId>  
  31.         <artifactId>click-nodeps</artifactId>  
  32.         <version>${click.version}</version>  
  33.         <scope>compile</scope>  
  34.     </dependency>  
  35.   
  36.     <dependency>  
  37.         <groupId>org.apache.click</groupId>  
  38.         <artifactId>click-extras</artifactId>  
  39.         <version>${click.version}</version>  
  40.         <scope>compile</scope>  
  41.     </dependency>  
  42.       
  43.   </dependencies>  
  44.   <build>  
  45.     <finalName>click-web</finalName>  
  46.   </build>  

 4.click-core的pom:(加入spring和eclipselink包)

Xml代码
  1. <parent>  
  2.     <artifactId>click</artifactId>  
  3.     <groupId>com.xxx</groupId>  
  4.     <version>0.0.1-SNAPSHOT</version>  
  5.   </parent>  
  6.   <groupId>com.xxx</groupId>  
  7.   <artifactId>click-core</artifactId>  
  8.   <version>0.0.1-SNAPSHOT</version>  
  9.   <name>click-core</name>  
  10.   <packaging>jar</packaging>  
  11.   <url>http://maven.apache.org</url>  
  12.   <properties>  
  13.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  14.     <jpa.version>2.0.0</jpa.version>  
  15.     <spring.version>3.0.6.RELEASE</spring.version>  
  16.   </properties>  
  17.   <dependencies>  
  18.    <dependency>    
  19.         <groupId>org.eclipse.persistence</groupId>    
  20.         <artifactId>javax.persistence</artifactId>    
  21.         <version>${jpa.version}</version>    
  22.     </dependency>    
  23.     <dependency>  
  24.             <groupId>org.eclipse.persistence</groupId>  
  25.             <artifactId>eclipselink</artifactId>  
  26.             <version>2.4.1</version>  
  27.         </dependency>  
  28.   
  29.         <dependency>  
  30.             <groupId>commons-pool</groupId>  
  31.             <artifactId>commons-pool</artifactId>  
  32.             <version>1.5.4</version>  
  33.         </dependency>  
  34.         <dependency>  
  35.             <groupId>commons-beanutils</groupId>  
  36.             <artifactId>commons-beanutils-core</artifactId>  
  37.             <version>1.8.3</version>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>commons-lang</groupId>  
  41.             <artifactId>commons-lang</artifactId>  
  42.             <version>2.6</version>  
  43.         </dependency>  
  44.       <dependency>  
  45.             <groupId>org.springframework</groupId>  
  46.             <artifactId>spring-core</artifactId>  
  47.             <version>${spring.version}</version>  
  48.         </dependency>  
  49.         <dependency>  
  50.             <groupId>org.springframework</groupId>  
  51.             <artifactId>spring-web</artifactId>  
  52.             <version>${spring.version}</version>  
  53.         </dependency>  
  54.         <dependency>  
  55.             <groupId>org.springframework</groupId>  
  56.             <artifactId>spring-beans</artifactId>  
  57.             <version>${spring.version}</version>  
  58.         </dependency>  
  59.         <dependency>  
  60.             <groupId>org.springframework</groupId>  
  61.             <artifactId>spring-context</artifactId>  
  62.             <version>${spring.version}</version>  
  63.         </dependency>  
  64.         <dependency>  
  65.             <groupId>org.springframework</groupId>  
  66.             <artifactId>spring-aop</artifactId>  
  67.             <version>${spring.version}</version>  
  68.         </dependency>  
  69.         <dependency>  
  70.             <groupId>org.springframework</groupId>  
  71.             <artifactId>spring-context-support</artifactId>  
  72.             <version>${spring.version}</version>  
  73.         </dependency>  
  74.         <dependency>  
  75.             <groupId>org.springframework</groupId>  
  76.             <artifactId>spring-tx</artifactId>  
  77.             <version>${spring.version}</version>  
  78.         </dependency>  
  79.         <dependency>  
  80.             <groupId>org.springframework</groupId>  
  81.             <artifactId>spring-orm</artifactId>  
  82.             <version>${spring.version}</version>  
  83.         </dependency>  
  84.         <dependency>  
  85.             <groupId>org.springframework</groupId>  
  86.             <artifactId>spring-jdbc</artifactId>  
  87.             <version>${spring.version}</version>  
  88.         </dependency>  
  89.         <dependency>  
  90.             <groupId>org.springframework</groupId>  
  91.             <artifactId>spring-test</artifactId>  
  92.             <version>${spring.version}</version>  
  93.         </dependency>  
  94.         <dependency>  
  95.             <groupId>javax.annotation</groupId>  
  96.             <artifactId>jsr250-api</artifactId>  
  97.             <version>1.0</version>  
  98.             <scope>provided</scope>  
  99.         </dependency>  
  100.         <dependency>  
  101.             <groupId>javax.transaction</groupId>  
  102.             <artifactId>jta</artifactId>  
  103.             <version>1.1</version>  
  104.             <scope>provided</scope>  
  105.         </dependency>  
  106.         <dependency>  
  107.             <groupId>mysql</groupId>  
  108.             <artifactId>mysql-connector-java</artifactId>  
  109.             <version>5.1.9</version>  
  110.         </dependency>  
  111.         <dependency>    
  112.            <groupId> org.aspectj</groupId >    
  113.            <artifactId> aspectjweaver</artifactId >    
  114.           <version> 1.6.11</version >    
  115.         </dependency>    
  116.         <dependency>  
  117.       <groupId>commons-dbcp</groupId>  
  118.       <artifactId>commons-dbcp</artifactId>  
  119.       <version>1.4</version>  
  120.     </dependency>  
  121.           
  122.   </dependencies>  

 5.在click-web工程下的src/main/resources目录下生成click.xml,编写click框架的配置信息:

Xml代码
  1. <click-app charset="UTF-8">  
  2.   
  3.   <pages package="com.xxx.pages" automapping="true"/>  
  4.   
  5.   <mode value="debug"/>  
  6.   
  7. </click-app>  

 web.xml:

Xml代码
  1. <web-app>  
  2.   <display-name>click-web</display-name>  
  3.   <servlet>  
  4.     <servlet-name>ClickServlet</servlet-name>  
  5.     <servlet-class>org.apache.click.extras.spring.SpringClickServlet</servlet-class>  
  6.     <init-param>  
  7.             <param-name>inject-page-beans</param-name>  
  8.             <param-value>true</param-value>  
  9.     </init-param>  
  10.     <load-on-startup>0</load-on-startup>  
  11.   </servlet>  
  12.   
  13.   <servlet-mapping>  
  14.     <servlet-name>ClickServlet</servlet-name>  
  15.     <url-pattern>*.htm</url-pattern>  
  16.   </servlet-mapping>  
  17.   <welcome-file-list>  
  18.     <welcome-file>hello.htm</welcome-file>  
  19.   </welcome-file-list>  
  20.     
  21.     
  22.   <context-param>  
  23.         <param-name>contextConfigLocation</param-name>  
  24.         <param-value>           
  25.             classpath*:spring/*.xml  
  26.         </param-value>  
  27.     </context-param>  
  28.   
  29.     <listener>  
  30.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  31.     </listener>  
  32. </web-app>  

 

6.在click-core的src/main/resources目录下编写eclipselink框架的配置信息--persistence.xml

Xml代码
  1. <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">  
  2.   <persistence-unit name="springjpaPU" transaction-type="RESOURCE_LOCAL">  
  3.     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>  
  4.     <!-- 需要持久化的实体 -->  
  5. <class>com.xxx.core.model.User</class>  
  6.     <properties>  
  7.         <property name="eclipselink.ddl-generation.output-mode" value="both" />  
  8.     </properties>  
  9.   
  10.   </persistence-unit>  
  11.     
  12. </persistence>  

 在这个目录下新建spring/springcontext.xml,编写spring框架的配置信息

Java代码
  1. <context:annotation-config/>  
  2.     <context:component-scan base-package="com.xxx.core"/>  
  3.     <tx:annotation-driven transaction-manager="transactionManager"/>  
  4.       
  5.     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>    
  6.       
  7.       <!-- Spring transaction manager -->  
  8.     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" p:entityManagerFactory-ref="entityManagerFactory" />  
  9.       
  10.     <!-- JPA shared entity manager -->  
  11.     <bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean" p:entityManagerFactory-ref="entityManagerFactory" />  
  12.   
  13.     
  14.     
  15.     <bean id="entityManagerFactory"  
  16.        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"  >  
  17.         <property name="loadTimeWeaver">  
  18.             <bean  
  19.              class="com.xxx.core.util.NewInstrumentationLoadTimeWeaver"/>  
  20.           
  21.         </property>  
  22.         <property name="dataSource" ref="mydataSource" />  
  23.         <property name="JpaVendorAdapter" ref="jpaAdapter"/>  
  24.         <property name="persistenceUnitName" value="springjpaPU"></property>  
  25.         <property name="persistenceXmlLocation" value="classpath*:persistence.xml"/>    
  26.           
  27.     </bean>  
  28.   
  29.     <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">  
  30.         <property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform" />  
  31.         <property name="showSql" value="true" />  
  32.     </bean>    
  33.   <!--数据源配置-->  
  34.     <bean id="mydataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">    
  35.         <property name="driverClassName" value="${jdbc.driverClassName}"/>    
  36.         <property name="url" value="${jdbc.url}"/>    
  37.         <property name="username" value="${jdbc.username}"/>    
  38.         <property name="password" value="${jdbc.password}"/>    
  39.         <property name="maxIdle" value="10"/>    
  40.         <property name="maxActive" value="100"/>    
  41.         <property name="maxWait" value="10000"/>    
  42.         <property name="testOnBorrow" value="true"/>    
  43.         <property name="testWhileIdle" value="true"/>    
  44.         <property name="timeBetweenEvictionRunsMillis" value="1200000"/>    
  45.         <property name="minEvictableIdleTimeMillis" value="1800000"/>    
  46.         <property name="numTestsPerEvictionRun" value="5"/>    
  47.         <property name="defaultAutoCommit" value="true"/>    
  48.     </bean>    
  49.     
  50.     <context:property-placeholder location="classpath*:spring/config.properties"/>    
  51.     <!--DAO和Service注入-->  
  52.     <bean id="userDAO" class="com.yaolinnan.core.dao.UserDAOImpl">  
  53.     <property name="entityManager" ref="entityManager"></property>  
  54.     </bean>  
  55.     <bean id="userService" class="com.yaolinnan.core.service.UserServiceImpl"></bean>  

 

新建config.properties,编写数据库配置信息

Xml代码
  1. # MySql  
  2. jdbc.driverClassName=com.mysql.jdbc.Driver  
  3. jdbcjdbc.url=jdbc:mysql://xxx  
  4. jdbc.username=xxx  
  5. jdbc.password=xxx  
  6. jdbc.initialSize=1  
  7. jdbc.maxIdle=2  
  8. jdbc.minIdle=-1  
  9. jdbc.maxWait=10000  
  10. jdbc.maxActive=10  
  11. jdbc.testOnBorrow=true  
  12. jdbc.testOnReturn=true  
  13. jdbc.testWhileIdle=true  
  14. jdbc.logAbandoned=true  
  15. jdbc.removeAbandoned=true  
  16. jdbc.removeAbandonedTimeout=50  
  17. jdbc.validationQuery=select count(*) from dual  
  18. jdbc.timeBetweenEvictionRunsMillis=300000  
  19. jdbc.minEvictableIdleTimeMillis=300000  

 三、程序编写

1.click-core编写实体类,对应数据库中的表

Java代码
  1. @Entity   
  2. @Table (name="xxx")  
  3. public class User{  
  4.       
  5.     @Id  
  6.     private int id;  
  7.       
  8.     private String userName;  
  9.       
  10.     private String loginName;  
  11.       
  12.     private String password;  
  13.       
  14.     private String email;  
  15.       
  16.     @Temporal(TemporalType.DATE)  
  17.     private Date createDate;  
  18.            
  19.                 public int getId() {  
  20.         return id;  
  21.     }  
  22.   
  23.     public void setId(int id) {  
  24.         this.id = id;  
  25.     }  
  26. .........加入属性对应的set和get方法  
  27. }  

 2.编写DAO和Service(简单写下)

Java代码
  1. public class UserDAOImpl implements UserDAO{  
  2.       
  3.       
  4.     private EntityManager entityManager;  
  5.   
  6.     @Override  
  7.     public List<User> getUsers() {  
  8.         Query q=entityManager.createQuery("SELECT t FROM User t ORDER BY t.id ASC");  
  9.         return q.getResultList();  
  10.     }  
  11.   
  12.     @Override  
  13.     public User getUserbyId(int id) {  
  14.         return entityManager.find(User.class, id);  
  15.     }  
  16.   
  17.     public EntityManager getEntityManager() {  
  18.         return entityManager;  
  19.     }  
  20.       
  21.     @PersistenceContext  
  22.     public void setEntityManager(EntityManager entityManager) {  
  23.         this.entityManager = entityManager;  
  24.     }  
  25.   
  26.     @Override  
  27.     public void saveUser(User user) {  
  28.         entityManager.persist(user);  
  29.     }  
  30.   
  31. }  

 

3.编写一个继承自InstrumentationLoadTimeWeaver的类,这个类避免了工程启动时去jvm配置 -javaagent:spring-agent.jar这个步骤,对应springcontext.xml中<property name="loadTimeWeaver">属性。

Java代码
  1. public class NewInstrumentationLoadTimeWeaver extends InstrumentationLoadTimeWeaver{  
  2.   
  3.      @Override  
  4.         public void addTransformer(ClassFileTransformer transformer) {  
  5.            try {  
  6.                super.addTransformer(transformer);  
  7.            } catch (Exception e) {}  
  8.         }  
  9. }  

 4.在click-web编写page和页面来测试。

Java代码
  1. public class Hello extends Page{  
  2.   
  3.       
  4.     private static final long serialVersionUID = 1L;  
  5.       
  6.     private UserService userService;  
  7.       
  8.     private Table table=new Table("userTable");  
  9.       
  10.     private ActionLink delete=new ActionLink("delete",this,"onDelete");  
  11.   
  12.     @Override  
  13.     public void onInit() {  
  14.         this.addControl(table);  
  15.         this.addControl(delete);  
  16.         table.setClass(Table.CLASS_SIMPLE);//设置表格显示的样式  
  17.         table.setPageSize(10);//设置一页显示的数量  
  18.         table.setShowBanner(true);  
  19.         table.setSortable(true);//设置表格排序  
  20.         table.addColumn(new Column("userName","名称"));//第一列显示的标题和对应model的值  
  21.         Column column = new Column("email","邮箱");  
  22.         column.setAutolink(true);//设置自动关联url或者email地址  
  23.         column.setTitleProperty("loginName");//设置指向当前列显示的值  
  24.           
  25.         table.addColumn(column);  
  26.           
  27.         delete.setImageSrc("images/u86.png");//设置ActionLink显示的图片  
  28.         delete.setTitle("删除");//设置ActionLink显示的名称  
  29.         delete.setAttribute("onclick""return window.confirm('确定要删除当前用户吗?');");//设置ActionLink的css对应的值  
  30.           
  31.         column = new Column("操作");  
  32.         column.setTextAlign("center");  
  33.         AbstractLink[] links = new AbstractLink[] { delete};//为当前列加上ActionLink(可多个)  
  34.         column.setDecorator(new LinkDecorator(table, links, "loginName"));//添加的ActionLink操作对应的值  
  35.         column.setSortable(false);  
  36.         table.addColumn(column);  
  37.         List<User> rowList=userService.getUsers();  
  38.          
  39.         table.setRowList(rowList);//为表格添加数据  
  40.         this.addModel("list", rowList);  
  41.     }  
  42.       
  43.     public Boolean onDelete(){  
  44.         String name=delete.getValue();//得到用户点击删除操作时所对应的值  
  45.         this.addModel("name", name);  
  46.         return true;  
  47.     }  
  48.   
  49.     public UserService getUserService() {  
  50.         return userService;  
  51.     }  
  52.   
  53.     public void setUserService(UserService userService) {  
  54.         this.userService = userService;  
  55.     }  
  56.       
  57.   
  58. }  

 

Html代码
  1. <html>  
  2. <head>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  4. <title>click table</title>  
  5. </head>  
  6. <body>  
  7.      $userTable  
  8. #if($name)  
  9.     <p>delete user name:$name</p>  
  10. #end  
  11.   
  12. #foreach($user in $list)  
  13.   
  14.     <div>$user.userName</div>  
  15. #end  
  16. </body>  
  17. </html>  

 

四、启动tomcat,并访问。

你可能感兴趣的:(一个简单的项目(click+spring+eclipselink jpa))