iBatis实现的一个例子

来源:互联网 发布:sql区分二范式和三范式 编辑:程序博客网 时间:2024/04/26 01:34

工程目录结构如下: 

 

目录

//1SQL MAP配置文件

 SqlMapConfig.xml

 

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

<!DOCTYPE sqlMapConfig

    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"

    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

 

<sqlMapConfig> 

   <properties resource="com/study/xiaofeng/maps/SqlMapConfig.properties"/>

  <settings cacheModelsEnabled="true"

           enhancementEnabled="true"

        lazyLoadingEnabled="true"

        errorTracingEnabled="true"

        maxRequests="32"

        maxSessions="10"

        maxTransactions="5"

        useStatementNamespaces="false" />

 

 

 <transactionManager type="JDBC">

  <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}" />

   <property name="Pool.MaximumActiveConnections" value="10" />

   <property name="Pool.MaximumIdleConnections" value="5" />

   <property name="Pool.MaximumCheckoutTime" value="120000" />

   <property name="Pool.TimeToWait" value="500" />

   <property name="Pool.PingQuery" value="select 1 from sample" />

   <property name="Pool.PingEnabled" value="false" />

   <property name="Pool.PingConnectionsOlderThan" value="1" />

   <property name="Pool.PingConnectionsNotUsedFor" value="1" />

  </dataSource>

 </transactionManager>

 

<!--

<transactionManager type="JTA" >

<property name="UserTransaction"

value="java:comp/env/jdbc/framework"/>

<dataSource type="JNDI">

<property name="DataSource"

value="java:comp/env/jdbc/ibatistest"/>

</dataSource>

</transactionManager>

 

 

<transactionManager type="JDBC" >

<dataSource type="JNDI">

<property name="DataSource"

value="java:comp/env/jdbc/ibatistest"/>

</dataSource>

</transactionManager>

-->

 <sqlMap resource="com/study/xiaofeng/maps/person.xml" />

</sqlMapConfig>

 

 

//2SQL Map配置文件拥有唯一的<properties>元素,这样做后,在属性文件中定义的属性可以作为变量在SQL Map配置文件及其包含的所有SQL Map映射文件中引用

 

SqlMapConfig.xml

 

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver

url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ibatistest;SelectMethod=Cursor;

 

username=xiaofeng

password=xiaofeng

 

//3SQL Map XML映射

 

person.xml

 

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

<!DOCTYPE sqlMap

PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"

"http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="Student">

 

<typeAlias alias="student" type="com.study.xiaofeng.Student"/>

<typeAlias alias="course" type="com.study.xiaofeng.Course"/>

<typeAlias alias="intro" type="com.study.xiaofeng.Intro"/>

<typeAlias alias="sc" type="com.study.xiaofeng.SC"/>

 

<resultMap id="get-student-result" class="student" >

<result property="sno" column="Sno"/>

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

<result property="ssex" column="Ssex"/>

<result property="sage" column="Sage"/>

<result property="sdept" column="Sdept"/>

<result property="sc" column="Sno" select="getSc"/>

<result property="intro" column="Sno" select="getIntro"/>

 

</resultMap>

<resultMap id="get-course-result" class="course">

<result property="cno" column="Cno"/>

<result property="cname" column="cname"/>

<result property="ccredit" column="Ccredit"/>

</resultMap>

<resultMap class="intro" id="get-intro-result">

<result property="sno" column="Sno"/>

<result property="idescription" column="Idescription"/>

</resultMap>

<!--

<resultMap id="get-sc-result" class="sc" >

<result property="sno" column="Sno"/>

<result property="cno" column="Cno"/>

<result property="grade" column="Grade"/>

<result property="course" column="Cno" select="getCourse"/>

</resultMap>

 -->

<select id="getStudent" parameterClass="String" resultMap="get-student-result">

select * from STUDENT

WHERE

Sname=#value#

</select>

<select id="getCourse" parameterClass="Integer" resultMap="get-course-result">

select * from COURSE WHERE Cno=#value#

</select>

