1.简介

iBatis 是一个半自动化的ORM框架,通过SQL映射文件将Java对象与数据库操作关联。本文档详细介绍如何使用 iBatis 接口进行开发。

主要特点如下:

  • 支持自定义 SQL。
  • 自动映射结果集到 Java 对象。
  • 提供事务管理支持。
  • 轻量级,易于集成。

2.环境准备

2.1.引入 iBatis 核心库
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
2.2.引入数据库驱动

在数据库安装目录 interfaces/jdbc 下,获得驱动jar包hgdb-jdbc-xxx.jar。该驱动包与PostgreSQL保持兼容,其中类名、类结构与 PostgreSQL 驱动完全一致,曾经运行于 PostgreSQL 的应用程序可以直接移植到当前系统使用。

可将对应jar包通过maven命令导入本地仓库再进行maven依赖引入。

mvn install:install-file -Dfile=E:\hgdb-jdbc-xxx.jar -DgroupId=com.highgo -DartifactId=HgdbJdbc -Dversion=9.0 -Dpackaging=jar
<dependency>
<groupId>com.highgo</groupId>
<artifactId>HgdbJdbc</artifactId>
<version>9.0</version>
</dependency>
2.3.配置文件 SqlMapConfig.xml

这是 iBatis 的主配置文件,通常放在 src/main/resources 目录下。

<?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">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.postgresql.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:postgresql://localhost:5866/ibatis"/>
<property name="JDBC.Username" value="sysdba"/>
<property name="JDBC.Password" value="password"/>
</dataSource>
</transactionManager>
<!-- 映射文件路径 -->
<sqlMap resource="mapper/UserMapper.xml"/>
</sqlMapConfig>

3.接口定义及实现

3.1.实体类 pojo
public class User {
private int id;
private String username;
private String password;

// Getters and Setters
}
3.2.接口类 mapper
public interface UserMapper {
void addUser(SqlMapClient sqlMap, User user);
void delUserByID(SqlMapClient sqlMap, User user);
void updateUser(SqlMapClient sqlMap, User user);
List<User> selectUser(SqlMapClient sqlMap);
User selectUserByID(SqlMapClient sqlMap, User user);
}
3.3.接口实现类 impl
public class UserMapperImpl implements UserMapper {
/**
* 新增user
* @param sqlMap
* @param user
*/
public void addUser(SqlMapClient sqlMap, User user) {
try {
sqlMap.insert("addUser", user);
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 根据id删除指定用户
* @param sqlMap
* @param user
*/
public void delUserByID(SqlMapClient sqlMap, User user) {
try {
sqlMap.delete("delUserById", user);
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 修改用户信息
* @param sqlMap
* @param user
*/
public void updateUser(SqlMapClient sqlMap, User user) {
try {
sqlMap.update("updateUser", user);
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 查询用户列表
* @param sqlMap
* @return
*/
public List<User> selectUser(SqlMapClient sqlMap) {
List<User> userList = null;
try {
userList = sqlMap.queryForList("selectUser");
return userList;
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}

/**
* 根据id查询指定用户信息
* @param sqlMap
* @param user
* @return
*/
public User selectUserByID(SqlMapClient sqlMap, User user) {
User u = null;
try {
u = (User)sqlMap.queryForObject("selectUserById", user);
} catch (SQLException e) {
e.printStackTrace();
}
return u;
}
}
3.4.UserMapper.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>
<typeAlias alias="User" type="com.highgo.pojo.User"/>

<insert id="addUser" parameterClass="User">
insert into t_user values (#id#,#username#,#password#)
</insert>

<delete id="delUserById" parameterClass="User">
delete from t_user where id=#id#
</delete>

<update id="updateUser" parameterClass="User">
update t_user set username = #username#,password=#password# where id=#id#
</update>

<select id="selectUser" resultClass="User">
select * from t_user
</select>

<select id="selectUserById" parameterClass="User" resultClass="User" >
select * from t_user where id=#id#
</select>

</sqlMap>

4.测试类

public class UserTest {

Reader reader = null;
SqlMapClient sqlMap = null;
UserMapperImpl userMapper = new UserMapperImpl();

@Before
public void before(){
try {
//1. 读取 SqlMapConfig.xml 配置文件
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
//2. 通过读取的配置文件构建 sqlMap 对象
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 测试写入信息
* @throws SQLException
*/
@Test
public void addUserTest() throws SQLException {

for(int i=1; i<=5; i++){
User user = new User();
user.setId(i);
user.setUsername("admin"+i);
user.setPassword("12345"+i);
userMapper.addUser(sqlMap,user);
}
}

/**
* 测试删除指定用户
* @throws SQLException
*/
@Test
public void delUserTest() throws SQLException {
User user = new User();
user.setId(5);
userMapper.delUserByID(sqlMap,user);
}

/**
* 测试更新用户信息
* @throws SQLException
*/
@Test
public void updateUser() throws SQLException {
User user = new User();
user.setId(4);
user.setUsername("admin_update");
user.setPassword("111111");
userMapper.updateUser(sqlMap,user);
}

/**
* 测试查询用户列表
* @throws SQLException
*/
@Test
public void selectUser() throws SQLException {
List<User> userList = userMapper.selectUser(sqlMap);
if(null != userList && userList.size()>0){
for(User user : userList){
System.out.println(user.getId()+","+user.getUsername()+","+user.getPassword());
}
}
}

/**
* 测试查询指定用户信息
* @throws SQLException
*/
@Test
public void selectUserByID() throws SQLException {
User user = new User();
user.setId(1);
User user1 = userMapper.selectUserByID(sqlMap,user);
if(null != user1){
System.out.println(user1.getId()+","+user1.getUsername()+","+user1.getPassword());
}
}

}