顯示具有 eclipse 標籤的文章。 顯示所有文章
顯示具有 eclipse 標籤的文章。 顯示所有文章

2015年6月2日 星期二

[筆記] maven remote archetype catalog url

Eclipse 用
maven remote archetype catalog url
https://repo1.maven.org/maven2/archetype-catalog.xml

線上讀取可用的 archetype

2015年3月17日 星期二

[Error] eclipse occur: Error notifying a preference change listener. Check the log for details. Widget is disposed 排解

有時候在使用 eclipse 中切換某些 perspective 時,會發生如下圖一般的錯誤訊息,具體原因不明,但經過查詢谷哥大神及測試,發現是 Breadcrumb bar 所造成,故在沒必要使用時將其關閉即可。

2015年2月13日 星期五

[eclipse]記憶體不足的改善方法 OutOfMemoryErrors

有時候再開啟大檔案,或執行大的程式動作時,常會發生 OoutOfMemoryError 的問題,解決方法有兩種。

參照官網的解決方式:

2014年6月26日 星期四

[MyBatis]簡易CRUD教學

使用工具:
Eclipse Kepler Service Release 2
MySQL 5
使用API:
<mybatis.version>3.2.7</mybatis.version>
<mysql-connector-java.version>5.1.30</mysql-connector-java.version>
<slf4j-api.version>1.7.7</slf4j-api.version>
<slf4j-log4j12.version>1.7.7</slf4j-log4j12.version>
<log4j.version>1.2.17</log4j.version>

 

 流程:

1.建立測試用Table

2.配置 MyBatis 配置檔

3.建立 Table 對應之 java bean

4.建立 Table 對應之 Mapper

5.建立 Mapper對應之 Interface

6.建立 SqlSessionFactory

7.建立 Service

8.建立 TestUnit 

首先使用 MySQL 5 Workbench 建立 table


CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
email varchar(50) NOT NULL,
dob date DEFAULT NULL,
PRIMARY KEY (stud_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

--塞入測試資料
insert into students(stud_id,name,email,dob)
values (1,'Student1','student1@gmail.com','1983-08-09');
insert into students(stud_id,name,email,dob)
values (2,'Student2','student2@gmail.com','1983-10-21');

--驗證
select * from students;

假設您使用 Maven 來建立專案, .pom 的 dependencies 配置 可以參考
我目前正在使用的配置檔

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.test</groupId>
<artifactId>MyBatis_003</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>MyBatis_003</name>
<url>http://maven.apache.org</url>

<!-- 設定各dependency 使用的版本 -->
<properties>
<final_name>MyBatis_003</final_name>
<jdk.version>1.6</jdk.version>
<asm.version>3.3.1</asm.version>
<asm-commons.version>3.3.1</asm-commons.version>
<asm-tree.version>3.3.1</asm-tree.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-logging.version>1.1.3</commons-logging.version>
<commons-io.version>2.2</commons-io.version>
<freemarker.version>2.3.9</freemarker.version>
<junit.version>4.11</junit.version>
<javassist.version>3.18.1-GA</javassist.version>
<jquery.version>1.8.2</jquery.version>
<log4j.version>1.2.17</log4j.version>
<mysql-connector-java.version>5.1.30</mysql-connector-java.version>
<mybatis.version>3.2.7</mybatis.version>
<ognl.version>3.0.8</ognl.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<struts2-core.version>2.3.16.3</struts2-core.version>
<struts2-dojo-plugin.version>2.3.16.3</struts2-dojo-plugin.version>
<struts2-json-plugin.version>2.3.16.3</struts2-json-plugin.version>
<struts2-spring-plugin.version>2.3.8</struts2-spring-plugin.version>
<struts2-junit-plugin.version>2.3.16.3</struts2-junit-plugin.version>
<!-- 頁面排版用 siteMesh -->
<struts2-sitemesh-plugin.version>2.3.16.3</struts2-sitemesh-plugin.version>
<!-- Annotation 用 -->
<struts2-convention-plugin.version>2.3.16.3</struts2-convention-plugin.version>
<!-- 頁面排版用 siteMesh -->
<sitemesh.version>2.4.2</sitemesh.version>
<slf4j-api.version>1.7.7</slf4j-api.version>
<slf4j-log4j12.version>1.7.7</slf4j-log4j12.version>
<spring-test.version>3.2.0.RELEASE</spring-test.version>
<spring-web.version>3.2.0.RELEASE</spring-web.version>
<spring-context.version>3.2.0.RELEASE</spring-context.version>
<spring-core.version>3.2.0.RELEASE</spring-core.version>
<spring-beans.version>3.2.0.RELEASE</spring-beans.version>
<xwork-core.version>2.3.16.3</xwork-core.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2-core.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>${ognl.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>${xwork-core.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>${asm.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-commons</artifactId>
<version>${asm-commons.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-tree</artifactId>
<version>${asm-tree.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-dojo-plugin</artifactId>
<version>${struts2-dojo-plugin.version}</version>
</dependency>
<dependency>
<groupId>com.efsavage.jquery</groupId>
<artifactId>jquery-maven</artifactId>
<version>${jquery.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${struts2-json-plugin.version}</version>
</dependency>
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-beans.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-core.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-context.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-web.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-test.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2-spring-plugin.version}</version>
</dependency>
-->
<!-- junit -->
<!--
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-junit-plugin</artifactId>
<version>${struts2-junit-plugin.version}</version>
</dependency>
-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
<version>${struts2-sitemesh-plugin.version}</version>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>${sitemesh.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts2-convention-plugin.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${final_name}</finalName>
<plugins>
<!-- 強制專案編輯使用的compiler版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>

<!-- 可產生java source -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
-->

<!-- 可產生javadoc 文件 -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
-->

<!-- 自動下載相關javadoc 及 source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>false</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
</plugins>
</build>
</project>

本範例使用 xml 來設置對應的 mapper 無使用 Annotation
接下來先建立 MaBatis 所需要的 configuration file
在這邊我先設定為 mybatis-config.xml ,習慣上的放置位置在專案中的 resource 目錄中
mybatis-config.xml
properties 標籤 :放置外部配置
typeAliases 標籤:放置別名
environment 標籤:放置環境設定,以id為辨識名稱,可藉此切換環境設定
transactionManage 標籤:type分為JDBC / MANAGEN,JBDC適用於
Tomcat,MANAGEN 適用於 JBoss, WebLogic or GlassFish 這一類可使用EJB來管理
transaction 的環境
dataSource 標籤:type分為POOLED / UNPOOLED 兩種,POOLED 會建立一個連接池(
pool)來管理connection,而UNPOOLED 則是每次連結接建立一個新的 connection
typeHandlers 標籤:在Mappers xml檔案中的SQL對應的輸入資料屬性,如#{studID}等,
皆可自動對應java 的主要屬性及Wrapper,如String/Integer/enum等,若遇到非上述屬性內
的資料,比如說是一個自訂的Object,則需建立一個 extends BaseTypeHandler <T>
的類別,並複寫當中的Method,再藉由typeHandlers 去配置,讓MyBatis 可以找到對應
的資料類別。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 設定jdbc相關配置檔 -->
<properties resource='jdbc.properties'/>
<!-- 設定對應名稱 -->
<typeAliases>
<typeAlias alias="Student" type="com.Models.Student"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Models/StudentMapper.xml"/>
</mappers>
</configuration>

jdbc.properties 一樣放置在 resource 目錄中
 
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=admin

接著建立 Table Student 所對應的 java bean Student.java 

package com.Models;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Student {
private Integer studId;
private String name;
private String email;
private Date dob;

@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd",Locale.TAIWAN);
System.out.println("studId=" + studId + " name=" + name + " email=" + email + " dob=" + sdf.format(dob));
return super.toString();
}

public Integer getStudId() {
return studId;
}
public void setStudId(Integer studId) {
this.studId = studId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}

接著建立 Student 對應的 Mapper 檔 StudentMapper.xml 
放置在 resource/Models 中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.Models.mappers.StudentMapper">
<resultMap type="Student" id="StudentResult">
<id property="studId" column="stud_id"/>
<result property="name" column="name"/>
<result property="email" column="email"/>
<result property="dob" column="dob"/>
</resultMap>

<select id="findAllStudents" resultMap="StudentResult">
SELECT * FROM STUDENTS
</select>

<select id="findStudentById" parameterType="int" resultType="Student">
SELECT STUD_ID AS STUDID, NAME, EMAIL, DOB
FROM STUDENTS WHERE STUD_ID=#{Id}
</select>

<insert id="insertStudent" parameterType="Student">
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(#{studId },#{name},#{email},#{dob})
</insert>
</mapper>

接著建立 Interface for StudentMapper.xml StudentMapper.java
當中的三個 Method,正對應 StudentMapper.xml 中各標籤的 id
代表著該而 xml 的 SQL 語法正與該方法對應
parameterType 傳遞的參數型態
resultType 返回的參數型態  
resultMap 為一類別返回型態,而其中的 type="Student" Student 正是之前在
 mybatis-config.xml 中 typeAlias 標籤所設定的對應資料方便使用別名而不需使用
 com.Models.XXX 的全名
  
package com.Models.mappers;

import java.util.List;

import com.Models.Student;

public interface StudentMapper {
List findAllStudents();
Student findStudentById(Integer id);
void insertStudent(Student student);
}

接下來建立一Util MyBatisSqlSessionFactory.java 用來建立 MyBatis 所需要的 SqlSessionFactory
 
package com.Utils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisSqlSessionFactory {
private static SqlSessionFactory sqlSessionFactory;

public static SqlSessionFactory getSqlSessionFactory() {
if(sqlSessionFactory==null) {
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e.getCause());
}
}
return sqlSessionFactory;
}
public static SqlSession openSession() {
return getSqlSessionFactory().openSession();
}
}
接著建立一Service StudentService.java
準備用來存取資料用
package com.Services;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.Models.Student;
import com.Models.mappers.StudentMapper;
import com.Utils.MyBatisSqlSessionFactory;

public class StudentService {
private Logger logger = LoggerFactory.getLogger(getClass());

/**
* 查詢全部學生
* @return
*/
public List findAllStudents()
{
SqlSession sqlSession =
MyBatisSqlSessionFactory.openSession();
try {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
return studentMapper.findAllStudents();
} finally {
//If sqlSession is not closed
//then database Connection associated this sqlSession will not be returned to pool
//and application may run out of connections.
sqlSession.close();
}
}

/**
* studId 尋找學生
* @param studId
* @return
*/
public Student findStudentById(Integer studId)
{
logger.debug("Select Student By ID :{}", studId);
SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
try {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
return studentMapper.findStudentById(studId);
//上面也可以用下面取代,不須再經過mapper手續
//Student student = (Student)sqlSession. selectOne("com.mybatis3.mappers.StudentMapper.findStudentById", studId);
} finally {
sqlSession.close();
}
}

/**
* 新增學生
* @param student
*/
public void createStudent(Student student)
{
SqlSession sqlSession = MyBatisSqlSessionFactory.openSession();
try {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
studentMapper.insertStudent(student);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
}

最後使用junit 來做測試 StudentServiceTest.java
 
package com.Tests;

import java.util.Date;
import java.util.List;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import com.Models.Student;
import com.Services.StudentService;

public class StudentServiceTest {
private static StudentService studentService;

@BeforeClass
public static void setup(){
studentService = new StudentService();
}

@AfterClass
public static void teardown(){
studentService = null;
}

@Test
public void testFindAllStudents(){
List students = studentService.findAllStudents();
Assert.assertNotNull(students);
for (Student student : students) {
System.out.println(student);
}
}

@Test
public void testFindStudentById() {
Student student = studentService.findStudentById(1);
Assert.assertNotNull(student);
System.out.println(student);
}
@Test
public void testCreateStudent() {
Student student = new Student();
int id = 5;
student.setStudId(id);
student.setName("student_"+id);
student.setEmail("student_"+id+"gmail.com");
student.setDob(new Date());
studentService.createStudent(student);
Student newStudent = studentService.findStudentById(id);
Assert.assertNotNull(newStudent);
}
}
參照資料:
Java Persistence with MyBatis 3

demo程式(右鍵另開視窗下載)

2014年6月25日 星期三

[Maven]struts2 自己常用的配置 pom.xml -20140626

自己常用的配置檔 pom.xml
備份到blog中



<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.test</groupId>
<artifactId>MyBatis_003</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>MyBatis_003</name>
<url>http://maven.apache.org</url>

<!-- 設定各dependency 使用的版本 -->
<properties>
<final_name>MyBatis_003</final_name>
<jdk.version>1.6</jdk.version>
<asm.version>3.3.1</asm.version>
<asm-commons.version>3.3.1</asm-commons.version>
<asm-tree.version>3.3.1</asm-tree.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-logging.version>1.1.3</commons-logging.version>
<commons-io.version>2.2</commons-io.version>
<freemarker.version>2.3.9</freemarker.version>
<junit.version>4.11</junit.version>
<javassist.version>3.18.1-GA</javassist.version>
<jquery.version>1.8.2</jquery.version>
<log4j.version>1.2.17</log4j.version>
<mysql-connector-java.version>5.1.30</mysql-connector-java.version>
<mybatis.version>3.2.7</mybatis.version>
<ognl.version>3.0.8</ognl.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<struts2-core.version>2.3.16.3</struts2-core.version>
<struts2-dojo-plugin.version>2.3.16.3</struts2-dojo-plugin.version>
<struts2-json-plugin.version>2.3.16.3</struts2-json-plugin.version>
<struts2-spring-plugin.version>2.3.8</struts2-spring-plugin.version>
<struts2-junit-plugin.version>2.3.16.3</struts2-junit-plugin.version>
<!-- 頁面排版用 siteMesh -->
<struts2-sitemesh-plugin.version>2.3.16.3</struts2-sitemesh-plugin.version>
<!-- Annotation 用 -->
<struts2-convention-plugin.version>2.3.16.3</struts2-convention-plugin.version>
<!-- 頁面排版用 siteMesh -->
<sitemesh.version>2.4.2</sitemesh.version>
<slf4j-api.version>1.7.7</slf4j-api.version>
<slf4j-log4j12.version>1.7.7</slf4j-log4j12.version>
<spring-test.version>3.2.0.RELEASE</spring-test.version>
<spring-web.version>3.2.0.RELEASE</spring-web.version>
<spring-context.version>3.2.0.RELEASE</spring-context.version>
<spring-core.version>3.2.0.RELEASE</spring-core.version>
<spring-beans.version>3.2.0.RELEASE</spring-beans.version>
<xwork-core.version>2.3.16.3</xwork-core.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2-core.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>${ognl.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>${xwork-core.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>${asm.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-commons</artifactId>
<version>${asm-commons.version}</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-tree</artifactId>
<version>${asm-tree.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-dojo-plugin</artifactId>
<version>${struts2-dojo-plugin.version}</version>
</dependency>
<dependency>
<groupId>com.efsavage.jquery</groupId>
<artifactId>jquery-maven</artifactId>
<version>${jquery.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>${struts2-json-plugin.version}</version>
</dependency>
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-beans.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-core.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-context.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-web.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-test.version}</version>
</dependency>
-->
<!--
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2-spring-plugin.version}</version>
</dependency>
-->
<!-- junit -->
<!--
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-junit-plugin</artifactId>
<version>${struts2-junit-plugin.version}</version>
</dependency>
-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-sitemesh-plugin</artifactId>
<version>${struts2-sitemesh-plugin.version}</version>
</dependency>
<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>${sitemesh.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts2-convention-plugin.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${final_name}</finalName>
<plugins>
<!-- 強制專案編輯使用的compiler版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>

<!-- 可產生java source -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
-->

<!-- 可產生javadoc 文件 -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
-->

<!-- 自動下載相關javadoc 及 source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>false</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
</plugins>
</build>
</project>

2014年1月7日 星期二

Eclipse 常用快捷鍵

常用:
ctrl+/ 註解
ctrl+\ 取消註解
ctrl+o 快速搜尋method
ctrl+e 快速切換分頁
ctrl+h 搜尋資料
ctrl+k 搜尋相同資料 +shift(上一個)
ctrl+g 工作中申明
ctrl+. 下一個錯誤
ctrl+1 快速修正
ctrl+q 回到最後編輯行
ctrl+t 查看類別結構
ctrl+m 放大編輯視窗
ctrl+shift+/ 多行註解
ctrl+shift+\ 取消多行註解
ctrl+shift+r 搜尋檔案
ctrl+shift+i 顯示變數資訊
ctrl+shift+g 參照搜尋
ctrl+shift+p 找對應括號
ctrl+shift+l 查看其他快捷鍵
ctrl+shift+f 格式化程式碼
ctrl+shift+o 引入package(all)
ctrl+shift+m 引入package
ctrl+alt+h 查詢引用
ctrl+alt+s svn
alt+up or down 當行上下移



其他:
參照自 Eclipse 快捷鍵大全

Ctrl+1 快速修復(最經典的快速鍵,就不用多說了)
Ctrl+D: 刪除當前行
Ctrl+Alt+↓ 複製當前行到下一行(複製增加)
Ctrl+Alt+↑ 複製當前行到上一行(複製增加)
Alt+↓ 當前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了)
Alt+↑ 當前行和上面一行交互位置(同上)
Alt+← 前一個編輯的頁面
Alt+→ 下一個編輯的頁面(當然是針對上面那條來說了)
Alt+Enter 顯示當前選擇資源(工程,or 檔 or檔)的屬性
Shift+Enter 在當前行的下一行插入空行(這時滑鼠可以在當前行的任一位置,不一定是最後)
Shift+Ctrl+Enter 在當前行插入空行(原理同上條)
Ctrl+Q 定位到最後編輯的地方
Ctrl+L 定位在某行 (對於程式超過100的人就有福音了)
Ctrl+M 最大化當前的Edit或View (再按則反之)
Ctrl+/ 注釋當前行,再按則取消注釋
Ctrl+O 快速顯示 OutLine
Ctrl+T 快速顯示當前類的繼承結構
Ctrl+W 關閉當前Editer
Ctrl+K 參照選中的Word快速定位到下一個
Ctrl+E 快速顯示當前Editer的下拉清單(如果當前頁面沒有顯示的用黑體表示)
Ctrl+/(小鍵盤) 折疊當前類中的所有代碼
Ctrl+×(小鍵盤) 展開當前類中的所有代碼
Ctrl+Space 代碼助手完成一些代碼的插入(但一般和輸入法有衝突,可以修改輸入法的熱鍵,也可以暫用Alt+/來代替)
Ctrl+Shift+E 顯示管理當前打開的所有的View的管理器(可以選擇關閉,啟動等操作)
Ctrl+J 正向增量查找(按下Ctrl+J後,你所輸入的每個字母編輯器都提供快速匹配定位到某個單詞,如果沒有,則在stutes line中顯示沒有找到了,查一個單詞時,特別實用,這個功能Idea兩年前就有了)
Ctrl+Shift+J 反向增量查找(和上條相同,只不過是從後往前查)
Ctrl+Shift+F4 關閉所有打開的Editer
Ctrl+Shift+X 把當前選中的文本全部變味小寫
Ctrl+Shift+Y 把當前選中的文本全部變為小寫
Ctrl+Shift+F 格式化當前代碼
Ctrl+Shift+P 定位到對於的匹配符(譬如{}) (從前面定位後面時,游標要在匹配符裡面,後面到前面,則反之)

下面的快速鍵是重構裡面常用的,本人就自己喜歡且常用的整理一下(注:一般重構的快速鍵都是Alt+Shift開頭的了)
Alt+Shift+R 重命名 (是我自己最愛用的一個了,尤其是變數和類的Rename,比手工方法能節省很多勞動力)
Alt+Shift+M 抽取方法 (這是重構裡面最常用的方法之一了,尤其是對一大堆泥團代碼有用)
Alt+Shift+C 修改函數結構(比較實用,有N個函式呼叫了這個方法,修改一次搞定)
Alt+Shift+L 抽取本地變數( 可以直接把一些魔法數位和字串抽取成一個變數,尤其是多處調用的時候)
Alt+Shift+F 把Class中的local變數變為field變數 (比較實用的功能)
Alt+Shift+I 合併變數(可能這樣說有點不妥Inline)
Alt+Shift+V 移動函數和變數(不怎麼常用)
Alt+Shift+Z 重構的後悔藥(Undo)

編輯
作用域 功能 快速鍵
全域 查找並替換 Ctrl+F
文字編輯器 查找上一個 Ctrl+Shift+K
文字編輯器 查找下一個 Ctrl+K
全域 撤銷 Ctrl+Z
全域 複製 Ctrl+C
全域 恢復上一個選擇 Alt+Shift+↓
全域 剪切 Ctrl+X
全域 快速修正 Ctrl1+1
全域 內容輔助 Alt+/
全域 全部選中 Ctrl+A
全域 刪除 Delete
全域 上下文資訊 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
Java編輯器 顯示工具提示描述 F2
Java編輯器 選擇封裝元素 Alt+Shift+↑
Java編輯器 選擇上一個元素 Alt+Shift+←
Java編輯器 選擇下一個元素 Alt+Shift+→
文字編輯器 增量查找 Ctrl+J
文字編輯器 增量逆向查找 Ctrl+Shift+J
全域 粘貼 Ctrl+V
全域 重做 Ctrl+Y

查看
作用域 功能 快速鍵
全域 放大 Ctrl+=
全域 縮小 Ctrl+-

窗口
作用域 功能 快速鍵
全域 啟動編輯器 F12
全域 切換編輯器 Ctrl+Shift+W
全域 上一個編輯器 Ctrl+Shift+F6
全域 上一個視圖 Ctrl+Shift+F7
全域 上一個透視圖 Ctrl+Shift+F8
全域 下一個編輯器 Ctrl+F6
全域 下一個視圖 Ctrl+F7
全域 下一個透視圖 Ctrl+F8
文字編輯器 顯示尺規上下文功能表 Ctrl+W
全域 顯示視圖功能表 Ctrl+F10
全域 顯示系統功能表 Alt+-

導航
作用域 功能 快速鍵
Java編輯器 打開結構 Ctrl+F3
全域 打開類型 Ctrl+Shift+T
全域 打開類型層次結構 F4
全域 打開聲明 F3
全域 打開外部javadoc Shift+F2
全域 打開資源 Ctrl+Shift+R
全域 後退歷史記錄 Alt+←
全域 前進歷史記錄 Alt+→
全域 上一個 Ctrl+,
全域 下一個 Ctrl+.
Java編輯器 顯示大綱 Ctrl+O
全域 在層次結構中打開類型 Ctrl+Shift+H
全域 轉至匹配的括弧 Ctrl+Shift+P
全域 轉至上一個編輯位置 Ctrl+Q
Java編輯器 轉至上一個成員 Ctrl+Shift+↑
Java編輯器 轉至下一個成員 Ctrl+Shift+↓
文字編輯器 轉至行 Ctrl+L

搜索
作用域 功能 快速鍵
全域 出現在檔中 Ctrl+Shift+U
全域 打開搜索對話方塊 Ctrl+H
全域 工作區中的聲明 Ctrl+G
全域 工作區中的引用 Ctrl+Shift+G

文本編輯
作用域 功能 快速鍵
文字編輯器 改寫切換 Insert
文字編輯器 上滾行 Ctrl+↑
文字編輯器 下滾行 Ctrl+↓

文件
作用域 功能 快速鍵
全域 保存 Ctrl+X
Ctrl+S
全域 列印 Ctrl+P
全域 關閉 Ctrl+F4
全域 全部保存 Ctrl+Shift+S
全域 全部關閉 Ctrl+Shift+F4
全域 屬性 Alt+Enter
全域 新建 Ctrl+N

項目
作用域 功能 快速鍵
全域 全部構建 Ctrl+B

原始程式碼
作用域 功能 快速鍵
Java編輯器 格式化 Ctrl+Shift+F
Java編輯器 取消注釋 Ctrl+\
Java編輯器 注釋 Ctrl+/
Java編輯器 添加導入 Ctrl+Shift+M
Java編輯器 組織導入 Ctrl+Shift+O
Java編輯器 使用try/catch塊來包圍 未設置,太常用了,所以在這裡列出,建議自己設置。
也可以使用Ctrl+1自動修正。

運行
作用域 功能 快速鍵
全域 單步返回 F7
全域 單步跳過 F6
全域 單步跳入 F5
全域 單步跳入選擇 Ctrl+F5
全域 調試上次啟動 F11
全域 繼續 F8
全域 使用篩檢程式單步執行 Shift+F5
全域 添加/去除中斷點 Ctrl+Shift+B
全域 顯示 Ctrl+D
全域 運行上次啟動 Ctrl+F11
全域 運行至行 Ctrl+R
全域 執行 Ctrl+U

重構
作用域 功能 快速鍵
全域 撤銷重構 Alt+Shift+Z
全域 抽取方法 Alt+Shift+M
全域 抽取區域變數 Alt+Shift+L
全域 內聯 Alt+Shift+I
全域 移動 Alt+Shift+V
全域 重命名 Alt+Shift+R
全域 重做 Alt+Shift+Y

像 VS 系列一樣的 Content Assist
預設是 " . " 或是自己使用 ALT+ ? 才會出現
要修改設定:
Window -> Preferences -> Java/Editor/Content Assist
在「Auto Activation triggers for java」 從 . 改為
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz =.(!+-*/~,[{@#$%^&
 如此一來就像VS 一樣打一個字就有囉
相關資源:
Eclipse快捷键 10个最有用的快捷键
Eclipse 開發小技巧 - 程式範本
★ Eclipse 3.0 RC2 熱鍵表 (中英對照版,Default) ★
【上古秘籍】之Eclipse的秘籍

2013年12月12日 星期四

在Eclipse中,使用JBoss Tools 建立 Hibernate 相關 映射檔案(java,hbm.xml,cfg.xml等)

在Eclipse中先使用 Install new software 下載 JBoss Tools 或直接去官網下載。
以下以連結 Oracle 為例,首先建立一Dynamic Web Project



接著加入相關的jar檔,如 Hibernate jdbc for Oracle

接下來在Project上新增一Hibernate Configuration File

選擇存放hibernate.cfg.xml的位置,一般位於 src根目錄

接著進入如下畫面,開始著手相關配置

可以使用Get values from Conntection 來建立(New)配置檔,以後直接選擇配置檔存取即可

選擇資料庫類型,NameDescription 任意,接著點選Next

選擇資料庫版本,一般選Oracle Thin Driver,接著將相關的jdbc jar檔位置設定好


再至Properties 設定相關資料庫屬性,如UserID Password

完成後,會在src的目錄下看到該檔案(hibernate.cfg.xml),但請進入修改依些設定,如下圖

接著開啟一個新的 Perspective --> Hibernate

接下來可以在畫面分頁中查看是否設定正確,若正確,則可以在Database中查看相關Table資料

接下來執行 Hibernate Code Generation Configurations...

開啟畫面如下,可以新增一個自己的配置
Main
Console configuration --> 選擇自己的專案名稱
Output directory --> 選擇輸出檔案的目錄,一般設定為 src
Reverse engineer from JDBC Connection --> 請勾選
package --> 選擇要放置升成 java 映射檔的 pagkage 為何
reveng.xml --> 若未建立過,請選擇新增,一般也是設定在 src 的目錄下

Exporters
選擇要產出的檔案類型  java / hbm.xml映射檔等

其餘的不太需要變更,直接選擇Run,會發現專案目錄已出現我們要的檔案

其餘一些相關設定如以下圖片:
Table filters  
可選擇要建立相關映射的 Table

選擇產出的 ?.hbm.xml 檔案中,jdbc的資料型別對應Hibernate的類型

將重複無用對應資料刪除

建立要加入該 ?.hbm.xml資料的對應欄位,可順便設定primary key 相關產出方式
範例:
        <id name="logId"type="long">
            <column name="LOG_ID"precision="10" scale="0"/>
            <generator class="native">
              <param name="sequence">CHECKIN_LOG_AUTO</param>
            </generator>
        </id>
對照的選項如下:

完成後產出資料後,請記得去將該 ???.hbm.xml 加入 hibernate.cfg.xml mapping 中,如下

修改後的結果,其實可透過介面新增屬性,當然也可以直接對source對修改

如此就可以試著使用該產出的檔案,若有勾選輸出DAO,則可直接拿來運用

但請記得修改當中的 getSessionFactory()
    protected SessionFactory getSessionFactory() {
        try {
            //return (SessionFactory) new InitialContext().lookup("SessionFactory");
            return (SessionFactory)new          Configuration().configure().buildSessionFactory();
        } catch (Exception e) {
            log.error("Could not locate SessionFactory in JNDI", e);
            throw new IllegalStateException(
                    "Could not locate SessionFactory in JNDI");
        }
    }
如此一來才能順利取得 hibernate.cfg.xml 的相關配置資料

Related Posts Plugin for WordPress, Blogger...