2006年05月26日

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List

在这个下面有自动运行的软件列表.有些木马就在这下面;

2006年05月22日

log4j.properties

### 可以给log配置取个名字,在后面就可以用这个名字配置log;

### 比如我要配置两个log,名字分别为:consoteLog,fileLog

### log4j 对日志的输出定义了级别,共有6个级别,分别是:fatal,error,warn,info,debug,trace ###
### 其中fatal的级别最高,trace的级别最低,只有当它的输出日志的级别大于或等于为日志器配置的日志级别时 ###
### 这个级别的日志才可以输出,比如你的日志的级别是info,那么只有大于info级别的fatal,error,warn,info 的 ###
### 信息才会输出.下面的两个日志的级别分别为:DEBUG,WARN,名称为 consoteLog,fileLog

log4j.rootLogger=DEBUG,consoteLog
log4j.rootLogger=WARN,fileLog


### 设置 consoteLog 的输出地为ConsoleAppender(控制台) ##
### 设置 fileLog 的输出地是到文件(文件大小到达指定尺寸的时候产生一个新的文件)##
### 其他可供选择的输出方式为:org.apache.log4j.FileAppender(文件) ##
### org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件) ##
### org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ##
### org.apache.log4j.WriterAppender(将日志消息以流的格式发送到任意指定的地方) ##

log4j.appender.consoteLog=org.apache.log4j.ConsoleAppender
log4j.appender.fileLog=org.apache.log4j.RollingFileAppender


### 指定fileLog日志文件输出的位置 ##
log4j.appender.fileLog.File=E:\\fileLog.log
### 指定fileLog日志文件的大小##
log4j.appender.fileLog.MaxFileSize=500KB

### 设置consoteLog的输出布局格式PatterLayout,(可以灵活地指定布局模式)##
### 其他可供选择的布局格式: org.apache.log4j.HTMLLayout(HTML表格形式布局) ##
### org.apache.log4j.SimpleLayout (包含日志消息的级别和信息字符串) ##
### org.apache.log4j.TTCCLayout (包含日志产生的时间,线程和类别等信息)

log4j.appender.consoteLog.layout=org.apache.log4j.PatternLayout
log4j.appender.fileLog.layout=org.apache.log4j.PatternLayout


### 配置日志输出的格式##

log4j.appender.consoteLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
log4j.appender.fileLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

下面说说怎么在实际的工程里启动log4j了,首先不管是在tomcat里还是在IDE里,要把log4j.jar包放在lib下,
在tomcat中就放在你的web工程的 WEB-INF/lib 中,在IDE中就用工程的包向导(一般在工程的属性中)将包引入到工程中就行了;
在Tomcat做服务器时把 log4j.properties 文件放在你的工程的 WEB-INF/classes/下,在IDE(ecilpse,idea)中放在src/下
如果你的工程用了Hibernate,Spring,ibatis的话,基本上就不用进行其他设置了,因为在这些项目中,当web服务器启动时都默认会启动日志的
(如果有log4j.properties,和log4j.jar的,并且放在正确的位置的话);
如果你要在IDE中把项目当成应用程序来调试,又想看见日志的话(在out中),在你的应用程序的main方法中写上:

Log log=LogFactory.getLog(main.class);
BasicConfigrator.configure();

这个你就可以在ecilpse的输出窗口中看见日志了;

2006年05月14日

Struts入门级配置


   工作之余写了一个关于Struts的基本配置,是一个登陆的流程,一个login.jsp页面,用户名和密码。 没有连接数据库来验证用户登陆信息,而是直接用了一个简单的验证方法。目的是尽量简单化,突出 Struts的配置。这里没有详细介绍Struts的具体参数的意义和使用方法,请参考相关的资料。IDE用的是Idea5。服务器用的是Tomcat5。

请将相关的Struts的包引用进来,具体的文件目录如下:


下面分别将每个文件的具体内容列出,其中有解释:

login.jsp

<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page contentType="text/html; charset=GBK" %>

<html>
<head><title>Login</title></head>
<body><center>
<h1>Login</h1>
<html:form action="/login.do" method="post">
<table>
<tr><td>用户名:<html:text property="name" size="20"/></td></tr>
<tr><td>密 码:<html:password property="password" size="20"/></td></tr>
<tr><td align="center"><html:submit value="Login"></html:submit><html:reset value="Reset"></html:reset> </td></tr>
</table>
</html:form>
</center>
</body>
</html>

 

success.jsp

<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page contentType="text/html; charset=GBK" %>

