Ibatis学习总结

Ibatis是apache的一个开源项目,2010年这个项目有apache software foundation迁移到了google code 并且改名为mybatis;Ibatis是一个O/R Mapping(Object Relational Mapping)的解决方案;

 

Ibatis实现sql Maps和Data Access Object(Dao);

 

Ibatis的特点是小巧,简单。但是对sql的要求比较高,不像hibernate可以自动生成sql

 

应用Ibatis的步骤:

1.建立一个java工程;

2.先一个lib文件,导入Ibatis、数据库驱动、数据库连接池的jar。导入相应的配置文件SqlMapCOnfig.xml(放在src下),导入XXX.xml(放在po类的包下,XXX对应的是相应的类的名字,用于写sql语句的配置文件)

--------1)在SqlMapConfig.xml配置文件中配置事物管理数据源(整合了spring后可以讲与数据库的连接配置在applicationContext.xml中)

<sqlMapConfig>

 

  <transactionManagertype="JDBC"commitRequired="false">

    <dataSourcetype="SIMPLE">//

      <propertyname="JDBC.Driver"value="com.mysql.jdbc.Driver"/>

      <propertyname="JDBC.ConnectionURL"value="jdbc:mysql://127.0.0.1/struts2"/>

      <propertyname="JDBC.Username"value="root"/>

      <propertyname="JDBC.Password"value="root"/>

    </dataSource>

  </transactionManager>

 

 

  <!--配置文件中必须包含一个以上的sqlMap -->

  <sqlMapresource="com/puckasoft/po/User.xml"/>

 

</sqlMapConfig>

3.写测试类测试数据源是否配置成功

publicclass TestSqlMapConfig {

    @Test

    publicvoid test1()throws Exception {

       String configLocation = "SqlMapConfig.xml";

       SqlMapClient client = null;

       Reader reader = null;

       try {          

           reader = Resources.getResourceAsReader(configLocation);

           client = SqlMapClientBuilder.buildSqlMapClient(reader);

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           if (reader !=null)

              reader.close();

       }

    }

}           

将这个测试类封装起来放在util包下命名为IbatisUtil

publicclass IBatisUtil {

 

    publicstaticfinal StringCONFIG_LOCATION ="SqlMapConfig.xml";

    privatestatic SqlMapClientsqlMapClient =null;

 

    static {

       Reader reader = null;

       try {

           reader = Resources.getResourceAsReader(CONFIG_LOCATION);

           sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

       } catch (IOException e) {

           thrownew ExceptionInInitializerError();

       } finally {

           try {

              if (reader !=null)

                  reader.close();

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

 

    }

 

    publicstatic SqlMapClient getSqlMapClient() {

       returnsqlMapClient;

    }

}

5.使用Ibatis在相应的*.xml文件中写sql局域并建立Dao进行测试;

!1)插入写法:<insert> int insert(String id, Object parameterObject)

<insert id = "saveDeptDaoSql" parameterClass= “com.puck.po.Dept”>

          insert into dept(dname,loc) values(#dname#,#loc#);

</insert>

(注解:

           (1.)id是为sql语句起的一个代号,唯一标识。

            (2).在Dao中调用方法传参数的时候会用到,注意保持一致。

            (3) #dname# 代表的是hibernate语句中的?号。

            (4)在相应的Dao方法中实现IDao方法时,当插入2个或者2个以上的字段时,则参数配置成相应的类类型。

)

 

!2)更新语句<update> int update(String id Object parameterObject)

<update id = "updateDeptDaoSql" paramterClass = "com.puck.po.Dept">

                  update dept set dname = #dname#,loc = #loc#,where deptno = #deptno#

</update>

!3)查询语句<select> List queryForList(String id,Object parameterObject)

<select id = "findDepDapSql" paramterClass = "int " resultClass = "com.puck.po.Dept">

                  select  dname from deptno = #deptno#

</select>

<注解:resultClass属性是用来指明返回值的类型(全称)>

!4).Ibatis的高级查询:

                【1】模糊查询 public List<Emp> findEmpsByEname(String ename);

<select id="findEmpsByEnameSql"  parameterClass="java.lang.String" resultClass="com.puckasoft.po.Emp">
         select * from emp where ename like '$abc$'
</select>

【注解:(1)当参数类型为String类型是 必须写全称即java.lang.String .(2)返回值的类型是相应容器中存放的元素的类型.(3)当模糊查询时,如上示例,查询名字中包含XXX的所有员工,写法为'$XXX$'  dao中写法如:sqlMapClient.queryForList("findEmpsByEnameSql", "%" + ename
     + "%");】

                【2】多条件查询 public List<Emp> findEmps(Date beginDate,Date endDate,Float hisal,Float losal)

<select id="findEmpsSql"  parameterClass="hashMap"  resultClass="com.puckasoft.po.Emp" >

  select * from emp where sal between #losal# and #hisal# and hiredate between #beginDate# and #endDate#
</select>
【注解:当查询的参数不全部是在一个类中是用hashMap(hashMap的昵称)表示返回值的类型,这里不能使用hashMap的全称,当然也可以利用这些字段自定义一个vo类,然后写该类的全称】

                【3】分页查询 public List<Emp> findEmpsByPage(int firstResult,int maxResult);

<select id="findEmpsByPageSql"  resultClass="com.puckasoft.po.Emp">
select * from emp
</select>

【注解:查询语句中出现在where部分的一般才算是参数,所以firstResult 和maxResult不算是参数 ,当然在属性里不用配置参数类型】

                【4】返回Map public Map findEmpSals();

<select id="findEmpSalsSql"  resultClass="hashMap">
  select max(sal)as maxSal,min(sal) as minSal,avg(sal) as avgSal from emp
</select>

【注解:同上,当返回Map类型的值时不用Map的全称,而用hashMap这个昵称表示返回值的类型】

                【5】返回List<Map>  public List<Map> findHisalByDept();

 <select id="findHisalByDeptSql"  resultClass="hashMap">
 select deptno,max(sal) as maxSal from emp group by deptno order by max(sal) desc
</select>

【注解:当然在此处返回值也是hashMap】

 

Ibatis和spring的集成

Spring为Ibatis提供的服务有

1.创建数据源

2.创建sqlMapClient

3.管理事务

4.创建单例的dao组件,注入Ibatis的sqlMapClient

具体如下:

1.导入spring的相关jar包

2.创建或拷贝配置文件log4j.properties、applicationcontext.xml

3将ibatis的数据源和事务交由spring管理

1:)移除sqlMapConfig.xml的数据源和事务配置信息

2)在applicationcontext.xml配置数据源、sqlmapclient、事务管理器、事务特性,事务切面

4.修改dao组件

1)移除dao中的单例代码,移除sqlmapclient的赋值代码,为sqlmapclients产生setter和getter方法

2)在applicationcntext.xml中位置dao组件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值