`
atgoingguoat
  • 浏览: 195971 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ibatis MyEclipse 代码 源代码 分解

    博客分类:
  • java
阅读更多

前面,已经发个工程。现在讲下里面代码的具体功能和作用。

我也是半桶水,只是了解一点,原来这个工程也是另一个同事搞的这个框架。

 


这几个包的用途就不说了。反正全打上。呵呵。

 
 

 

 1:com.kingter.groupapp.business 应用功能包

2:com.kingter.groupapp.domain 程序中用到的数据类包

3:com.kingter.groupapp.persistence   ibatis 程序映射包

4:com.kingter.groupapp.persistence.iface     ibatis 程序映射 接口类包

5:com.kingter.groupapp.persistence.sqlmapdao   ibatis 程序映射 接口实现类包 

6:com/kingter/groupapp/properties/     配置文件包

7:com.kingter.groupapp.service      ibatis 对外实现包

 

 

 下面介绍代码:

  1.  先写数据类

     

    package com.kingter.groupapp.domain;
    
    import java.io.*;
    
    /**
     * 数据类 继承 Serializable ,要写构造函数,get set 
     * @author Administrator
     *
     */
    public class AreaInfo
        implements Serializable {
        private String areaID;
        private String areaName;
        private String areaDepict;
    
        public AreaInfo() {
        }
    
        public String getAreaDepict() {
    
            return areaDepict;
        }
    
        public String getAreaID() {
            return areaID;
        }
    
        public String getAreaName() {
            return areaName;
        }
    
        public void setAreaID(String areaID) {
            this.areaID = areaID;
        }
    
        public void setAreaName(String areaName) {
            this.areaName = areaName;
        }
    
        public void setAreaDepict(String areaDepict) {
    
            this.areaDepict = areaDepict;
        }
    }
    

     

 

 2。 数据库及其它配置文件

 com/kingter/groupapp/properties/groupappdatabase.properties

####################################
# Database Connectivity Properties
####################################

#²ÊÐÅÓªÏúƽ̨
groupapp_driver=oracle.jdbc.driver.OracleDriver
groupapp_url=jdbc:oracle:thin:@localhost:8512:ora9
groupapp_username=data_markmms
groupapp_password=data_mmsmark

 

其它应用数据配置文件 com/kingter/groupapp/properties/groupappconfig.properties

怎么用,自己在网上找吧,g.cn 上多的很。

 

####################################
#  Properties
####################################

resourceWeb=http://localhost:8080/

 

 

3: DAO配置

 

package com.kingter.groupapp.persistence;

import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.DaoManagerBuilder;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
 * <p>Title: DAO配置</p>
 * <p>Description: 用于获得DAO管理对象</p>
 * <p>Copyright: Copyright (c) 2010</p>
 * <p>Company:  </p>
 * @author  
 * @version 1.0
 */

public class DaoConfig {

    private static Log log = LogFactory.getLog(DaoConfig.class);

    private static final DaoManager daoManager;

    static {

        try {
            String resource = "com/kingter/groupapp/persistence/dao.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            daoManager = DaoManagerBuilder.buildDaoManager(reader);
            //log.info(daoManager.getClass().getName());
        }
        catch (Exception e) {
            throw new RuntimeException("Could not initialize DaoConfig.  Cause: " + e);
        }
    }

    public static DaoManager getDaomanager() {
        return daoManager;
    }

}

 

 接口与实现类映射配置。

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE daoConfig
    PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN"
    "http://www.ibatis.com/dtd/dao-2.dtd">

<daoConfig>

  <context>

    <transactionManager type="SQLMAP">
      <property name="SqlMapConfigResource"
        value="com/kingter/groupapp/persistence/sqlmapdao/sql/sql-map-config.xml"/>
    </transactionManager>
    
	<dao interface="com.kingter.groupapp.persistence.iface.AreaInfoDao"
      implementation="com.kingter.groupapp.persistence.sqlmapdao.AreaInfoSqlMapDao"/> 

  </context>

</daoConfig>

 

 

 

4: ibatis 接口及实现

 

接口

 

package com.kingter.groupapp.persistence.iface;
import java.util.*;

import com.kingter.groupapp.domain.AreaInfo;
public interface AreaInfoDao {

    public List findAllAreaInfo();

    public AreaInfo findAreaInfoByAreaID(String AreaID);


}

 

 

实现基础类

这里其实代码只要几句,不知为什么,到了 MyEclipse6.0 就要我实现SqlMapDaoTemplate  所有的方法

 

package com.kingter.groupapp.persistence.sqlmapdao;

import java.sql.SQLException;
import java.util.List;

import com.ibatis.common.util.PaginatedList;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;
import com.ibatis.sqlmap.client.event.RowHandler;
import com.ibatis.sqlmap.engine.execution.BatchException;

public  class BaseSqlMapDao extends SqlMapDaoTemplate {

    @Override
	public int delete(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List executeBatchDetailed() throws SQLException, BatchException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object insert(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List queryForList(String arg0, int arg1, int arg2)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List queryForList(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object queryForObject(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public PaginatedList queryForPaginatedList(String arg0, int arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void queryWithRowHandler(String arg0, RowHandler arg1)
			throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int update(String arg0) throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	protected static final int PAGE_SIZE = 15;

    public BaseSqlMapDao(DaoManager daoManager) {
        super(daoManager);
    }

	 

}

 

 

实现类

 

 

 

package com.kingter.groupapp.persistence.sqlmapdao;

import java.sql.*;
import java.util.*;

import org.apache.commons.logging.*;
import com.ibatis.dao.client.*;
import com.kingter.groupapp.domain.AreaInfo;
import com.kingter.groupapp.persistence.iface.AreaInfoDao;

public class AreaInfoSqlMapDao extends BaseSqlMapDao implements AreaInfoDao {
    private static Log log = LogFactory.getLog(AreaInfoSqlMapDao.class);
    public AreaInfoSqlMapDao(DaoManager daoManager) {
        super(daoManager);
    }

    public List findAllAreaInfo() {
        List list = null;
        try {
      //SqlMapDaoTemplate  都有 sql 具体操作对应的方法。
     //如: queryForList 查询多条数据。
            list = queryForList("getAllAreaInfo", null);
        }
        catch (Exception ex) {
            log.error(ex);
        }
        return list;
    }

    public AreaInfo findAreaInfoByAreaID(String AreaID){
        AreaInfo areaInfo = null;
        try{
            areaInfo = (AreaInfo)queryForObject("getAreaInfoByAreaID",AreaID);
        }
        catch(Exception ex){
            log.error(ex);
        }
        return areaInfo;
    }

}

 

 

5: SQL 映射 XML 文件

数据源及SQL文件配置

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
<!---->
  <properties resource="com/kingter/groupapp/properties/groupappdatabase.properties"/>

  <settings
    cacheModelsEnabled="true"
    enhancementEnabled="true"
    maxSessions="64"
    maxTransactions="8"
    maxRequests="128"/>

  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property value="${groupapp_driver}" name="JDBC.Driver"/>
      <property value="${groupapp_url}" name="JDBC.ConnectionURL"/>
      <property value="${groupapp_username}" name="JDBC.Username"/>
      <property value="${groupapp_password}" name="JDBC.Password"/>
      <property value="15" name="Pool.MaximumActiveConnections"/>
      <property value="15" name="Pool.MaximumIdleConnections"/>
      <property value="1000" name="Pool.MaximumWait"/>
    </dataSource>
      <!--<property name="UserTransaction" value="UserTransaction" />
      <dataSource type="JNDI">
         <property name="DataSource" value="java:/mmssale" />
      </dataSource>-->
  </transactionManager> 
  <sqlMap resource="com/kingter/groupapp/persistence/sqlmapdao/sql/AreaInfo.xml"/>
 

</sqlMapConfig>

 

SQL语句配置

 

 

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="AreaInfo">

  <typeAlias alias="areaInfo" type="com.kingter.groupapp.domain.AreaInfo"/>
  <resultMap id="areaInfoResult" class="areaInfo">
    <result property="areaID" column="area_id" nullValue=""/>
    <result property="areaName" column="area_name" nullValue=""/>
    <result property="areaDepict" column="area_depict" nullValue=""/>
  </resultMap>

  <select id="getAllAreaInfo" resultMap="areaInfoResult" parameterClass="string">
    select area_id,area_name,area_depict
    from t_area_info
  </select>

  <select id="getAreaInfoByAreaID" resultMap="areaInfoResult" parameterClass="string">
    select area_id,area_name,area_depict
    from t_area_info
    where area_id = #value#
  </select>

</sqlMap>

 

 

***********************************

ibatis SQL 语句的写的技巧,可以参考网上专门的示例。

parameterClass 参数类型,可以是 map,string ,object.

resultMap 返回结果集

  id="getSiteInfoByMore 这个是名称,在整个项目中要是唯一的。

 

 <dynamic prepend="where">  动态增加 where 语句

      <isNotEmpty prepend="and" property="siteID">
        site_id = #siteID#
      </isNotEmpty>


如果 siteID 为空,则不会生成这个条件,反之则生成。

 

      <isNotEmpty prepend="and" property="siteName">
        <![CDATA[
        ( site_name LIKE '%$siteName$%')
       ]]>
      </isNotEmpty>
这个就是 like 语句

 

  <statement id="getSiteInfoByMore" resultMap="siteInfoResult" parameterClass="java.util.Map">
    select site_id,company_id,logo_url,site_name,site_url,site_title,site_key,site_meta,copyright
       from t_site_info
      <dynamic prepend="where">
      <isNotEmpty prepend="and" property="siteID">
        site_id = #siteID#
      </isNotEmpty>
      <isNotEmpty prepend="and" property="siteName">
        <![CDATA[
        ( site_name LIKE '%$siteName$%')
       ]]>
      </isNotEmpty>
      <isNotEmpty prepend="and" property="companyID">
        company_id = #companyID#
      </isNotEmpty>
      </dynamic>
  </statement>

 

 

 select site_id,company_id,logo_url,site_name,site_url,site_title,site_key,site_meta,copyright
       from t_site_info#sqlnewcode#

#sqlnewcode#
    你还可以从前台动态带入SQL 语句。但我个人不提议用,以后不好维护。

 

***********************************

 

 7: ibatiS SQL 功能实现

 

用于客户端(表示层)来统一访问,业务层调用DAO将数据持久化

  

package com.kingter.groupapp.service;

/**
 * <p>Title: 业务服务接口(业务层)</p>
 * <p>Description: 用于客户端(表示层)来统一访问,业务层调用DAO将数据持久化</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company:  </p>
 * @author  
 * @version 1.0
 */

public interface ServiceBean {
}

 

 

实现代码

 

package com.kingter.groupapp.service;

import java.util.*;

import org.apache.commons.logging.*;
import com.ibatis.dao.client.*;
import com.kingter.groupapp.domain.AreaInfo;
import com.kingter.groupapp.persistence.*;
import com.kingter.groupapp.persistence.iface.AreaInfoDao;

public class AreaInfoService implements ServiceBean {

    private static Log log = LogFactory.getLog(AreaInfoService.class);

    private static AreaInfoService instance = null;
    private DaoManager daoManager = null;
    private AreaInfoDao areaInfoDao;

    private AreaInfoService() {
        daoManager = DaoConfig.getDaomanager();
        areaInfoDao = (AreaInfoDao) daoManager.getDao(AreaInfoDao.class);
    }

    public static AreaInfoService getInstance() {
        if (instance == null) {
            instance = new AreaInfoService();
        }
        return instance;
    }

    public List findAllAreaInfo() {
        return areaInfoDao.findAllAreaInfo();
    }

    public AreaInfo findAreaInfoByAreaID(String AreaID){
        return areaInfoDao.findAreaInfoByAreaID(AreaID);
    }

}

 

 

 

 

 9: 外部应用代码

 

 

package com.kingter.groupapp.business;

import com.kingter.groupapp.domain.*;
import com.kingter.groupapp.service.*;
import java.util.*;


public class AreaInfoBean {
    public AreaInfoBean() {
    }
    public List findAllAreaInfo() {
        return AreaInfoService.getInstance().findAllAreaInfo();
    }

    public AreaInfo findAreaInfoByAreaID(String AreaID){
        return AreaInfoService.getInstance().findAreaInfoByAreaID(AreaID);
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 9.9 KB
  • 大小: 18 KB
分享到:
评论
1 楼 atgoingguoat 2010-04-27  
看贴要回贴,谢谢!

相关推荐

    ibatis源代码项目

    《深入解析iBatis源代码》 iBatis,作为一个轻量级的持久层框架,以其灵活、易用的特点在Java开发中占据了重要的地位。它将SQL与Java代码分离,提高了开发效率,降低了维护难度。本文将从iBatis源代码的角度出发,...

    ibatis myeclipse6.5 完整实例

    6. **MyEclipse集成**:掌握在MyEclipse中创建iBatis项目、导入数据库驱动、运行SQL脚本、调试Java代码和部署应用的方法。 通过深入学习这个实例,开发者不仅可以掌握iBatis的基本用法,还能熟悉在MyEclipse环境下...

    ibatis MyEclipse 入门工程代码 图文教程

    总结,通过这个“ibatis MyEclipse 入门工程代码 图文教程”,我们可以学习到如何在MyEclipse环境中搭建Ibatis项目,编写SQL映射文件,以及如何在Java代码中调用这些映射进行数据库操作。了解这些基础步骤,对于后续...

    ibatis源代码

    **Ibatis 源代码详解** Ibatis 是一个在Java应用程序中用于数据库操作的开源、半自动化的ORM(对象关系映射)框架。它允许开发者将SQL语句直接写入XML配置文件,使得数据访问层与业务逻辑层解耦,提高了代码的可...

    ibatis-2 源代码

    《深入解析iBatis-2源代码》 iBatis,作为一个轻量级的持久层框架,曾经在Java开发领域中占据了重要的地位。它将SQL语句与Java代码分离,提高了开发效率,降低了维护难度。本篇文章将针对从Apache网站通过SVN下载的...

    Ibatis源代码(ibatis-src.zip)

    在"Ibatis源代码(ibatis-src.zip)"中,我们可以深入理解其内部机制和设计思想。 首先,`release.txt`通常包含项目发布的信息,如版本号、发布日期以及可能的更新日志。这为我们提供了Ibatis当前版本的详细背景信息...

    IBATIS3代码生成器

    【标题】"IBATIS3代码生成器"是一款专为基于IBATIS3框架的项目设计的工具,它能够自动生成常见的SQL映射文件、Java DAO接口和实现类,大大提高了开发效率,降低了手动编写这些代码的工作量。该工具的核心理念是通过...

    iBatis实战and源代码.zip

    《iBatis实战and源代码.zip》这个压缩包包含了关于iBatis框架的实战经验和源代码,对于深入了解和学习iBatis有着极大的帮助。iBatis是一个优秀的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了开发效率和...

    spring mybatis ibatis 实例(源代码)

    spring mybatis ibatis 实例(源代码)

    <<ibatis框架源代码剖析>> 一个CRUD操作的ibatis项目实例

    《深入剖析iBatis框架:一个CRUD操作的项目实例》 iBatis,一个轻量级的Java持久层框架,以其简洁、灵活的特点,在Java开发领域...通过源代码阅读,不仅可以加深对iBatis的理解,也能提高我们在实际开发中的应用能力。

    修改ibatis源代码实现物理分页

    因此,我们需要通过修改Ibatis的源代码来实现物理分页,以提高查询效率。 物理分页是直接在数据库层面进行分页,避免了将所有数据加载到内存中的问题。下面我们将详细探讨如何在Ibatis中实现物理分页。 首先,了解...

    IBATIS源代码,欢迎使用

    通过深入学习iBATIS的源代码,你可以了解到如何优雅地处理数据库操作,理解其内部的参数绑定机制,以及它如何处理SQL语句的动态构建。此外,还可以学习到如何实现自定义的拦截器(Interceptor)来扩展iBATIS的功能,...

    ibatis_spring源代码

    综上所述,`iBatis_Spring`源代码的学习涵盖了数据库连接、SQL映射、事务处理、依赖注入等多个核心概念,通过深入理解这些知识点,开发者可以更好地掌握企业级Java应用的开发技巧。在实际项目中,这样的整合可以带来...

    利用ibatis 生成代码

    ### 利用ibatis框架生成代码:自动化与效率提升 #### 核心概念与优势解析 **ibatis**,现在通常被称为**MyBatis**,是一个支持普通SQL查询、存储过程以及高级映射的优秀开源持久层框架。ibatis消除了几乎所有的...

    iBATIS开放源代码

    1. **SqlMapConfig.xml**:这是整个iBATIS系统的配置文件,包含了数据源、事务管理器以及其他相关设置。开发者在此文件中定义数据库连接信息,以及映射文件的位置。 2. **Mapper接口/SqlMap.xml**:Mapper接口是...

    ibatis代码自动生成

    本篇文章将深入探讨Ibatis代码自动生成的相关知识点,以及如何利用工具提高开发效率。 1. Ibatis简介: Ibatis作为轻量级的ORM(对象关系映射)框架,其核心功能是通过XML或注解的方式将Java对象与SQL语句进行映射...

    ibatis代码自动生成代码程序

    【ibatis代码自动生成代码程序】是一个实用工具,旨在帮助开发者快速生成基于iBATIS框架的Java代码。iBATIS,作为一个数据访问层框架,它允许程序员将SQL语句与Java代码分离,提供了一种简单但强大的方式来处理...

    struts+spring+ibatis源代码

    在这个项目中,"struts+spring+ibatis源代码"很可能是为了演示或学习这三种技术如何协同工作。下面我们将详细探讨这三个框架以及它们在实际开发中的应用。 **Struts** Struts是一个基于MVC设计模式的Java Web框架,...

    ibatis-2.3.4.726-src-源代码

    本文将针对iBatis 2.3.4.726版本的源代码进行详尽解读,帮助开发者深入了解其内部机制,提升开发与调试能力。 1. **框架概述** iBatis,又称为MyBatis的前身,是一个基于Java的持久层框架,它简化了数据库操作,将...

    ibatis框架源代码

    Ibatis源代码的分析有助于理解其工作原理,提升开发技能,并可能为自定义扩展或优化提供基础。 源码中的`release.txt`通常包含版本发布信息,包括发布日期、版本号、更新内容等,这对于了解Ibatis的演化历史和当前...

Global site tag (gtag.js) - Google Analytics