<html>
<head><title>success</title></head>

<body><h1>登陆成功!</h1>
<html:form action="/login.do" method="post">
<logic:notEmpty name="loginForm" property="name">
<h1>欢迎你:<bean:write name="loginForm" property="name"></bean:write></h1>
</logic:notEmpty>
</html:form>
</body>
</html>

bad.jsp

<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ page contentType="text/html; charset=GBK" %>

<html>
<head><title>bad</title></head>

<body><h1>登陆失败!</h1>
<a href="login.jsp"> 重新登陆 </a>
</body>
</html>

web.xml

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/conf/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<!– The Usual Welcome File List –>

<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>

<!– 申明Struts标签库,taglib是引用路径,taglib-location是本地标签库的路径 –>
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>

</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-template</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>

</web-app>

struts-config.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
<!– ========== Form Bean Definitions =================================== –>
<form-beans>
<form-bean name="loginForm" type="form.LoginForm"/>
</form-beans>

<!– ========== Action Mapping Definitions ============================== –>
<action-mappings>
<!– Process a user login –>
<action path="/login" type="action.LoginAction" attribute="loginForm"
name="loginForm"
input="/bad.jsp" scope="request">
<forward name="success" path="/success.jsp"/>
</action>
</action-mappings>
</struts-config>

 

User.java

package model;

/**
* 这个用户的模型类;
*/

public class User {
private int id;
private String name;
private String password;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

UserDao.java

package dao;
import model.User;

/**
* 验证用户登陆信息的类,在实际项目中验证用户信息应该是登陆数据库,查询用户是否存在来决定用户登陆是否登陆成功的,
* 这里主要讲述Struts的基本配置,为了简单就没有配置数据的部分。
*/

public class UserDao {
private static String checkName = "lvxuehu";
private static String checkPassword = "123456";

public static boolean checkUser(User user) {
if (user.getName() != null && user.getPassword() != null) {
if (user.getName().trim().equals(checkName) && user.getPassword().trim().equals(checkPassword)) {
return true;
}
}
return false;
}
}


LoginForm.java

package form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;

/**
* 这里是Struts的ActionForm Bean部分,Struts将自动将表单数据组装到ActionForm Bean中,这里的属性应该和
* login.jsp页面表单中的控件property 对应,在这个类中有两个方法可以覆盖,validate 和 reset,validate用来
* 负责表单数据的验证,reset可以将数据复位为默认值。
*/

public class LoginForm extends ActionForm {
private int id;
private String name;
private String password;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

/**
* 这个方法就是负责验证用户表单的,我在实际项目没有用这个方法来验证表单,而是直接用javaScript在页面上验证,
* 因为ActionEerrors在传输中文的时候容易出现乱码。
*/
// public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
// return super.validate(actionMapping, httpServletRequest); //To change body of overridden methods use File | Settings | File Templates.
// }


public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) {
this.name = "";
this.password = "";
}
}

LoginAction.java

package action;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import form.LoginForm;
import model.User;
import dao.UserDao;

/**
* Struts 的 Action,负责页面逻辑的跳转;
*/

public class LoginAction extends Action {
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
LoginForm thisForm = (LoginForm) actionForm;
User user =new User();
user.setName(thisForm.getName());
user.setPassword(thisForm.getPassword());
if(UserDao.checkUser(user)){
return actionMapping.findForward("success");
}

return actionMapping.getInputForward();
}
}

2006年05月13日


这是我在色影无忌看见的一幅图片,觉得很有感触,就把它贴过来了。图片上的小女孩可能只有6,7岁,这个年龄应该是无忧无虑的过着快乐的童年的,但她为了生活,这么小就要担负起这个沉重的责任,小女孩的那种渴望的神情很让我感动。但是我们又能做些什么呢!记得在一篇文章中有这么几句话:“如果在寒冷夜晚的大街上,你遇到一个卖花的小孩,如果你钱包里有足够的钱,如果你在经济上还过的比较宽松,那你可以帮她买尽量多的花,这样她就可以很快的回去睡觉了,不用在寒风中发抖了!”,我想我也只能做这么多了。希望现在过的很幸福的人应该珍惜眼前的幸福,过的很艰难的人,要学会摆脱困苦,用自己的智慧和勤劳的双手改变命运!

2006年05月11日

 function compareDate(DateOne,DateTwo)
{

var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ("-"));
var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ("-")+1);
var OneYear = DateOne.substring(0,DateOne.indexOf ("-"));

