刚开始接触ibatis,我被告知他是持久层的工具和Hibernate差不多。
在Java开源大全中有这么一段介绍:
使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而
对于具体的数据操作,Hibernate 会自动生成SQL语句,而ibatis 则要求开发者编写具体的SQL语句。相对Hibernate等 “全自动”ORM机制而
言,ibatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,
ibatis的出现显得别具意义。
需要的包:
ibatis开发包:ibatis-common-2.jar;ibatis-sqlmap-2.jar
数据库驱动包(数据库用MySQL):mysql-connector-java-3.1.12-bin.jar
首先,在数据库中建一个数据库 test, 其中有一个table user(name, password)
接下来同过ibatis实现对test.table数据的插入、删除、修改。
需要创建的文件:
SqlMapConfig.xml // SqlMap配置文件,配置数据库访问、驱动及SqlMap源文件路径映射(可有多个)
user.xml // SqlMap源文件,这就是ibatis的非“全自动”所在,在这里将数据库中的表同java类映射起来,并且自己编写数
据库操作逻辑,使开发者更具自由
User.java // 映射数据库表的JavaBean
UserDirectory.java // 直接出发按SqlMap映射执行数据库操作的类
注:SqlMapConfig.xml和user.xml放在classpath能找到的地方,本例放在com.power.test包中。
文件内容:
// 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>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/test"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="mysql"/> <!-- 密码不定,按个人设置 -->
</dataSource>
</transactionManager>
<sqlMap resource="user.xml"/> <!-- 也可采用全路径com.powe.test.user.xml -->
</sqlMapConfig>
// user.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">
<!-- The user infomation sql map -->
<sqlMap namespace="User">
<typeAlias alias="User" type="com.power.test.User"/>
<select id="selectUserByName" parameterClass="String" resultClass="User">
<![CDATA[
select NAME as name, PASSWORD as password from USER where NAME=#value#
]]>
</select>
<insert id="insertUser" parameterClass="User">
<![CDATA[
insert into USER(NAME, PASSWORD)
values(#name#, #password#)
]]>
</insert>
<update id="updatePasswordOfUser" parameterClass="User">
<![CDATA[
update USER set PASSWORD=#PASSWORD# where NAME=#name#
]]>
</update>
<delete id="deleteUser" parameterClass="User">
<![CDATA[
delete from USER where NAME=#name#
]]>
</delete>
</sqlMap>
// User.java
package com.power.test;
public class User {
private String name;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// UserDirectory.java
package com.power.test;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class UserDirectory {
private static UserDirectory instance = null;
private static SqlMapClient sqlMapper = null;
static {
try {
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch(IOException e) {
throw new RuntimeException("Something had happened while building the SqlMapClient instance.");
}
}
private UserDirectory() {}
// 按名称查询用户
public static User selectUserByName(String name) throws SQLException {
return (User)sqlMapper.queryForObject("selectUserByName", name);
}
// 插入用户
public static void insertUser(User user) throws SQLException{
sqlMapper.insert("insertUser", user);
}
// 按用户更新
public static void updateUserByName(User user) throws SQLException {
sqlMapper.update("updateUserByName", user);
}
// 按用户删除
public static void deleteUserByName(User user) throws SQLException {
sqlMapper.delete("deleteByName", user);
}
}
好了,这样就可以用UserDirectory操作数据库表User了.