IBatis简单实现(附主键自动生成)

有一段没有更新博客啦,还请各位原谅。
这段时间一直在看Ibatis方面的东西,把IBatis的官方文档也都看完啦,觉得IBatis真就像官方说的那个门槛很低,但更加灵活。
下面三段是引用《Ibatis开发指南》上的原话。
[b]相对 Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半
自动化”的ORM实现。
所谓“半自动” ,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是
Apache OJB,都对数据库结构提供了较为完整的封装,提供了从 POJO 到数据库表的全
套映射机制。 程序员往往只需定义好了POJO 到数据库表的映射关系, 即可通过 Hibernate或者 OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,
Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执
行。
“半自动化” ,是相对Hibernate等提供了全面的数据库封装机制的 “全自动化”
ORM 实现而言, “全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动
生成和执行。 而ibatis 的着力点, 则在于POJO 与 SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO。[/b]
看了这种描述,对你有何感想呢。
出于对技术的热情,花时间把Ibatis看了一下,觉得真的还不错,就写个简单的例子,供大家参考,有什么不足的地方还请各位指出来。
本例子所用到的Jar文件为:

ibatis-2.3.jar
mysql-connecter.jar

[color=red]首先还是老一套,创建一张数据库表(使用Mysql数据库)。[/color]

CREATE DATABASE IBATISSTUDY;
CREATE TABLE PERSON(
ID INT PRIMERY KEY AUTU_INCREMENT,
U_NAME VARCHAR(20),
U_PASSWORD VARCHAR(20)
)

[color=red]然后呢,创建POJO类:[/color]

package com.jack.ibatis.pojo;

public class Person {
private int id;
private String username;
private String password;

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;
}

public String getPassword() {
return password;
}

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

大家也看到啦,Person类里的属性与person表的字段并不一致,不过没有关系的,在SqlMap中可以使用ResultMap元素进行配置的。
[color=red]现在呢,就要配置Ibatis的两个关键配置SqlMapConfig映射文件和SqlMap映射文件。[/color]
首先要配置的当然是SqlMapConfig文件:

<?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文件,加载数据库连接信息 -->
<properties resource="mysql.properties"/>
<!--配置和优化SqlMapClient实例的各选项,是可选的
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
-->
<!-- 配置Ibatis事务管理,使用JDBC事务类型,数据源使用Simple类型 -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${mysql.driver}"/>
<property name="JDBC.ConnectionURL" value="${mysql.url}"/>
<property name="JDBC.Username" value="${mysql.username}"/>
<property name="JDBC.Password" value="${mysql.password}"/>
</dataSource>
</transactionManager>
<!-- 配置Ibatis要使用的SqlMap文件信息 -->
<sqlMap resource="com/jack/ibatis/pojo/map/person.xml"/>
</sqlMapConfig>

setting元素可以配置和优化SqlMapClient对象的各选项,因为本例只是简单的使用,所有并没有必要去配置。
[color=red]现在配置SqlMap文件person.xml,此文件是专门针对您的POJO类进行配置的[/color]

<?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>
<!-- 为Person类设置一个别名 -->
<typeAlias alias="person" type="com.jack.ibatis.pojo.Person"/>
<!-- 配置表和类之间的映射关系 -->
<resultMap class="com.jack.ibatis.pojo.Person" id="personMap">
<result property="id" column="ID"/>
<result property="username" column="U_NAME"/>
<result property="password" column="U_PASSWORD"/>
</resultMap>
<!-- 添加用户 -->
<insert id="insertPerson" parameterClass="person">
<!-- 配置Mysql主键自动增长 -->
<selectKey keyProperty="id" resultClass="int">
SELECT LAST_INSERT_ID() as value
</selectKey>
<!-- 配置Oracle主键自动增长
<selectKey resultClass="int" keyProperty="id" type="pre">
<![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]>
</selectKey>-->
<!-- 配置MSServer主键自动增长
<selectKey resultClass="int" keyProperty="id">
<![CDATA[SELECT SCOPE_IDENTITY() AS ID ]]>
</selectKey>-->
<![CDATA[
INSERT PERSON(U_NAME,U_PASSWORD) VALUES(#username#,#password#)
]]>
</insert>
<!-- 查看特定用户 -->
<select id="queryPersonById" parameterClass="int" resultMap="personMap">
<![CDATA[
SELECT * FROM PERSON WHERE ID=#id#
]]>
</select>
<!-- 查看所有的用户 -->
<select id="queryAllPerson" resultMap="personMap">
<![CDATA[
SELECT * FROM PERSON
]]>
</select>
</sqlMap>

OK,现在所有的配置都已经完成啦,现在来做一个简单的测试:

package test.com.jack.ibatis;

import java.io.Reader;

import org.junit.Test;

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

public class TestPerson {
@Test
public void testInsert(){
String resource = "sqlMapConfig.xml";
try {
//读取配置文件
Reader reader = Resources.getResourceAsReader(resource);
//得到SqlMapClient
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Person person = new Person();
person.setUsername("jack");
person.setPassword("jack");
//开始Ibatis事务
sqlMap.startTransaction();
sqlMap.insert("insertPerson", person);
//结束IBatis事务
sqlMap.commitTransaction();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testQuery(){
String resource = "sqlMapConfig.xml";
try {
//读取配置文件
Reader reader = Resources.getResourceAsReader(resource);
//得到SqlMapClient
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
//查看全部的用户
sqlMap.queryForList("queryAllPerson");
//查看特定的用户
sqlMap.queryForObject("queryPersonById", 1);
}catch(Exception e){}
}
}

好了,以上就是全部的实现,希望会对初学的朋友有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值