`

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

阅读更多
相对 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。
   看了这种描述,对你有何感想呢。
   出于对技术的热情,花时间把Ibatis看了一下,觉得真的还不错,就写个简单的例子,供大家参考,有什么不足的地方还请各位指出来。
   本例子所用到的Jar文件为:


ibatis-2.3.jar   
mysql-connecter.jar 
ibatis-2.3.jar
mysql-connecter.jar

   首先还是创建一张数据库表(使用Mysql数据库)。

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


   然后呢,创建POJO类:

Java代码
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;    
    }    
}  
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元素进行配置的。
   现在呢,就要配置Ibatis的两个关键配置SqlMapConfig映射文件和SqlMap映射文件。
首先要配置的当然是SqlMapConfig文件:

Java代码
<?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>  
<?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对象的各选项,因为本例只是简单的使用,所有并没有必要去配置。
   现在配置SqlMap文件person.xml,此文件是专门针对您的POJO类进行配置的

Java代码
<?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>  
<?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,现在所有的配置都已经完成啦,现在来做一个简单的测试:

Java代码
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){}    
    }    
}  
分享到:
评论

相关推荐

    08_ibatis教程_sql主键生成方式.rar

    在Ibatis中,只需在Mapper XML文件中的`&lt;insert&gt;`标签中设置`useGeneratedKeys="true"`和`keyProperty="id"`,就可以让数据库自动生成主键。 4. **雪花算法(Snowflake Algorithm)**: 在分布式环境下,为了保证...

    08_ibatis教程_sql主键生成方式.zip

    在本教程"08_传智播客ibatis教程_sql主键生成方式"中,你将会深入学习到如何在Ibatis中配置和使用上述各种主键生成策略,通过实例和代码讲解,帮助你更好地理解和掌握Ibatis在处理SQL主键生成方面的技巧和最佳实践。...

    08_传智播客ibatis教程_sql主键生成方式

    本教程“08_传智播客ibatis教程_sql主键生成方式”主要聚焦于如何在Ibatis中处理SQL查询时的主键生成策略,这对于确保数据的一致性和完整性至关重要。 Ibatis允许开发者自定义SQL语句,包括插入、更新、删除和查询...

    自定义Ibatis生成器

    Ibatis生成器(也称为MyBatis Generator)允许用户通过配置文件定义规则,然后根据数据库表结构自动生成相应的Java类、Mapper接口和XML映射文件。 **自定义Ibatis生成器的核心知识点:** 1. **MyBatis框架**:...

    mysql数据库自动生成对应的java实体类和ibatis配置文件

    要实现MySQL数据库到Java实体类和iBatis配置文件的自动化生成,可以使用一些工具或插件,例如MyBatis Generator(MBG)。MBG是一个强大的工具,能够根据数据库表生成Java模型类、Mapper接口和XML配置文件。以下是...

    Ibatis/mybatis代码生成工具

    为了进一步提高开发效率,开发者们设计了一系列的代码生成工具,如"Ibatis Helper"和"generator"等,它们能够自动生成基于Ibatis或Mybatis的CRUD(Create, Read, Update, Delete)代码,从而减少手动编写SQL和实体类...

    mybatis自动sql生成插件源码

    本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器(Interceptor)在运行时自动生成SQL语句,适用于具有主键或唯一索引的单表操作。 首先,`AutoMapperInterceptor.java`是这个插件的...

    ibatIS代码生成插件

    它能够根据数据库中的表结构自动生成对应的Java实体类、Mapper接口及XML配置文件、Service接口及实现类、Controller层代码等,覆盖了Web应用开发的基本模块,使得开发者可以更专注于业务逻辑的实现,而不是基础代码...

    ibatis框架实现的增删改查

    本篇文章将深入探讨如何使用Ibatis框架实现对`student`表的增删改查操作,包括模糊查询以及利用序列自动生成主键。 首先,我们来理解Ibatis的基本概念。Ibatis是由Apache基金会维护的一个开源项目,它是一个SQL映射...

    ibatis实现增删改查功能demo

    - **Delete**:类似地,使用@Delete注解定义删除操作,传入相应的主键或条件,Ibatis会根据这些条件生成并执行删除SQL。 - **Update**:使用@Update注解,编写更新的SQL语句,通过传入的对象属性来确定更新哪些...

    IBatis codesmith模板

    `IBatis Codesmith` 的核心功能是通过模板引擎,根据用户定义的模板和数据库元数据,自动生成Java DAO(数据访问对象)层、实体类以及Mapper XML文件。这样,开发者无需手动编写重复的CRUD(创建、读取、更新、删除...

    abator Ibatis

    `Abator`作为`Ibatis`的代码生成器,通过简单的配置,可以自动生成DAO接口、实现类以及对应的实体类。使用步骤如下: 1. **配置Abator**:你需要创建一个`abator-config.xml`配置文件,指定数据库连接信息、生成的...

    Ibatis入门级教程

    Ibatis提供了多种主键生成策略,比如`identity`(标识列,适用于自动增长类型)、`sequence`(序列,Oracle常用)和`guid`(全局唯一标识符)。在Oracle环境下,我们通常会创建一个序列对象,然后在映射文件中配置...

    详细介绍Ibatis的用法

    - **自动生成的主键**:对于INSERT操作,可以通过设置`useGeneratedKeys="true"`来启用主键自动生成。 - **存储过程**:支持调用数据库的存储过程,并通过`&lt;call&gt;`标签定义。 - **`parameterClass`和`parameterMap...

    pojo+xDoclet生成ibatis映射文件

    通过使用 XDoclet 和特定的 Javadoc 标签,我们可以为 iBatis 自动生成 SQL 映射文件,这极大地简化了开发过程并提高了开发效率。这种方式尤其适用于那些具有大量实体类和映射关系的项目,能够显著减少手动编写配置...

    ibatis增删查改实现

    在`updateUser()`方法上使用`@Update`注解,传入待更新的对象,Ibatis会自动生成更新语句。 在实际项目中,通常会有一个配置文件(如`mybatis-config.xml`),用来配置数据源、事务管理器等。另外,每个Mapper接口...

    iBatis操作MySQL增删改查

    iBatis会自动处理主键生成和参数绑定,提高开发效率。 2. **删除记录**:删除操作分为删除指定记录和删除全部记录。使用`&lt;delete&gt;`标签定义删除语句,可以按ID或其他条件进行删除。在Java代码中,调用Mapper接口的...

    ibatis

    Ibatis会自动生成实现这个接口的代理类,使得你可以像调用普通方法一样执行SQL。 **4. SqlSessionFactory与SqlSession** Ibatis使用SqlSessionFactory来创建SqlSession实例,SqlSession是与数据库交互的主要接口。...

    iBATIS开发教程.docx

    iBATIS支持自动生成的主键,可以自动将主键生成到数据库表中。自动生成的主键可以提高开发效率和减少错误。 十、parameterClass parameterClass是iBATIS的一个重要概念,用于定义参数的类型和关系。parameterClass...

    Ibatis框架的核心知识点

    对于支持自动生成主键的数据库,Ibatis 提供了 `&lt;selectKey&gt;` 元素来获取新生成的主键值。在插入语句中,`&lt;selectKey&gt;` 通常置于 `&lt;insert&gt;` 元素内,用于在插入数据后获取数据库生成的主键。例如,对于Oracle,...

Global site tag (gtag.js) - Google Analytics