ibaits 入门案例及源码

Ibaits学习总结

1.        搭建环境:导入相关的jar

Ø  导入oracle驱动jar

Ø  导入ibaits驱动jar

2.        配置文件

Ø  Jdbc链接属性文件,如 SqlMap.properties文件

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@127.0.0.1:1521:orcl

username=ibaits

password=ibaits

Ø  总配置文件,如 SqlMapConfig.xml 文件

<sqlMapConfig>

<!-- 链接属性文件SqlMap.properties -->

<properties resource="com/hdw/conf/SqlMap.properties"/>

<!-- jdbc事务管理 -->

  <transactionManagertype="JDBC" >

  <!-- 数据源 -->

    <dataSourcetype="SIMPLE">

    <!-- EL表达式引用属性文件SqlMap.properties里面的值 -->

      <property name="JDBC.Driver" value="${driver}"/>

      <property name="JDBC.ConnectionURL" value="${url}"/>

      <property name="JDBC.Username" value="${username}"/>

      <property name="JDBC.Password" value="${password}"/>

    </dataSource>

  </transactionManager>

  <!-- 链接映射文件Students.xml读取表的信息 -->

  <sqlMapresource="com/hdw/conf/Students.xml"/>

</sqlMapConfig>

Ø  关于每个实体的映射文件(map文件)如:Students.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="Student">

<typeAlias alias="Student"type="com.hdw.dao.Student"/>

  <resultMap id="StudentResult"class="Student">

    <result property="sid"column="SID" />

     <result property="sname"column="SNAME"/>

    <result property="major"column="MAJOR"/>

    <result property="birth"column="BIRTH"/>

    <result property="score"column="SCORE"/>

  </resultMap>

  <!-- Select with no parameters using the result mapfor Account class. -->

  <select id="queryAllStudent"resultMap="StudentResult">

    select * from STUDENT

  </select> 

</sqlMap>

 

注:1resultMap属于直接映射,可以把结果集中的数据库字段与实体类中的属性一一对应,这样通过select语句得到的结果就会准确的对上号

2resultclass属于隐身映射,虽然你指定resultclass=“”,具体某一个类,但是select语句得到的结果是一条实力记录,但如果数据库字段与类的属性名字不一致,这个时候就会出现映射错误,有一种方式可以解决就是在写select语句时,给每个字段用as运算符取名字与属性一样:例如:select realname as name...其中realname是字段列名,name是属性字段名

3resultmapresultclass性能要高。尽量使用resultmap

3.        读取配置

         public staticSqlMapClient sqlMapClient = null;

         static

         {

                   try

                   {

//从类路径中加载sqlmap配置文件

Reader reader = Resources.getResourceAsReader("com/hdw/conf/SqlMapConfig.xml");

                            //创建SqlMapClient接口的变量实例

                            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

                            reader.close();

                   }

                   catch (IOException e)

                   {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                   }

         }

4.        基本的CRUD操作

delete, delete, executeBatch, executeBatchDetailed, insert, insert, queryForList, queryForList, queryForList, queryForList, queryForMap, queryForMap, queryForObject, queryForObject, queryForObject, queryForPaginatedList, queryForPaginatedList, queryWithRowHandler, queryWithRowHandler, startBatch, update, update 具体见ibaits API

 

5.   Ibaits优缺点

优点:与JDBC相比较

减少的60%的代码量

简单

架构及性能强

Sql语句与代码分离

简化项目的分工

增强了移植性

缺点:

需要手动添加sql语句

参数数量只有一个

 

java代码实现:

 StudentDAOImp.java实现类

package com.hdw.sever.serverImp;

 

import java.io.IOException;

import java.io.Reader;

import java.sql.SQLException;

import java.util.List;

 

import com.hdw.dao.Student;

import com.hdw.sever.StudentDAO;

import com.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;

 

publicclass StudentDAOImpimplements StudentDAO

{

 

         publicstatic SqlMapClient sqlMapClient = null;

        

         String QUERY_ALL_STUDENT = "queryAllStudent";

        

        

         static

         {

                   try

                   {

                           

                            //从类路径中加载sqlmap配置文件

                            Readerreader = Resources.getResourceAsReader("com/hdw/conf/SqlMapConfig.xml");

                           

                            //创建SqlMapClient接口的变量实例

                            sqlMapClient =SqlMapClientBuilder.buildSqlMapClient(reader);

 

                           

                            reader.close();

                   }

                   catch (IOException e)

                   {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                   }

                  

         }

         @Override

         publicList<Student> queryAllStudent()

         {

                   List<Student>studentList = null;

                                    

                   try

                   {

                            studentList= sqlMapClient.queryForList(QUERY_ALL_STUDENT);

                   }

                   catch (SQLExceptione)

                   {

                            e.printStackTrace();

                   }

                  

                   return studentList;

         }

 

}

 

