hibernate-HQL語句(1)
http://java.chinaitlab.com/Hibernate/809957.html
當月第一天 select timestamp(concat(year(curdate()),'-',month(curdate()),'-','1')) 如2010-08-01 00:00:00
當前時間 select now()
測試對于保證軟件開發質量有著非常重要的作用,單元測試更是必不可少,
JUnit是一個非常強
大的單元測試包,可以對一個/多個類的單個/多個方法測試,還可以將不同的TestCase組合成TestSuit,使測試
任務自動化。Eclipse同樣集成了JUnit,可以非常方便地編寫TestCase。
我們創
建一個Java工程,添加一個example.Hello類,首先我們給Hello類添加一個abs()方法,作用是返
回絕對值:

(圖一)
下一
步,我們準備對這個方法進行測試,確保功能正常。選中Hello.java,右
鍵點擊,選擇New->JUnit
Test Case:

(圖二)
Eclipse會詢問是否添加junit.jar包,確定后新建一個HelloTest類,用來測試Hello類。

(圖三)
選中setUp()和tearDown(),然后點擊“Next”:

(圖
四)
選擇要
測試的方法,我們選中abs(int)方法,完成后在HelloTest.java中輸入:

(圖五)
JUnit會以以下順序執行測試:(大致的代碼)
try {
HelloTest test = new HelloTest(); // 建立測試類實例
test.setUp(); // 初始化測試環境
test.testAbs();
// 測試某個方法
test.tearDown(); // 清理資源
}
catch…
setUp()是建立測試環境,這里創建一個Hello類的實例;tearDown()用于清理資源,如釋放打開的文件等等。以test開頭的方法被認為是測試方法,JUnit會依次執行testXxx()方法。在testAbs()方法中,我們對abs()的測試分別選擇
正數,負數和0,如果方法返回值與期待結果相同,則assertEquals不會產生異常。
如果有
多個testXxx方法,JUnit會創建多個XxxTest實例,每次
運行一個testXxx方法,setUp()和tearDown()會在testXxx前后被調用,因此,不要在一個testA()中依賴testB()。
直接運
行Run->Run
As->JUnit Test,就可
以看到JUnit測試結果:

(圖六)
綠色表
示測試通過,只要有1個測試未通過,就會顯示紅色并列出未通過測試的方法。可以試圖改變abs()的代碼,故意返回錯誤的結果(比如return n+1;),然后再運行JUnit就會報告錯誤。
如果沒
有JUnit面板,選擇Window->Show View->Other,打開JUnit的View:

