看了《iBatis in Action》,写一个简单ibatis 2 应用实例
我学什么框架都是喜欢从简单的java程序开始,不急忙去整合。现在就用简单的java project来说。
1. 完成本实验,首先需要得到一个ibatis的jar包,我这里用的是ibatis-2.3.0.677.jar,由于本实验需要连接Mysql数据库,所以还要有mysql的驱动包,我这里用的是mysql-connector-java-5.0.5.jar。
下面将要用到的mysql数据库:
#
# Table structure for table 'user_account'
#
DROP TABLE USER_ACCOUNT;
CREATE TABLE USER_ACCOUNT (
USERID INT(3) NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(10) NOT NULL,
PASSWORD VARCHAR(30) NOT NULL,
GROUPNAME VARCHAR(10),
PRIMARY KEY (USERID)
);
#
# Data for table 'user_account'
#
INSERT INTO USER_ACCOUNT (USERNAME, PASSWORD, GROUPNAME) VALUES ('admin', 'admin', 'admin');
INSERT INTO USER_ACCOUNT (USERNAME, PASSWORD, GROUPNAME) VALUES ('ALEX', 'PICKLE', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSWORD, GROUPNAME) VALUES ('JDOE', 'TEST', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSWORD, GROUPNAME) VALUES ('Leon', '1234', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSWORD, GROUPNAME) VALUES ('Mike', '1234', 'EMPLOYEE');
COMMIT;
2. Eclipse下,新建Java Project,导入上面的两个jar包,现在工程中只有src一个源文件夹,为了后面好看,添加一个源文件夹resource。
3. 在resource源文件夹下新建3个文件
SqlMapConfig.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="ibatis-mysql.properties" />
<typeAlias alias="user" type="leon.ibatis.User" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="SqlMap.xml" />
</sqlMapConfig>
ibatis-mysql.properties:
#mysql connection
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test1
username=root
password=leonsu
SqlMap.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<select id="getAllUsers" parameterClass="string" resultClass="user">
SELECT USERID,USERNAME,PASSWORD,GROUPNAME
FROM USER_ACCOUNT
WHERE GROUPNAME = #groupName#
</select>
<select id="getUserById" parameterClass="integer" resultClass="user">
SELECT USERID,USERNAME,PASSWORD,GROUPNAME
FROM USER_ACCOUNT
WHERE USERID = #id#
</select>
</sqlMap>
说明:
这样的配置下,如果你的电脑没有联网,那么运行可能出错,因为SqlMapConfig.xml和SqlMap.xml的DOCTYPE定义的dtd文件是联网获得的,如果没联网可能会报错。
如果非要在断网的情况下运行本实验,可以先把http://ibatis.apache.org/dtd/sql-map-config-2.dtd 和http://ibatis.apache.org/dtd/sql-map-2.dtd 下载下来保存在xml文件的同一目录resource下,然后在DOCTYPE定义的时候改为这两个文件,如:
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"sql-map-2.dtd">
4. 源文件夹src下面创建类leon.ibatis.User
package leon.ibatis;
public class User {
private int userid;
private String username;
private String password;
private String groupname;
//省略getter,setter
}
在创建类,来应用ibatis:
package leon.ibatis;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class TestIBatis {
public static void main(String str[]) throws Exception {
String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List<User> list=new ArrayList<User>();
list = sqlMap.queryForList("getAllUsers", "EMPLOYEE");
int s = list.size();
System.out.println("Selected " + s + " records.");
System.out.println("USERID\tUSERNAME\tPASSWORD\tGROUP");
for (int i = 0; i < s; i++) {
System.out.print(list.get(i).getUserid()+"\t");
System.out.print(list.get(i).getUsername()+"\t\t");
System.out.print(list.get(i).getPassword()+"\t\t");
System.out.println(list.get(i).getGroupname());
}
}
}
运行这个类,打印出:
Selected 4 records.
USERID USERNAME PASSWORD GROUP
1 ALEX PICKLE EMPLOYEE
2 JDOE TEST EMPLOYEE
3 Leon 1234 EMPLOYEE
4 Mike 1234 EMPLOYEE
最后,本例子中SqlMap.xml中定义了两个select,其实也就是有两个方法了。上面用了getAllUsers,还有一个getUserById可以作为你的上手的实验,试试看吧!