StudentDAO.java接口类

package com.hdw.sever;

 

import java.util.List;

 

import com.hdw.dao.Student;

 

public interface StudentDAO

{

         publicList<Student> queryAllStudent();

}

Student.java 数据实例类

package com.hdw.dao;

 

import java.util.Date;

 

publicclass Student

{

         privateintsid;

        

         private String sname;

        

         private String major;

        

         private Date birth;

        

         privatefloatscore;

 

         publicint getSid() {

                   returnsid;

         }

 

         publicvoid setSid(int sid) {

                   this.sid = sid;

         }

 

         public StringgetSname() {

                   returnsname;

         }

 

         publicvoid setSname(Stringsname) {

                   this.sname = sname;

         }

 

         public StringgetMajor() {

                   returnmajor;

         }

 

         publicvoid setMajor(Stringmajor) {

                   this.major = major;

         }

 

         public Date getBirth(){

                   returnbirth;

         }

 

         publicvoid setBirth(Datebirth) {

                   this.birth = birth;

         }

 

         publicfloat getScore() {

                   returnscore;

         }

 

         publicvoid setScore(float score) {

                   this.score = score;

         }

 

         @Override

         public StringtoString() {

                  

                   Stringcontent = "sid="+sid+"\tsname="+sname+"\tmajor="+major+"\tbirth="+birth+"\tscore="+score;

                   return content;

         }

        

        

 

}

MyDoMain.java测试类

package com.hdw.mydata;

 

import java.util.List;

 

import com.hdw.dao.Student;

import com.hdw.sever.StudentDAO;

import com.hdw.sever.serverImp.StudentDAOImp;

 

publicclass MyDoMain

{

        

         /**

          * @param args

          */

         publicstaticvoid main(String[]args)

         {

                   // TODOAuto-generated method stub

 

                   StudentDAOstudentdao = new StudentDAOImp();

 

                   List<Student> listStudent = studentdao.queryAllStudent();

                  

                   for(Studentstudent:listStudent)

                   {

                            System.out.println(student);

                   }

 

         }

 

}

Ibaits入门案例

 

SqlMap.properties 文件

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL

username=ibaits

password=ibaits

 

SqlMapConfig.xml文件

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

 

<!DOCTYPE sqlMapConfig     

    PUBLIC"-//ibatis.apache.org//DTD SQL Map Config2.0//EN"     

    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

   

 

<sqlMapConfig>

 

<properties resource="com/hdw/conf/SqlMap.properties"/>

 

  <transactionManager type="JDBC"commitRequired="false" >

 

    <dataSource type="SIMPLE">

      <property name="JDBC.Driver"value="${driver}"/>

      <property name="JDBC.ConnectionURL"value="${url}"/>

      <property name="JDBC.Username"value="${username}"/>

      <property name="JDBC.Password"value="${password}"/>

    </dataSource>

   

  </transactionManager>

 

  <sqlMap resource="com/hdw/conf/Students.xml"/>

 

</sqlMapConfig>

 

 

 

Students.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="Student">

 