var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ("-"));
var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ("-")+1);
var TwoYear = DateTwo.substring(0,DateTwo.indexOf ("-"));

if (Date.parse(OneMonth+"/"+OneDay+"/"+OneYear) >
Date.parse(TwoMonth+"/"+TwoDay+"/"+TwoYear))
{
return true;
}
else
{
return false;
}

}

 

举例:
alert(compareDate(”2004-12-01”,”2004-05-02”’));
目前知支持年-月-日这样的格式

引用链接:http://bbs.zhupao.com/archiver/board29/topic80023.html

     在Structs中<bean:write name="" property="" format=""/>中,format可以用来格式化输出,如 format="0.00%",如果是0.152,那么输出的就是15.2%,如果改成format="RMB:000.00" 原来的值是100,那么输出的就是RMB:100.00.

2006年05月10日

idea4.5在windows2003上安装时被windows的安全程序禁止了,idea5.0没有这样的问题。解决的办法是将idea4.5的安装包的文件扩展名改成rar,也就是压缩文件的格式,然后解压缩,在解压缩后的文件夹下找到windows文件夹中的install就可以安装了。

“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。”
  接着按照提示重启计算机,再安装,仍然出现同样的提示。再网上查找相关资料,得知是安装程序在先前的安装过程中在系统注册表留下某些信息,导致不能安装。于是经过多次试,发现删除掉如下键值信息即可安装:
  在运行窗口输入regedit,打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager中找到PendingFileRenameOperations,删除该键值,关闭注册表编辑器。重新安装SQL Server 2000,哈哈,久违的安装界面终于浮出水面了。
  这个键值是安装程序暂挂项目,只要找到对应的应用程序清除掉就行了。

2006年05月08日

<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Chromeless Window</title>
<SCRIPT LANGUAGE="JScript">
/*
 This following code are designed and writen by Windy_sk <windy_sk@126.com>
 You can use it freely, but u must held all the copyright items!
 2003-12-23 modified
 Special Thanks For andot
*/

var CW_width = 400;
var CW_height = 300;
var CW_top = 100;
var CW_left = 100;
var CW_url = "/";
var New_CW = window.createPopup();
var CW_Body = New_CW.document.body;
var content = "";
var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle=’outset’}, onmousedown=function(){if(event.button!=2)this.style.borderStyle=’inset’});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";

function insert_content(){
 var temp = "";
 CW_Body.style.overflow  = "hidden";
 CW_Body.style.backgroundColor = "white";
 CW_Body.style.border  = "solid black 1px";
 temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";
 temp += "<tr style=’;font-size:12px;background:#0099CC;height:20;cursor:default’ ondblclick=\"Max.innerText=Max.innerText==’1′?’2′:’1′;parent.if_max=!parent.if_max;parent.show_CW();\" onmouseup=’parent.drag_up(event)’ onmousemove=’parent.drag_move(event)’ onmousedown=’parent.drag_down(event)’ onselectstart=’return false’ oncontextmenu=’return false’>";
 temp += "<td style=’color:#ffffff;padding-left:5px’>Chromeless Window For IE6 SP1</td>";
 temp += "<td style=’color:#ffffff;padding-right:5px;’ align=right>";
 temp += "<span id=Help  onclick=\"alert(‘Chromeless Window For IE6 SP1  -  Ver 1.0\\n\\nCode By Windy_sk\\n\\nSpecial Thanks For andot’)\" style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";
 temp += "<span id=Min   onclick=’parent.New_CW.hide();parent.blur()’ style=\""+CSStext+"font-family:Webdings;\" title=’Minimum’>0</span>";
 temp += "<span id=Max   onclick=\"this.innerText=this.innerText==’1′?’2′:’1′;parent.if_max=!parent.if_max;parent.show_CW();\" style=\""+CSStext+"font-family:Webdings;\" title=’Maximum’>1</span>";
 temp += "<span id=Close onclick=’parent.opener=null;parent.close()’ style=\""+CSStext+"font-family:System;padding-right:2px;\" title=’Close’>x</span>";
 temp += "</td></tr><tr><td colspan=2>";
 temp += "<div>";
 temp += "这里是网页内容<br>这里是网页内容<br>…";
 temp += "</div>";
 temp += "</td></tr></table>";
 CW_Body.innerHTML = temp;
}

insert_content();