<select id="getIntro" parameterClass="Integer" resultMap="get-intro-result">

select *from INTRO WHERE Sno=#value#

</select>

<select id="getSc" parameterClass="Integer" resultClass="SC">

select Cno,Grade

from SC

WHERE

Sno=#sno#

</select>

 

<insert id="insertStudent" parameterClass="student">

INSERT INTO

STUDENT (Sno,Sname,Ssex,Sage,Sdept)

VALUES (#sno#,#sname#,#ssex#,#sage#,#sdept#)

</insert>

<update id="updateStudent" parameterClass="student">

UPDATE STUDENT

SET Sname= #sname#,

Ssex= #ssex#,

Sage=#sage#,

Sdept=#sdept#

WHERE Sno = #sno#

</update>

<delete id="deleteStudent" parameterClass="student">

DELETE STUDENT

WHERE Sno = #sno#

</delete>

</sqlMap>

 

 //4、AppSqlConfig.java

 

package com.study.xiaofeng;

import com.ibatis.sqlmap.client.SqlMapClient;

import java.io.Reader;

import com.ibatis.common.resources.*;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;

 

public class AppSqlConfig {

 private static final SqlMapClient sqlMap;

 static {

 try {

 String resource ="com/study/xiaofeng/maps/SqlMapConfig.xml";

 Reader reader = Resources.getResourceAsReader (resource);

 sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

 } catch (Exception e) {

  e.printStackTrace();

  throw new RuntimeException ("Error initializing MyAppSqlConfig class. Cause: "+e);

  }

}

public static SqlMapClient getSqlMapInstance () {

   return sqlMap;

  }

}

 

 

//test.java

 

package com.study.xiaofeng;

import com.ibatis.sqlmap.client.SqlMapClient;

import java.sql.*;

import java.util.List;

//JTA

import javax.naming.InitialContext;

import javax.transaction.UserTransaction;

public class Test {

    public static void update(int no,String name,String sex,int age,String dept){

     com.ibatis.sqlmap.client.SqlMapClient client = null;

     try{

          client=new AppSqlConfig().getSqlMapInstance();

       client.startTransaction();

       Student student=new Student();

       student.setSno(no);

       student.setSname(name);

       student.setSsex(sex);

       student.setSage(age);

       student.setSdept(dept);

       client.update("updateStudent",student);

       client.commitTransaction();

     }catch(SQLException e){

         System.out.println(e.getMessage());

     }finally {

   try {

    client.endTransaction();

   } catch (SQLException e) {

    e.printStackTrace();

   }

  }

    }

    public static void insertStudent(int no,String name,String sex,int age,String dept){

     com.ibatis.sqlmap.client.SqlMapClient client = null;

     try{

      client=new AppSqlConfig().getSqlMapInstance();

   client.startTransaction();

   Student student=new Student();

   student.setSno(no);

   student.setSname(name);

   student.setSsex(sex);

   student.setSage(age);

   student.setSdept(dept);

   client.insert("insertStudent",student);

   client.commitTransaction();

 }catch(SQLException e){

     System.out.println(e.getMessage());

 }finally {

  try {

   client.endTransaction();

  } catch (SQLException e) {

   e.printStackTrace();

  }

 }

    

    }

    //一个对象直接作为属性,实现关联

    public static Student getStudent(){

     com.ibatis.sqlmap.client.SqlMapClient client = null;

  Student student=null;

     try{

          client=new AppSqlConfig().getSqlMapInstance();

        client.startTransaction();

       student = (Student)client.queryForObject("getStudent","xiaofeng");

       client.commitTransaction();

     }catch(SQLException e){

         System.out.println(e.getMessage());

     }finally{

   try {

    client.endTransaction();

   } catch (SQLException e) {

    e.printStackTrace();

   }

  }

     return student;

    }

    //多个对象放到List中作为一个属性 实现关联,但是得嵌套查询。 测试一对多的关联查询

    //也可以实现多对多

    public static void reStudent(String name){

     com.ibatis.sqlmap.client.SqlMapClient sqlMap = null;

     sqlMap=new AppSqlConfig().getSqlMapInstance();

     try{

       sqlMap.startTransaction();

       List studentList=sqlMap.queryForList("getStudent",name);

      

       for(int i=0;i<studentList.size();i++){

        Student student=(Student)studentList.get(i);

        System.out.println("姓名(表1):"+student.getSname());

        for(int k=0;k<student.getSc().size();k++){

         SC sc=(SC)student.getSc().get(k);

         Course course=(Course)sqlMap.queryForObject("getCourse", sc.getCno());

         System.out.print("课程号(表2):"+sc.getCno());

         System.out.print("------课程名(表3):"+course.getCname().trim()+"------分数(表2: "+sc.getGrade()+"/n");

        

         }

       }

    

      sqlMap.commitTransaction();

    }catch(SQLException e){

        System.out.println(e.getMessage());

    }finally{

  try {

   sqlMap.endTransaction();

  } catch (SQLException e) {

   e.printStackTrace();

  }

 }

    }

   

    public static void main(String args[]){

 //    update(2004131301,"xiaofeng","",23,"信息");

        reStudent("name2");

        Student student=getStudent();

     System.out.println("4  描述:"+student.getIntro().getIdescription());

  

    // insertStudent(2004131305,"xiaofeng5","",23,"信息"); ;

    

    }

   

}

 

//Course.java

 

package com.study.xiaofeng;

import java.io.Serializable;

public class Course implements Serializable{

    private int cno;

    private String cname;

    private int ccredit;

   

    public int getCno(){

     return this.cno;

    }

    public void setCno(int no){

     this.cno=no;

    }

    public String getCname(){

     return this.cname;

    }

    public void setCname(String name){

     this.cname=name;

    }

    public int getCcredit(){

     return this.ccredit;

    }

    public void setCcredit(int credit){

     this.ccredit=credit;

    }

}

 

 

//Intro.java

 

package com.study.xiaofeng;

import java.io.Serializable;

public class Intro implements Serializable{

 private int sno;

 private String idescription;

 

 public int getSno(){

  return this.sno;

 }

 public void setSno(int sno){

  this.sno=sno;

 }

 public String getIdescription(){

  return this.idescription;

 }

 public void setIdescription(String description){

  this.idescription=description;

 }

}

 

 

//Sc.java

 

package com.study.xiaofeng;

import java.io.Serializable;

public class SC implements Serializable{

    private int sno;

    private int cno;

    private int grade;

    private Course course;

   

    public int getSno(){

     return this.sno;

    }

    public void setSno(int no){

     this.sno=no;

    }

    public int getCno(){

     return this.cno;

    }

    public void setCno(int no){

     this.cno=no;

    }

    public int getGrade(){

     return this.grade;

    }

    public void setGrade(int grade){

     this.grade=grade;

    }

    public Course getCourse(){

     return this.course;

    }

    public void setCourse(Course course){

     this.course=course;

    }

}

 

 

//Student.java

 

package com.study.xiaofeng;

import java.io.Serializable;

import java.util.List;

public class Student implements Serializable{

    private int sno;

    private String sname;

    private String ssex;

    private int sage;

    private String sdept;

    private List sc;

    private Intro intro;

    public int getSno(){

     return this.sno;

    }

    public void setSno(int no){

     this.sno=no;

    }

    public String getSname(){

     return this.sname;

    }

    public void setSname(String name){

     this.sname=name;

    }

    public String getSsex(){

     return this.ssex;

    }

    public void setSsex(String sex){

     this.ssex=sex;

    }

    public int getSage(){

     return this.sage;

    }

    public void setSage(int age){

     this.sage=age;

    }

    public String getSdept(){

     return this.sdept;

    }

    public void setSdept(String dept){

     this.sdept=dept;

    }

    public List getSc(){

     return this.sc;

    }

    public void setSc(List sc){

     this.sc=sc;

    }

    public Intro getIntro(){

     return this.intro;

    }

    public void setIntro(Intro intro){

     this.intro=intro;

    }

}

  

//运行结果如下:

 

 

原创粉丝点击