<typeAlias alias="Student"type="com.hdw.dao.Student"/>

 

  <resultMap id="StudentResult" class="Student">

    <result property="sid" column="SID"/>

     <result property="sname" column="SNAME"/>

    <result property="major" column="MAJOR"/>

    <result property="birth" column="BIRTH"/>

    <result property="score" column="SCORE"/>

  </resultMap>

 

     <!-- Select with no parameters using the result mapfor Student class. -->

  <select id="queryAllStudent" resultMap="StudentResult">

    select * from STUDENT

  </select>

 

   <!-- Select with parameters using the result map for Student class,"parameterClass"is type of passing parameters, not case-sensitive

          "resultMap" is type of  return result, "#" is placeholder-->

  <select id="queryStudentById" parameterClass="int" resultMap="StudentResult">

     select sid,sname,major,birth,scorefrom STUDENT where sid=#sid#

  </select>

 

  <!-- insert a student object -->

  <insert id="addStudent" parameterClass="Student">

     insert into STUDENT(

                                              sid,

                                              sname,

                                             major,

                                             birth,

                                             score

                                              )

                                             values(

                                              #sid#,#sname#,#major#,#birth#,#score#

                                              )

  </insert>

 

  <!-- delete student by id -->

  <delete id="deleteStudentById" parameterClass="int">

     delete from STUDENT where sid=#sid#

  </delete>

 

  <!-- update student by id -->

  <update id="updateStudentById" parameterClass="Student">

     update STUDENT set sname=#sname#,

                                           major=#major#,

                                           birth=#birth#,

                                           score=#score#

                                where sid=#sid#

  </update>

 

 <!--  selectstudent by name , "$" is placeholder not "#"-->

 <select id="selectStudentByName" parameterClass="String" resultMap="StudentResult">

    select * from STUDENT where snamelike '%$sname$%'

 </select>

 

 <!-- atomatic generation of primary keys ,"keyProperty" is parameter of java object -->

 <insert id="addStudentBySequence" parameterClass="Student">

      <selectKey resultClass="int" keyProperty="sid">

           select studentpksequence.nextValfrom dual

      </selectKey>

       insert into STUDENT(

                                              sid,

                                              sname,

                                             major,

                                             birth,

                                             score

                                              )

                                             values(

                                              #sid#,#sname#,#major#,#birth#,#score#

                                              )

 </insert>

 

</sqlMap>

 

数据实体类 Student.java

package com.hdw.dao;

 

import java.util.Date;

 

publicclass Student

{

       privateintsid;

      

       private String sname;

      

       private String major;

      

       private Date birth;

      

       privatefloatscore;

 

       publicint getSid() {

              returnsid;

       }

 

       publicvoid setSid(int sid) {

              this.sid = sid;

       }

 

       public String getSname() {

              returnsname;

       }

 

       publicvoid setSname(String sname) {

              this.sname = sname;

       }

 

       public String getMajor() {

              returnmajor;

       }

 

       publicvoid setMajor(String major) {

              this.major = major;

       }

 

       public Date getBirth() {

              returnbirth;

       }

 

       publicvoid setBirth(Date birth) {

              this.birth = birth;

       }

 

       publicfloat getScore() {

              returnscore;

       }

 

       publicvoid setScore(float score) {

              this.score = score;

       }

 

       @Override

       public String toString() {

             

              String content = "sid="+sid+"\tsname="+sname+"\tmajor="+major+"\tbirth="+birth+"\tscore="+score;

              return content;

       }

      

      

 

}

 

 

 

接口类 StudentDAO.java

package com.hdw.sever;

 

import java.util.List;

 

importcom.hdw.dao.Student;

 

public interfaceStudentDAO

{

 

   public void addStudent(Student student);

  

   public void addStudentBySequence(Student student);

  

   public void deleteStudentById(int sid);

  

   public void updateStudentById(Student student);

  

   public List<Student> queryAllStudent();

  

   public List<Student> queryStudentByName(String sname);

  

   public Student queryStudentById(int sid);

 

}

实现类StudentDAOImp.java

package com.hdw.sever.serverImp;

 

importjava.io.IOException;

import java.io.Reader;

importjava.sql.SQLException;

import java.util.List;

 

importcom.hdw.dao.Student;

importcom.hdw.sever.StudentDAO;

importcom.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

 

public class StudentDAOImpimplements StudentDAO

{

 

   public static SqlMapClient sqlMapClient = null;

  

   String QUERY_ALL_STUDENT = "queryAllStudent";

  

   String QUERY_STUDENT_BYID = "queryStudentById";

  

   String ADD_STUDENT ="addStudent";

  

   String DELETE_STUDENT_BYID = "deleteStudentById";

  

   String UPDATE_STUDENT_BYID = "updateStudentById";

  

   String SELECT_STUDENT_BYNAME = "selectStudentByName";

  

   String ADD_STUDENT_BYSEQUENCE = "addStudentBySequence";

  

   static

