小弟今天在Javaeye上面碰到一个好文章,是iBatis的入门,上面讲了一个小例子,觉得不错,不过代码里面有部分错,已纠正!
我用的是MyEclipse8.5+MySQL;
第一步是建数据库
create database if not exists `sample`;
USE `sample`;
drop table if exists `t_user`;
CREATE TABLE `t_user` (
`id` int ( 11 ) NOT NULL auto_increment,
` name ` varchar ( 50 ) default NULL ,
`sex` int ( 11 ) default NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
insert into `t_user` values ( 1 , ' dagmom' , 1 ),( 2 , ' guhao ' , 2 ),( 3 , ' 3 ' , 3 ),( 4 , ' 4 ' , 4 ),( 5 , ' 5 ' , 5 );
第二步是准备所需要的jar包
下面是我写的树形结构图
3,接下来开始配置 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"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/sample" /> <property name="JDBC.Username" value="root" /> <property name="JDBC.Password" value="" /> <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 sample" /> <property name="Pool.PingEnabled" value="false" /> <property name="Pool.PingConnectionsOlderThan" value="1" /> <property name="Pool.PingConnectionsNotUsedFor" value="1" /> </dataSource> </transactionManager> <sqlMap resource="com/dagmom/maps/User.xml" /> </sqlMapConfig>
4,当然这里我么还需要写一个实体类,一边做OR Mapping映射
package com.dagmom.model;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Integer sex;
public User() {
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
5,和hibernate一样,iBatis也需要配置文件
<?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"> <sqlMap namespace="User"> <typeAlias alias="user" type="com.dagmom.model.User" /> <select id="getUser" parameterClass="java.lang.String" resultClass="user"> <![CDATA[ select name, sex from t_user where name = #name# ]]> </select> <select id="getAllUser" resultClass="user"> <![CDATA[ select name, sex from t_user ]]> </select> <update id="updateUser" parameterClass="user"> <![CDATA[ UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# ]]> </update> <insert id="insertUser" parameterClass="user"> INSERT INTO t_user ( name, sex) VALUES ( #name#, #sex# ) </insert> <delete id="deleteUser" parameterClass="java.lang.String"> delete from t_user where id=#value# </delete> </sqlMap>
这个比hibernate好的地方就是,他的sql语句是写在配置文件里面的,而且是原始的sql语句不想hql那样;
6,剩下就我们就是要写一个测试类
package com.dagmom;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import com.dagmom.model.User;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class ExampleMain {
public static void update(){
//首先初始化iBatis获得一个SqlMapClient对象
String resource = "com/dagmom/maps/SqlMapConfig.xml";
SqlMapClient sqlMap = null;
try{
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
}catch(Exception e){
e.printStackTrace();
}
//sqlMao系统初始化完毕,开始执行update操作
try{
sqlMap.startTransaction();
User user = new User();
user.setId(new Integer(1));
user.setName("guhao");
user.setSex(new Integer(1));
sqlMap.update("updateUser", user);
sqlMap.commitTransaction();
}catch(SQLException e){
System.out.println(e.getMessage());
}finally{
try{
sqlMap.endTransaction();
}catch(SQLException e){
e.printStackTrace();
}
}
}
public static List getUser(){
//首先初始化iBatis获得一个SqlMapClient对象
String resource = "com/dagmom/maps/SqlMapConfig.xml";
SqlMapClient sqlMap = null;
List user = null;
try{
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
}catch(Exception e){
e.printStackTrace();
}
//sqlMap系统初始化完毕,开始执行getAllUser操作
try{
sqlMap.startTransaction();
user = sqlMap.queryForList("getAllUser", null);
sqlMap.commitTransaction();
}catch(SQLException e){
System.out.println(e.getMessage());
}finally{
try{
sqlMap.endTransaction();
}catch(SQLException e){
e.printStackTrace();
}
}
return user;
}
public static void main(String[] args) {
System.out.print("x");
update();
List user = getUser();
System.out.println(user);
}
}
这个程序很简单,而且大家对iBatis应该有入门级的了解了,以后就容易了!