(圖七)
JUnit通過單元測試,能在開發階段就找出許多Bug,并且,多個Test Case可以組合成Test Suite,讓
整個測試自動完成,尤其適合于XP方法。每增加一個小的新功能或者對代碼進行了小的修改,就立刻運行一
遍Test Suite,確保新增和修改的代碼不會破壞原有的功能,大大增強軟件的可維護
性,避免代碼逐漸“腐爛”。
初次學會使用Junit的使用是通過這篇文章的(上文),自己嘗試跟著做了一遍,結果發現它上面提供的代碼例子是錯誤
的,不過流程、圖片都很清楚。所以你可以先看看它上面是怎么說的,至于測試的代碼我稍做了改動,為的是只要說明問題就行——其實不難。
被測試的類代碼:
public class HelloJunit {
public static int abs(int n){
return n>=0?n:(-n);
}
}
Junit的測試代碼:
import junit.framework.TestCase;
public class HelloJunitTest extends TestCase {
public void testAbs() {
assertEquals(HelloJunit.abs(10),10);
assertEquals(HelloJunit.abs(-10),10);
}
}
主要代碼
行為assertEquals(HelloJunit.abs(10),10);
其中參數
的意義為:
HelloJunit.abs(10)執行類HelloJunit的abs方法(參數為10,表示求10的絕對值)。
逗號后面
的10表示為預期的結果(期望值)。
該行表示
將期望值(10)與實際值(類HelloJunit的abs方法執行結果)進行比較,如果不相
等則拋出異常。
這里只是
一個簡簡單單的例子,Junit被大家稱為優秀的白盒自動化測試框架,當然只有自己用過了才會了解。網上有許多的資料介紹這個框架,筆
者也是從自身情況出發來學習它的。當然學習使用它是需要有一定基礎的,筆者擁有C和C++的基礎,對Java的學習也開始不久,所以在這里將力
所能及的知識共享出來與大家分享,希望能夠共同提高。另外筆者是專職的測試人員,所以在描述一些問題時大多都會以測試的角度來闡述。學習此框架的目的在于
能夠在工作中進行白盒測試,在以后的介紹中還會介紹白盒測試相關的理論和工具,希望大家能夠一起提高進步。
由于MySQL目前字段的默認值不支持函數的形式設置默認值是不可能的。
代替的方案是使用TIMESTAMP類型代替DATETIME類型。
CURRENT_TIMESTAMP
:當我更新這條記錄的時候,這條記錄的這個字段不會改變。
CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
:當我更新這條記錄的時候,這條記錄的這個字段將會改變。即時間變為了更新時候的時間。(注意一個UPDATE設置一個列為它已經有的值,這將不引起
TIMESTAMP列被更新,因為如果你設置一個列為它當前的值,MySQL為了效率而忽略更改。)如果有多個TIMESTAMP列,只有第一個自動更
新。
TIMESTAMP列類型自動地用當前的日期和時間標記INSERT或UPDATE的操作。
如果有多個
TIMESTAMP列,只有第一個自動更新。
自動更新第一個TIMESTAMP列在下列任何條件下發生:
列
值沒有明確地在一個INSERT或LOAD DATA INFILE語句中指定。
列值沒有明確地在一個UPDATE語句中指定且另
外一些的列改變值。(注意一個UPDATE設置一個列為它已經有的值,這將不引起TIMESTAMP列被更新,因為如果你設置一個列為它當前的
值,MySQL為了效率而忽略更改。)
你明確地設定TIMESTAMP列為NULL.
除第一個以外的
TIMESTAMP列也可以設置到當前的日期和時間,只要將列設為NULL,或NOW()。
另外在5.0以上版本中也可以使用
trigger來實現此功能。
create table test_time (
id int(11),
create_time
datetime
);
delimiter |
create
trigger default_datetime before insert on test_time
for each
row
if new.create_time is null then
set
new.create_time = now();
end if;|
delimiter ;
生成 注釋
應該是選取要注釋內容后, ctrl+shift+c 按一下注釋,按兩下取消注釋
ctrl+shift+"反注釋!能講ctrl+shift+/ 多行注釋掉的內容反注釋掉
CTRL+T 查看接口的實現
MyEclipse調試
1.首先在一個java文件中設斷點,然后運行debug,當程序走到斷點處就會停下。
2.F5鍵與F6鍵均為單步調試,
F5是step into,也就是進入本行代碼中執行(進入函數執行),
F6是step over,也就是執行本行代碼,跳到下一行執行(不進入函數),
3.F7是跳出函數 step return
4.F8是執行到最后。
=====================================
1.Step Into (F5) 跳入
2.Step Over (F6) 跳過
3.Step Return (F7) 執行完當前method,然后return跳出此method
4.step Filter 逐步過濾
一直執行直到遇到未經過濾的位置或斷點(設置Filter:window-preferences-java-Debug-step
Filtering)
5.resume 重新開始執行debug,一直運行直到遇到breakpoint
6.hit count 設置執行次數 適合程序中的for循環(設置 breakpoint view-右鍵hit
count)
7.inspect 檢查 運算。執行一個表達式顯示執行值
8.watch 實時地監視變量的變化
9.我們常說的斷點(breakpoints)是指line breakpoints,除了line
breakpoints,還有其他的斷點類型:field(watchpoint)breakpoint,method
breakpoint,exception breakpoint.
10.field breakpoint 也叫watchpoint(監視點) 當成員變量被讀取或修改時暫掛
11.添加method breakpoint 進入/離開此方法時暫掛(Run-method breakpoint)
12.添加Exception breakpoint 捕抓到Execption時暫掛(待續...)
斷點屬性:
1.hit count 執行多少次數后暫掛 用于循環
2.enable condition 遇到符合你輸入條件(為ture\改變時)就暫掛
3.suspend thread 多線程時暫掛此線程
4.suspend VM 暫掛虛擬機
13.variables 視圖里的變量可以改變變量值,在variables 視圖選擇變量點擊右鍵--change
value.一次來進行快速調試。
14.debug
過程中修改了某些code后--〉save&build-->resume-->重新暫掛于斷點
===========================
例如你有如下程序:
public class debugtest {
來源:(http://blog.sina.com.cn/s/blog_624aa0960100fkrr.html)
- MyEclipse調試_匆匆過客_新浪博客
public String addDays() {
System.out.println("1");//
=============》(3)
String result = "";
//=============》(4)
System.out.println("2");//
=============》(5)
return result;
}
public static void main(String args[]) {
debugtest aa = new
debugtest();
int ii=9;
aa.addDays();//
=============》(1)
System.out.println("eeeeeeeeeeeeeee");//=============》(2)
}
}
你在(1)處加斷點,運行到此處時如果Step Into (F5)為跳入(進入函數),則接著執行到(3)。
再執行Step Over (F6)執行本行,則執行到(4)。
最后執行Step Return (also F7),則跳出addDays方法,跳到(2)
轉http://blog.sina.com.cn/s/blog_624aa0960100fkrr.html
MyEclipse 中顯示行號 要想顯示行號,按住 Ctrl + F10 選擇 show Line Numbers
eclipse/myeclipse注釋模板的修改 alt+shitf+j
Window --> Java --> Code Style --> Code Templates --> Comments --> types --> Edit
/**
*
* 項目名稱:${project_name}
* 類名稱:${type_name}
* 類描述:
* 創建人:${user}
* 創建時間:${date} ${time}
* 修改人:${user}
* 修改時間:${date} ${time}
* 修改備注:
* @version
*
*/
http://www.javaeye.com/topic/585168
myeclipse中如何配置自定義的代碼排版格式 ctrl+shift+f
http://www.tkk7.com/bolo/
http://www.tkk7.com/bolo/archive/2010/04/11/318004.html
com.test.action.user包下:
SaveUserAction.java
SaveUserAction-validation.xml
SaveUserAction.java文件的內容:
package com.test.action.user;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService;
public class SaveUserAction extends ActionSupport
{
private User user;
private UserService service;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public UserService getService()
{
return service;
}
public void setService(UserService service)
{
this.service = service;
}
@Override
public String execute() throws Exception
{
this.service.save(this.user);
return SUCCESS;
}
@Override
@SuppressWarnings("unchecked")
public void validate()
{
Map map = this.getFieldErrors();
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();)
{
System.out.println(map.get(iter.next()));
}
}
}
SaveUserAction-validation.xml的文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "
<validators>
<field name="user">
<field-validator type="visitor">
<param name="context">user</param>
<param name="appendPrefix">true</param>
<message>user's </message>
</field-validator>
</field>
</validators>
com.test.bean包下的文件:
User.java;
User-user-validation.xml
User-user-validation.xml文件的內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "
<validators>
<field name="firstname">
<field-validator type="requiredstring">
<message>required first name</message>
</field-validator>
</field>
<field name="lastname">
<field-validator type="requiredstring">
<message>required last name</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>required age</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>age should be between ${min} and
${max}</message>
</field-validator>
</field>
</validators>
還有一個問題,就是校驗信息會重復,在錯誤的情況下。由以下代碼可以測試:
@Override
@SuppressWarnings("unchecked")
public void validate()
{
Map map = this.getFieldErrors();
Set set = map.keySet();
for (Iterator iter = set.iterator(); iter.hasNext();)
{
System.out.println(map.get(iter.next()));
}
}
}
解決方法:
applicationContext.xml 文件中的配置action中加入:Struts 2.0 的action 是有狀態的
在spring 配置的action 中加上 scope="prototype";
配置如下:<bean id="saveUserAction"
class="com.test.action.user.SaveUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean>
關鍵字: struts2,spring2,hibernate3,整合
今天在寢室窩了一天,由于前天老師給了個ss2+toplink的項目源碼,要我去消化。直接看那
三個整合具吃力,于是先從ssh2入手吧!
所使用的工具和環境。
jdk6+myeclipse6.5+tomcat6+mysql5+spring2.0+hibernate3+struts2
好了,開始我們的第一個ssh2之旅吧。
首先先分析一下我們的第一個ssh2項目的需求,簡單的說就是有一張表單,
讓你填寫用戶名和密碼,提交后存入數據庫。就這么簡單,呵呵。
第一步:。我
們首先新建一張mysql數據表
sql如下
CREATE TABLE mytest.users (
id INT
NOT NULL,
username VARCHAR(50),
password VARCHAR(50),
PRIMARY KEY (id)
數據表創建好后結構如下:
當然我已經有幾天數據添加進去了
第二步
打開myeclipse,新建一個web項目,
命名為ssh2-2, java ee規范我們選擇5,如圖
第三步 務必小心的一步
導
入ssh2的各個jar,步驟如下:
選中當前的項目后,點擊菜單爛的myeclipse---project
capablities----add hibernate項,跳出如圖
務必按照圖示選擇,尤其是copy checkde……一項,然后點擊next,默認next,去掉specify
database……復選框,next,去掉create session……復選框,finish。
再次選中選中當前的項目后,點擊
菜單爛的myeclipse---project capablities----add spring項,跳出如圖
依然務必按照如是選擇,jar文件選擇如下5個:
點擊next,
之后按下選擇,務必,
next后finsh即可。
然后導入struts2的jar
如下5個放到lib下
然后放入我們的數據庫驅動jar mysql-connector-java-5.0.8-bin.jar 沒得話附件中有
至
此,包都導入完畢
http://77857.blog.51cto.com/67857/149631
去網上找了一些相關錯誤的信息看了下說Hibernate core下面的xerces.jar包的問題。刪除后正確了。
如果刪除后還是錯誤,看一下項目的lib文件夾下面的是否還有xerces相關jar包,也刪掉。
記住把tomcat 里面xerces.jar也要刪掉