var if_max = true;
function show_CW(){
 window.moveTo(10000, 10000);
 if(if_max){
  New_CW.show(CW_top, CW_left, CW_width, CW_height);
  if(typeof(New_CW.document.all.include)!="undefined"){
   New_CW.document.all.include.style.width = CW_width;
   New_CW.document.all.Max.innerText = "1";
  }
  
 }else{
  New_CW.show(0, 0, screen.width, screen.height);
  New_CW.document.all.include.style.width = screen.width;
 }
}

window.onfocus  = show_CW;
window.onresize = show_CW;

// Move Window
var drag_x,drag_y,draging=false

function drag_move(e){
 if (draging){
  New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
  return false;
 }
}

function drag_down(e){
 if(e.button==2)return;
 if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
 drag_x=e.clientX;
 drag_y=e.clientY;
 draging=true;
 e.srcElement.setCapture();
}

function drag_up(e){
 draging=false;
 e.srcElement.releaseCapture();
 if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
 CW_top  = e.screenX-drag_x;
 CW_left = e.screenY-drag_y;
}
</SCRIPT>
</HTML>

转载地址:无边框窗口(Chromeless Window):http://www.51windows.net/data/files/file_766.asp

2006年05月03日

     最近的项目在用ibatis进行数据库操作,由于这方面的资料相对不多,为了让初学者容易上手,我写了一个比较简单的ibatis配置,没有用接口,工厂和DAO进行操作,目的就是希望让大家更容易理解。IDE 用idea5.0,数据库是用SQLserver2000,SQL脚本如下:

if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[userInfo]‘) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
drop table [dbo].[userInfo]
GO

CREATE TABLE [dbo].[userInfo] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[userName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

文件的目录结构如下(在idea5.0中):



每个文件的源代码如下:
UserInfo.java


package module;

public class UserInfo {
private int id;
private String userName;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}
}

UserInfo.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<!–这里只写了一个select,其他写法请参考有关书籍–>
<sqlMap namespace="userInfo">
<!–定义映射文件的别名,比如此XML文件中就用u代替了module.UserInfo,这样就不用在每个地方写出class的全名–>
<typeAlias alias="u" type="module.UserInfo"/>

<select id="getUser" resultClass="u" parameterClass="u">
select * from userInfo where id=#id#
</select>

</sqlMap>

SqlMapClientInit.java

package init;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;

import java.io.Reader;
//初始化SqlMapClient;

public class SqlMapClientInit {
private static SqlMapClient sqlMapClient = null;

static {
try {
String resource = "conf/sqlmapconfig.xml";

Reader reader = null;
reader = Resources.getResourceAsReader(resource);

if (sqlMapClient == null) {
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static SqlMapClient getSqlMapClient() {
return sqlMapClient;
}
}

 

db.properties

#用来设置数据库的连接参数;根据用户的具体环境设置;
driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Test;SelectMethod=cursor
username=sa
password=1111

sqlmapconfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<!–这是ibatis的主要配置文件–>
<sqlMapConfig>
<!–引用数据库的配置文件–>
<properties resource="conf/db.properties" />
<!–有关这个配置文件每个参数的意义,请参考具体ibatis的资料,一般按照他的默认设置就行了–>
<!–useStatementNamespaces=“true”:用来设置是否使用statement的命名空间
比如在Test的main方法中调用UserInfo.xml的getUser使用了命名空间加方法名的方式
newUser=(UserInfo)sqlMapClient.queryForObject("userInfo.getUser",user);
如果useStatementNamespaces=“false”则直接写成getUser 调用就行了;
–>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
/>

<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driverClassName}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<property name="JDBC.DefaultAutoCommit" value="true" />
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="500"/>
<property name="Pool.PingQuery" value="select 1 from author"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<!–指定映射文件的位置–>
<sqlMap resource="module/maps/UserInfo.xml" />
</sqlMapConfig>

Test.java

import module.UserInfo;
import init.SqlMapClientInit;
import com.ibatis.sqlmap.client.SqlMapClient;

public class Test {
public static void main(String args[]) throws Exception {


UserInfo user=new UserInfo();
UserInfo newUser=null;

user.setId(1);
SqlMapClient sqlMapClient=null;
sqlMapClient=SqlMapClientInit.getSqlMapClient();
if(sqlMapClient!=null){
newUser=(UserInfo)sqlMapClient.queryForObject("userInfo.getUser",user);
}

if(newUser!=null){
System.out.println("newUser.getUserName() = " + newUser.getUserName());
}

}
}

这样一个基本的ibatis的环境就建立了。运行Test.java,可以从数据库中查到id号等于1的一条记录;其他ibatis的具体操作请参考相关书籍;