ibaits 入门案例及源码

来源:互联网 发布:mac远程控制 向日葵 编辑:程序博客网 时间:2024/05/20 20:59

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 -->

<propertiesresource="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文件

<?xmlversion="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">

<sqlMapnamespace="Student">

<typeAliasalias="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 staticSqlMapClientsqlMapClient = 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;

 

publicclassStudentDAOImpimplements StudentDAO

{

 

         publicstatic SqlMapClientsqlMapClient =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;

 

publicclassStudent

{

         privateintsid;

        

         private Stringsname;

        

         private Stringmajor;

        

         private Datebirth;

        

         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文件

<?xmlversion="1.0"encoding="UTF-8"?>

 

<!DOCTYPEsqlMapConfig     

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

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

   

 

<sqlMapConfig>

 

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

 

  <transactionManagertype="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>

 

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

 

</sqlMapConfig>

 

 

 

Students.xml 文件

<?xmlversion="1.0"encoding="UTF-8"?>

 

<!DOCTYPEsqlMap     

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

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

 

<sqlMapnamespace="Student">

 

<typeAliasalias="Student"type="com.hdw.dao.Student"/>

 

  <resultMapid="StudentResult"class="Student">

    <resultproperty="sid"column="SID"/>

     <resultproperty="sname"column="SNAME"/>

    <resultproperty="major"column="MAJOR"/>

    <resultproperty="birth"column="BIRTH"/>

    <resultproperty="score"column="SCORE"/>

  </resultMap>

 

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

  <selectid="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, "#" isplaceholder-->

  <selectid="queryStudentById"parameterClass="int"resultMap="StudentResult">

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

  </select>

 

  <!-- insert a student object -->

  <insertid="addStudent"parameterClass="Student">

     insert into STUDENT(

                                             sid,

                                             sname,

                                             major,

                                             birth,

                                             score

                                             )

                                             values(

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

                                              )

  </insert>

 

  <!-- delete student by id -->

  <deleteid="deleteStudentById"parameterClass="int">

     delete from STUDENT where sid=#sid#

  </delete>

 

  <!-- update student by id -->

  <updateid="updateStudentById"parameterClass="Student">

     update STUDENT set sname=#sname#,

                                           major=#major#,

                                           birth=#birth#,

                                           score=#score#

                                where sid=#sid#

  </update>

 

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

 <selectid="selectStudentByName"parameterClass="String"resultMap="StudentResult">

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

 </select>

 

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

 <insertid="addStudentBySequence"parameterClass="Student">

      <selectKeyresultClass="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 Stringsname;

      

       private Stringmajor;

      

       private Datebirth;

      

       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
原创粉丝点击