【Java心得】ibatis与spring的集成

那么是如何集成的呢?

【一】          建立USER_Info_DaoImpl.java类映象属性—base.dao.model.usersModel_USERS_INFO.java—建表(和数据库相关的、程序中要用的字段的定义)                              详解代码

                           创建SqlMap

使用iBATIS SqlMaps涉及创建包含语句和结果对应关系的配置文件。 Spring会负责使用SqlMapFactoryBeanSqlMapClientFactoryBean来读取这些配置文件, 其中后一个类是同SqlMaps2.0联合使用的。

 

     package base.dao.model.users;

public class Model_USERS_INFO {

//-----------------database------------------

    private     int     id;

    private     String  user_name;

    private     String  user_sex;

    private     String  user_dep;

    private     String  user_position;

    private     String  work_id;

    private     String  identity_card;

    private     String  user_pla;

    private     String  user_fam;

    private     String  user_phone;

    private     String  user_limt;

    private     String  adm_count;

    private     String  adm_password;

       public String getAdm_count() {

              return adm_count;

       }

       public void setAdm_count(String adm_count) {

              this.adm_count = adm_count;

       }

       public String getAdm_password() {

              return adm_password;

       }

       public void setAdm_password(String adm_password) {

              this.adm_password = adm_password;

       }

       public int getId() {

              return id;

       }

       public void setId(int id) {

              this.id = id;

       }

       public String getIdentity_card() {

              return identity_card;

       }

       public void setIdentity_card(String identity_card) {

              this.identity_card = identity_card;

       }

       public String getUser_dep() {

              return user_dep;

       }

       public void setUser_dep(String user_dep) {

              this.user_dep = user_dep;

       }

       public String getUser_fam() {

              return user_fam;

       }

