Ibatis初级应用

1.Ibatis的作用

            这个框架功能同Hibernate,同样是ORM(Object-Relation Mapping,对象关系映射),把数据库中的表映射成类,然后对类进行操作,但与Hibernate不同的地方在于:Ibatis是半自动,要执行的SQL我们手动写成XML文件;而Hibernate是全自动。里面里面已经封装了各种操作;

2.Ibatis的使用

            目前的项目主要是采用Hibernate进行增、删、改;因为Hibernate这方面做得很好。至于查询方面就采用Ibatis,这样以后要优化SQL语句也就方便,可以做到一改全改;

3.举例说明

       3.1建立两个表(Tab1,Tab2),由于我们要测试有值为空的;左联接等操作,所以用下面的数据来举例子
               create table tab1(userid number(4),username varchar2(10),birthday date);
               create table tab2(userid number(4),usersex char(1));
               insert into tab1 values(1,'wwz1',sysdate);
               insert into tab1 values(2,'wwz2',sysdate);
               insert into tab1 values(3,'wwz3',sysdate);
               insert into tab1 values(4,'wwz4',sysdate);
               insert into tab1(userid,username) values(5,'wwz5');
               insert into tab2 values(1,'b');
               insert into tab2 values(2,'b');
               insert into tab2 values(3,'g');
               insert into tab2 values(4,'b');

      3.2建立两个Bean(com.wangwz.IbatisTest.Tab1Bean.java和com.wangwz.IbatisTest.Tab12Bean.java)
               Tab1Bean有三个属性int userid;String username;Date birthday及其set和get方法
               Tab12Bean有四个属性int userid;String username,Date birthday,String usersex及其set和get方法

           3.3建立Ibatis的配置文件com/wangwz/IbatisTest/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>
                       <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />
                       <transactionManager type="JDBC">
                               <dataSource type="SIMPLE">
                                       <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
                                       <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:cnfol" />
                                       <property name="JDBC.Username" value="cnfol" />
                                       <property name="JDBC.Password" value="cnfol" />
                               </dataSource>
                       </transactionManager>
                       <sqlMap resource="com/wangwz/ibatisTest/Tab1.xml" /><!--包含了Tab1.xml文件-->
               </sqlMapConfig>

           3.4建立SQL的映射文件com/wangwz/ibatisTest/Tab1.xml
               <?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="Tab1">
                   <select id="getTab1" parameterClass="java.lang.String" resultClass="com.wangwz.ibatisTest.Tab1Bean">
                       select * from Tab1 where username = #value#
               </select>

               <select id="getTab1List" resultClass="com.wangwz.ibatisTest.Tab1Bean">
                   select * from Tab1
               </select>

               <select id="getTab12List" resultClass="com.wangwz.ibatisTest.Tab12Bean">
                   select * from tab1 left join tab2 on tab1.userid=tab2.userid
               </select>
           </sqlMap>

     3.5下载Ibatis包,把里面的Ibatis.jar拷贝到工程的lib下;

     3.6写操作类com.wangwz.ibatisTest.DoSelect.java
          public class DoSelect
          {
              public static void main(String[] args)
              {
                  SqlMapClient sqlMapper;
                  Reader reader;
                  try
                  {
                      reader = Resources.getResourceAsReader("com/wangwz/ibatisTest/SqlMapConfig.xml");
                      sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
                      reader.close();
                      Tab1Bean tab1Bean = (Tab1Bean) sqlMapper.queryForObject("getTab1", "wwz1");
                      System.out.println(tab1Bean.getUserid());
                      System.out.println(tab1Bean.getUsername());

                      ArrayList<Tab1Bean> al = (ArrayList<Tab1Bean>) sqlMapper.queryForList("getTab1List");
                      for (int i = 0; i < al.size(); i++)
                      {
                          System.out.print(al.get(i).getUserid() + "/t");
                          System.out.print(al.get(i).getUsername() + "/t");
                      }

                      ArrayList<Tab12Bean> al2 = (ArrayList<Tab12Bean>) sqlMapper.queryForList("getTab12List");
                      for (int i = 0; i < al2.size(); i++)
                      {
                          System.out.print(al2.get(i).getUserid() + "/t");
                          System.out.print(al2.get(i).getUsername() + "/t");
                          System.out.print(al2.get(i).getBirthday() + "/t");
                          System.out.println(al2.get(i).getSex());
                      }
                  }
                  catch (IOException e)
                  {
                      e.printStackTrace();
                  }
                  catch (SQLException e)
                  {
                      e.printStackTrace();
                  }
              }
          }

4.总结

          使用Ibatis有一个我觉得不太方便的地方,就是传入的参数只能有一个,如果要传多个参数就得封装一个BEAN

5.补充

      上面有两处绿色的字,在Tab1.xml中的绿色字是表示命名空间名称,当sqlMapConfig.xml里面的绿色字设置成true时,在程序中调用SQL语句前面就必须加上命名空间.才能访问;但Tab1.xml中的命名空间可以与文件名不同,即,命令空间可以取名为Tab2;

      当Ibatis初始化Bean的时候,会自动调用无参的构造函数,所以我们写的Bean中如果有写带参的构造函数,一定得多写个无参的构造函数,否则Ibatis会找因找不到构造函数而出错;报的错如下:JavaBeansDataExchange could not instantiate result class

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值