对ibatis的一点理解

ibatis简单开发程序

1、首先在数据库test内创建一个表,表名:t_user,有3个字段,id(这个是主键设置为自动增量),user,date,并向表中插入2行数据

如果是mysql,执行

drop table if exists 't_user';

CREATE TABLE 't_user' (   

 'id'  int(12) NOT NULL auto_increment, 'name' varchar(50default NULL, 'date' date default NULL,   

PRIMARY KEY  ('id') ) ENGINE=InnoDB DEFAULT CHARSET=GBK;   

Insertinto  't_user'(name,date) values('ok','2007-03-15'),('ok2','2007-05-15');  

 

如果是sql,执行脚本

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[t_user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[t_user]
GO

CREATE TABLE [dbo].[t_user] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [date] [datetime] NULL
) ON [PRIMARY]
GO

 

2、创建完数据表后,就创建一个SqlMapConfig.xml配置文件(这个名字不能改,因为ibatis读取这个配置文件时,就寻找的是这个名字的文件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>
<!-- cacheModelsEnabled:是否启动SqlMapClient的缓存机制enhancementEnabled:是否针对POJO启用字节码增加机制以提升getER/setER的调用效用,为延迟加载带来了及大的性能提升lazyLoadingEnabled:是否启用延迟加载机制。 
  maxRequests:最大并大请求数。  
  maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数 
  maxTransactions:最大并发事务数-->
    <settings cacheModelsEnabled="true"
    enhancementEnabled="true" 
    lazyLoadingEnabled="true"
    maxRequests="32"
    maxSessions="10"
    maxTransactions="5"
    useStatementNamespaces="true" />  
    <transactionManager type="JDBC">  
        <dataSource type="SIMPLE">
        <!--JDBC驱动-->
            <property name="JDBC.Driver" value="sun.jdbc.odbc.JdbcOdbcDriver" />  
            <property name="JDBC.ConnectionURL" value="jdbc:odbc:ok" />  
            <property name="JDBC.Username" value="数据库用户" />  
            <property name="JDBC.Password" value="数据库密码" />  
        </dataSource>  
    </transactionManager>  
     <!--加载SqlMap文件-->  
    <sqlMap resource="com/study/xiaofeng/maps/User.xml" />  
</sqlMapConfig>

 

 

备注:我使用的是JDBC驱动的odbc的数据源连接,连接的是SQLServer,个人的理解就是sql server提供ODBC接口,jdbc调用ODBC提供的jdbc接口调用,sql server->sqlserver odbc接口->odbc jdbc接口->jdbc,使用JDBC连接数据库步骤为

(1)、装载并注册数据库的jdbc驱动程序

class.forname("JDBC驱动")

下面列出几种数据库的JDBC驱动,其他的请大家在网上找下

      (1)SQL :

      class.forname("com.microsoft.jdbc.sqlserverdriver")

      (2)mysql

      class.forname("com.mysql.jdbc.driver")

      (3)数据源连接方式

      class.forname("sun.jdbc.odbc.jdbcOdbcDriver")

 

(2)、建立数据库的连接

connection cnn=java.sql.driverManager.getConnection(JDBC数据源,数据库用户名,数据库密码)

下面列出几种数据库的JDBC数据源

格式:jdbc:驱动程序:驱动子项

 

      (1)SQL(microsoft:sqlserver这里算是一个整体)

      jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库

      (2)Mysql

      jdbc:mysql://localhost:3306/数据库名

 

 

      (3)数据源连接方式

 

 

      jdbc:odbc:数据源名

 

ibatis里代码看不到驱动初始化的forname这些方法,原因是SqlMapClient这个对象创建时,根据传递过来的数据库参数自动进行数据库驱动的装载以及连接

 

3、再创建一个数据表t_user的映射类User.java(不是一定要取名:表名.java,只是为了方便记而已,文件user.xml里<typeAlias alias="UserObject" type="com.study.xiaofeng.User" />,只要保持映射类名跟这里的type一致就行 )

 

package com.study.xiaofeng;

import java.io.Serializable;  
import java.util.Date;  
 
public class User implements Serializable{  
    private int id;  
    private String name;  
    private Date date;  
    public Date getDate() {  
        return date;  
    }  
    public void setDate(Date date) {  
        this.date = date;  
    }  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  

4、创建一个包括所有需要进行SQL执行的xml文件,User.xml(这里的文件名也不是一定要取名:表名.xml,例如user2.xml也可以,只要文件名跟SqlMapConfig.xml中<sqlMap resource="com/study/xiaofeng/maps/User2xml" /> 这里的名字一致就行

 

<?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="UserObject" type="com.study.xiaofeng.User" />  
    <resultMap id="userResult" class="UserObject">  
        <result property="id" column="id" jdbcType="NUMBER" />  
        <result property="name" column="name" jdbcType="VARCHAR2" />  
        <result property="date" column="date" jdbcType="DATE" />  
    </resultMap>  
 
    <select id="getByPK" resultMap="userResult" parameterClass="UserObject">  
        <![CDATA[   
        select  
          id,  
          name,   
          date   
        from t_user   
        where id = #id#   
        ]]>  
    </select>  
      
    <select id="getById" resultMap="userResult" parameterClass="java.lang.String">  
        <![CDATA[   
        select  
          id,  
          name,   
          date   
        from t_user   
        where id = $String$  
        ]]>  
    </select>  
 
    <sql id="Dy_SC">  
        <dynamic prepend="WHERE">  
            <isNotNull prepend="AND" property="id">id like #id#</isNotNull>  
            <isNotNull prepend="AND" property="name">name like #name#</isNotNull>  
        </dynamic>  
    </sql>  
 
    <select id="getUser" resultMap="userResult">  
        <![CDATA[   
        select  
          id,  
          name,   
          date   
        from t_user   
        ]]>  
        <include refid="Dy_SC" />  
    </select>  
 
    <insert id="insertUser" parameterClass="UserObject">  
        INSERT INTO t_user (name,date) VALUES (#name#,#date#)  
    </insert>  
      
    <insert id="insertUserTest" parameterClass="UserObject">  
        INSERT INTO t_user (id,name,date) VALUES (#id#,#name#,#date#)  
    </insert>  
 
    <update id="updateUser" parameterClass="UserObject">  
        <![CDATA[   
        UPDATE t_user   
        SET    
          name=#name#,   
          date=#date#   
        WHERE id = #id#  
        ]]>  
    </update>  
 
    <delete id="deleteUser" parameterClass="java.lang.String">  
        delete from t_user where id=#value#  
    </delete>  
 
    <statement id="getMaxId" resultClass="java.lang.Integer">  
        select Max(id) from t_user  
    </statement>  
 
    <statement id="getMax" resultClass="java.util.HashMap">  
        select Max(id) as id,Max(name) as name,Max(date) as date from t_user  
    </statement>  
 
</sqlMap> 

5、到现在再理清下思路,我们创建了数据表t_user,数据表的映射类User.class,数据表操作类user.xml,配置文件SqlMapConfig.xml

ibatis架构就完成了

 

整个工程只需要引入ibatis-2.3.0.667.jar一个库,当使用ibatis,首先读取SqlMapConfig.xml文件,根据这个配置文件创建一个SqlMapClient对象,引用的是com.ibatis.sqlmap.client.SqlMapClient,这个对象读取SqlMapConfig.xml配置,装载以及连接数据库,连接成功后,并指向user.xml,将user.xml内的设置读取到SqlMapClient对象内

当使用SqlMapClient进行操作时,这个对象也有数据库的insert以及update等操作,比如SqlMapClient.queryForList(调用的操作,传递的对象)sqlMap.queryForList("User.getUser", params)其中后面的params是将数据封装成对象,User.getUser的User是命名空间名,然后找getUser,找到后执行里面的select语句,返回记录集userResult,

 

<select id="getUser" resultMap="userResult">  
        <![CDATA[   
        select  
          id,  
          name,   
          date   
        from t_user   
        ]]>  
        <include refid="Dy_SC" />   
 </select>

 

然后知道这个记录集名userResult,对应的是com.study.xiaofeng.User,这个记录集的列对应User.java类的属性

<sqlMap namespace="User">  
    <typeAlias alias="UserObject" type="com.study.xiaofeng.User" />  
    <resultMap id="userResult" class="UserObject">  
        <result property="id" column="id" jdbcType="NUMBER" />  
        <result property="name" column="name" jdbcType="VARCHAR2" />  
        <result property="date" column="date" jdbcType="DATE" />  
    </resultMap>

 

那么就相当于将select返回的结果数据集保存在User类中,那么只需要对User类进行处理,可以封装成任何自己需要的数据类型,SqlMapClient.Select是封装成一个list并返回它,调用者只需要对list进行读取就可以!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值