       public void setUser_fam(String user_fam) {

              this.user_fam = user_fam;

    假设我们要映射这个类,我们就要创建如下的SqlMap。通过使用查询,我们稍后可以用users.xml:

【二】          编写 Model_USERS_INFO.xml 映象文件—base.conf.ibatis.usersusers.xml—链接(在数据库中的底层数据在这里完成SQL语言和JAVA语言的转化,这是ibatis优于Hibernate的重要地方,因为在以后的使用中可以进行调用在这里定义过的函数的ID来省略HibernateSQL的“随处嵌套”)

          ?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 namespace="User" >

 

  <typeAlias alias="users_info" type="base.dao.model.users.Model_USERS_INFO"/>

 

  <select id="users.info.getObjPage" resultClass="users_info" parameterClass="java.util.Map" >

    select id,user_name,user_sex,user_dep,

           user_position,work_id,identity_card,user_pla,

       user_fam,user_phone,adm_count,adm_password

    from users_info

    where

      <dynamic>

        <isNotEmpty prepend="AND" property="user_name">

          user_name = #user_name#

        </isNotEmpty>

        <isNotEmpty prepend="AND" property="user_sex">

          user_sex = #user_sex#

        </isNotEmpty>

        <isNotEmpty prepend="AND" property="user_dep">

在定义完SqlMap之后,我们必须为iBATIS创建一个配置文件 (sqlmap-config.xml)

   【三】编写 SqlMapConfig.xml文件—base.conf.ibatisibatis.xmlibatis的配置文件(包括sqlmap等配置文件,实现了关系数据库到Java中的对象映射,术语称之为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>

    <settings cacheModelsEnabled="true"

      enhancementEnabled="true" maxRequests="256" maxSessions="64" maxTransactions="16"/>

 

  <!-- EQU -->

  <!--   <sqlMap resource="base/conf/ibatis/equ/EquInfo.xml"/>  -->

 

  <!-- USERS -->

  <sqlMap resource="base/conf/ibatis/users/users.xml"/>

</sqlMapConfig>

iBATIS会从classpath读取资源,所以要确保Account.xml文件在classpath上面。 
Spring,我们现在能够很容易地通过 SqlMapFactoryBean创建SqlMap: 

【四】配置 ApplicationContext.xml文件—base.conf-springspring_db.xml—详解

               以下是详解SpringapplicationContext.xml文件代码(spring_db.xml

<!-- 头文件,主要注意一下编码 -->

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

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <!-- 建立数据源 -->

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

  <!-- 数据库驱动,我这里使用的是Mysql数据库 -->

  <property name="driverClassName">

   <value>com.mysql.jdbc.Driver</value>

  </property>

  <!-- 数据库地址,这里也要注意一下编码,不然乱码可是很郁闷的哦! -->

  <property name="url">

   <value>

       jdbc:mysql://localhost:3306/tie?useUnicode=true&amp;characterEncoding=utf-8

   </value>

  </property>

  <!-- 数据库的用户名 -->

  <property name="username">

   <value>root</value>

  </property>

  <!-- 数据库的密码 -->

  <property name="password">

   <value>123</value>

  </property>

 </bean>

 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

    <property name="configLocation">

      <value>classpath:/base/conf/ibatis/ibatis.xml</value>

    </property>

  </bean>

</beans>

【五】编写 Dao.java(实现类)base.dao.def.usersIUSR_Info_Dao.java

      后台函数供前台调用,在以后的ACTION的使用中就可以直接调用了,到此springframe封装完成!

      package base.dao.ibatis.users;

 

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

 

import base.dao.def.users.IUSR_Info_Dao;

//import base.dao.model.ajax.Model_AJAX_ENI_Equ;

import base.dao.model.users.Model_USERS_INFO;

//import base.dao.model.inv.Model_INV_RpGoods;

 

 

public class USR_Info_DaoImpl extends SqlMapClientDaoSupport implements

        IUSR_Info_Dao {

 

    public boolean deleteObjByID(int id) throws Exception {

        try{

            this.getSqlMapClientTemplate().delete("users.info.deleteObjByID",id);

            return true;

        }catch(Exception e){

            e.printStackTrace();

        }

        return false;

    }

 

    public int getCountOfObj(Map obj) throws Exception {

        try{

            Integer o = (Integer)getSqlMapClientTemplate().queryForObject("users.info.getObjCount", obj);

            return o.intValue();

        }catch(Exception e){

            e.printStackTrace();

        }

        return 0;

    }

 

    public Model_USERS_INFO getObjByID(int id) throws Exception {

        return (Model_USERS_INFO)this.getSqlMapClientTemplate().queryForObject("users.info.getObjByID",id);

    }

 

    public List<Model_USERS_INFO> getObjPage(Map obj, int pageStart, int pageSize, String ziduan,String paixu)

            throws Exception {

        obj.put("rowStart", (pageStart-1)*pageSize);

        obj.put("rowCount", pageSize);

        obj.put("ziduan", ziduan);

        obj.put("paixu", paixu);

        return getSqlMapClientTemplate().queryForList("users.info.getObjPage",obj);

    }

 

    public List<Model_USERS_INFO> getObjPage(Map obj, int pageStart, int pageSize)

        throws Exception {

       obj.put("rowStart", (pageStart-1)*pageSize);

       obj.put("rowCount", pageSize);

       return getSqlMapClientTemplate().queryForList("users.info.getObjPage",obj);

}

 

    public boolean saveObj(Model_USERS_INFO obj) throws Exception {

        try{

            this.getSqlMapClientTemplate().insert("users.info.saveObj",obj);

            return true;

        }catch(Exception e){

            e.printStackTrace();

        }

        return false;

    }

 

    public boolean updateObj(Model_USERS_INFO obj) throws Exception {

        try{

            this.getSqlMapClientTemplate().update("users.info.updateObjByID",obj);

            return true;

        }catch(Exception e){

            e.printStackTrace();

        }

        return false;

}

}     

    【有经验者谈1Spring自身有一个ibatis模板类SqlMapClientTemplate,你继承这个类就可以获取你想要的东西,这是一种叫做模板方法的设计模式,Spring使用这种设计模式来管理Dao的通用增删改查方法,很方便。

    【有经验者谈2】持久化是将Java虚拟机对象持久保存,而不是将数据库映射为对象,通常数据的存储是用数据库实现的;当然,如果你有更好的存储系统,也可以映射到系统中的存储设备中,这可能需要你自行开发持久化框架来进行持久化一个Java对象。如果是持久化到数据库,现在已经涌出许多ORM框架,像Hibernate,轻量级的ibatis,都是不错的选择。

现在大部分数据库还是关系型的,而Java是面向对象的语言,很明显将一个对象型的数据如何保存到关系型数据库中呢?这就要借助强大的ORM框架解决这个问题。

比如ibatis框架,使用时只要配置好sqlMapConfig及相应的sqlMap配置文件,只要保存对象或更新对象及可,编程时不再需要写sql才能操作数据,查找时同样查到的是对象数据而不是关系型数据,通过对象set(para),get()方法插入及取得对应数据,Hibernate也是同样的,这里不再祥述,现在网上资料及相关书籍中有很多这样的讲解,了解、熟悉甚至精通这些需要研读相关书籍,有兴趣的话最好研读源码,以上都是开源的框架,网上即可下到

  我的感受:  这是最近自己利用空闲时间做的,多少的先理解了这些。希望牛人们看一看,有不对的地方指点指点!

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值