   {

          try

          {

                

                 //从类路径中加载sqlmap配置文件

                 Reader reader =Resources.getResourceAsReader("com/hdw/conf/SqlMapConfig.xml");

                

                 //创建SqlMapClient接口的变量实例

                 sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

 

                

                 reader.close();

          }

          catch (IOException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

         

   }

  

   @Override

   public void addStudent(Student student)

   {

          try

          {

                 sqlMapClient.insert(ADD_STUDENT,student);

          }

          catch(SQLException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

 

   }

 

   @Override

   public void addStudentBySequence(Student student)

   {

          try

          {

                 sqlMapClient.insert(ADD_STUDENT_BYSEQUENCE,student);

                 System.out.println("generated ID numberatomatically, sid = "+student.getSid());

          }

          catch (SQLException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

 

   }

 

   @Override

   public void deleteStudentById(int sid)

   {

         

            try

            {

               int flag =sqlMapClient.delete(DELETE_STUDENT_BYID,sid);

                    if(   flag > 0)

                    {

                          System.out.println("deleted successfully,delete message " +flag+" .");

                    }

                    else

                    {

                           System.out.println("thismessage don't exist, delete failed .");

                    }

                 }

            catch (SQLException e)

            {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                 }

   }

 

   @Override

   public void updateStudentById(Student student)

   {

          try

          {

                 int updateFlag =sqlMapClient.update(UPDATE_STUDENT_BYID,student);

                

                   if(      updateFlag > 0)

                    {

                          System.out.println("update successfully,update message is " +student.toString()+" .");

                    }

                    else

                    {

                           System.out.println("thismessage don't exist, updated failed .");

                    }

          }

          catch (SQLException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

 

   }

 

   @Override

   public List<Student> queryAllStudent()

   {

          List<Student> studentList = null;

                       

          try

          {

                 studentList =sqlMapClient.queryForList(QUERY_ALL_STUDENT);

          }

          catch (SQLException e)

          {

                 e.printStackTrace();

          }

         

          return studentList;

   }

 

   @Override

   public List<Student> queryStudentByName(String sname)

   {

          List<Student> studentList = null;

         

          try

          {

                 studentList =sqlMapClient.queryForList(SELECT_STUDENT_BYNAME,sname);

          }

          catch (SQLException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

         

          return studentList;

   }

 

   @Override

   public Student queryStudentById(int sid)

   {

          Student student = null;

          try

          {

                  student =(Student) sqlMapClient.queryForObject(QUERY_STUDENT_BYID,sid);

          }

          catch (SQLException e)

          {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

          }

          return student;

}

测试类MyDoMain.java

package com.hdw.mydata;

 

import java.sql.Date;

import java.util.List;

import java.util.Random;

 

import com.hdw.dao.Student;

import com.hdw.sever.StudentDAO;

import com.hdw.sever.serverImp.StudentDAOImp;

 

public class MyDoMain

{

    

     /**

      * @param args

      */

     public static voidmain(String[] args)

     {

              // TODOAuto-generated method stub

 

              StudentDAOstudentdao = new StudentDAOImp();

 

              StudentstudentObj = studentdao.queryStudentById(803142);

    

             

              System.out.println("/*************querystudent by id begin**************/");

    

         System.out.println(studentObj);

             

              System.out.println("/*************querystudent by id end**************/"+"\n");

             

              System.out.println("/*************addstudent begin**************/");

              Student student =new Student();

             

              //get a randomunmber ,spacify the number of 100 seeds

              Random random =new Random();

              student.setSid(random.nextInt(1000));

              student.setSname("hdw");

              student.setMajor("CODE");

              student.setBirth(Date.valueOf("1988-12-13"));

              student.setScore(100);

              studentdao.addStudent(student);

              System.out.println("insertimformation: "+student);

              System.out.println("/*************addstudent end**************/\n");

             

              System.out.println("/*************addstudent by sequence,automatic generation of permary keysbegin**************/");

              studentdao.addStudentBySequence(student);

              System.out.println("/*************addstudent by sequence ,automatic generation of permary keys end**************/\n");

             

              System.out.println("/*************deletestudent by id begin**************/");

              studentdao.deleteStudentById(2);

              System.out.println("/*************deletestudent by id end**************/\n");

             

              System.out.println("/*************updatestudent by id begin**************/");

              student.setSname("devidh");

              studentdao.updateStudentById(student);

              System.out.println("/*************updatestudent by id end**************/\n");

             

        System.out.println("/*************query student by sname  begin**************/");

             

              List<Student> listStudentBySname =studentdao.queryStudentByName("i");

 

              for(StudentstudentOb:listStudentBySname)

              {

                        System.out.println(studentOb);

              }

             

              System.out.println("/*************querystudent by sname end**************/\n");

             

             

              System.out.println("/*************queryall student  begin**************/");

             

              List<Student> listStudent = studentdao.queryAllStudent();

 

              for(StudentstudentOb:listStudent)

              {

                        System.out.println(studentOb);

              }

              System.out.println("/*************queryall student end**************/\n");

 

     }

 

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值