ibaits的一个简单的完整的例子

ibaits的简单介绍:

  iBatis 是apache 的一个开源项目,一个O/R Mapping(对象/关系映射) 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了。

搭建ibaits环境需要的一些资源jar包:

  ibatis-2.3.4.726.jar 、

  mysql-connector-java-5.1.20-bin.jar

下面是配置相关文件:

1、首先配置一个SqlMapConfig.xml文件:

  注:它的里面是与jdbc(连接数据库)一些相关的配置和引入实体类的映射文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 3 <!DOCTYPE sqlMapConfig
 4     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
 5     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 6
 7 <sqlMapConfig>
 8
 9   <properties resource="com/configs/SqlMap.properties"/>
10
11   <transactionManager type="JDBC">
12     <dataSource type="SIMPLE">
13       <property name="JDBC.Driver" value="${driver}"/>
14       <property name="JDBC.ConnectionURL" value="${url}"/>
15       <property name="JDBC.Username" value="${username}"/>
16       <property name="JDBC.Password" value="${password}"/>
17     </dataSource>
18   </transactionManager>
19
20   <sqlMap resource="com/configs/Student.xml"/>
21 </sqlMapConfig>
<properties resource="com/configs/SqlMap.properties"/>是引入的属性配置,它的里面是跟数据库连接的一些属性,具体见下。

2、配置一个属性文件SqlMap.properties:在SqlMapConfig.xml里面通过el表达式获取相应的值
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/user
username=root
password=111111

3、接着配置一个实体类的映射文件,暂且就用Student表示实体,对应文件为Student.xml:

  注:它的里面是对实体的一些操作,即增、删、改、查。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE sqlMap
 3     PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
 4     "http://www.ibatis.com/dtd/sql-map-2.dtd">
 5
 6 <sqlMap>
 7     <typeAlias alias="Student" type="com.domain.Student"/>
 8     <!--
 9         查询记录
10      -->
11     <select id="selectAllStudent" resultClass="Student">  <!-- resultClass与上方sqlMap定义的映射对应 -->
12         select *
13         from Student
14     </select>
15     <!-- 根據指定id查詢 -->
16     <select id="selectStudentById" parameterClass="integer" resultClass="Student">
17         select *
18         from Student
19         where sid = #sid#
20     </select>
21     <!-- 模糊查询 -->
22     <select id="selectStudentByName" parameterClass="String" resultClass="Student">
23         select sid,sname,birthday,score
24         from student
25         where sname like ‘%$sname$%‘
26     </select>
27
28     <!--
29         插入记录
30      -->
31     <insert id="insertStudent" parameterClass="Student">
32         insert into Student
33             (sid,sname,birthday,score)
34         values
35             (#sid#,#sname#,#birthday#,#score#)
36     </insert>
37
38     <!-- **通过序列增加学生 -->
39     <insert id="insertStudentBySequence" parameterClass="Student">
40         <selectKey resultClass="integer" keyProperty="sid">
41             select studentPKSequence.nextVal
42             from dual
43         </selectKey>
44             insert into Student(sid,sname,birthday,score)
45             values(#sid#,#sname#,#birthday#,#score#)
46     </insert>
47
48     <!--
49         删除记录
50      -->
51      <delete id="deleteStudentById" parameterClass="integer">
52          delete
53          from Student
54          where sid = #sid#
55      </delete>
56
57      <!-- 修改记录 -->
58      <update id="updateStudentById" parameterClass="Student">
59          update Student
60          set sname = #sname#,
61              birthday = #birthday#,
62              score = #score#
63          where sid = #sid#
64      </update>
65 </sqlMap>

4、接下来就是实体bean和dao了

  Student实体类:

 1 package com.domain;
 2 import java.sql.Date;
 3
 4 public class Student
 5 {
 6     private Integer sid = 0;
 7     private String sname = null;
 8     private Date birthday = null;
 9     private float score = 0;
10
11     public Integer getSid()
12     {
13         return sid;
14     }
15
16     public void setSid(Integer sid)
17     {
18         this.sid = sid;
19     }
20
21     public String getSname()
22     {
23         return sname;
24     }
25
26     public void setSname(String sname)
27     {
28         this.sname = sname;
29     }
30
31     public Date getBirthday()
32     {
33         return birthday;
34     }
35
36     public void setBirthday(Date birthday)
37     {
38         this.birthday = birthday;
39     }
40
41     public float getScore()
42     {
43         return score;
44     }
45
46     public void setScore(float score)
47     {
48         this.score = score;
49     }
50
51     @Override
52     public String toString()
53     {
54         String context = "sid=:" + sid + "\tsname=:" + sname + "\tbirthday=:"
55                 + birthday + "‘\tscore=:" + score;
56         return context;
57     }
59 }

 实体dao接口:

 1 package com.dao;
 2
 3 import java.util.List;
 4
 5 import com.domain.Student;
 6
 7 public interface IStudentDao
 8 {
 9     /*
10      * 添加学生
11      */
12     public void addStudent(Student student);
13
14     /*
15      * 通过序列增加学生
16      */
17     public void addStudentBySequence(Student student);
18
19     /*
20      * 根据传入的id删除学生
21      */
22     public void deleteStudentById(Integer id);
23
24     /*
25      * 根据传入的id修改学生
26      */
27     public void updateStudentById(Student student);33
34     /*
35      * 查询所有学生信息
36      */
37     public List<Student> queryAllStudent();
38
39     /*
40      * 根据传入的名称查询学生
41      */
42     public List<Student> queryStudentByName(String name);
43
44     /*
45      * 根据传入的id查询学生
46      */
47     public Student queryStudentById(Integer id);
48 }

  dao的实现类:

  1 package com.dao.impl;
  2
  3 import java.io.Reader;
  4 import java.sql.SQLException;
  5 import java.util.List;
  6
  7 import com.dao.IStudentDao;
  8 import com.domain.Student;
  9 import com.ibatis.common.resources.Resources;
 10 import com.ibatis.sqlmap.client.SqlMapClient;
 11 import com.ibatis.sqlmap.client.SqlMapClientBuilder;
 12
 13 public class IStudentDaoImpl implements IStudentDao
 14 {
 15
 16     private static SqlMapClient sqlMapClient = null;
 17
 18     /**
 19      * 在内存中只加载一次
 20      */
 21     static
 22     {
 23         try
 24         {
 25             /*
 26              * 讀取配置文件
 27              */
 28             Reader reader = Resources.getResourceAsReader("com/configs/SqlMapConfig.xml");
 29
 30             /*
 31              * 创建SqlMapClient接口的变量实例
 32              */
 33             sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
 34
 35             /*
 36              * 关闭字符流
 37              */
 38             reader.close();
 39         }
 40         catch (Exception e)
 41         {
 42             e.printStackTrace();
 43         }
 44     }
 45
 46     /*
 47      * 添加学生
 48      * @see com.dao.IStudentDao#addStudent(com.domain.Student)
 49      */
 50     public void addStudent(Student student)
 51     {
 52         try
 53         {
 54             sqlMapClient.insert("insertStudent", student);
 55         } catch (Exception e)
 56         {
 57             e.printStackTrace();
 58         }
 59     }
 60
 61     /*
 62      * (non-Javadoc)
 63      * @see com.dao.IStudentDao#addStudentBySequence(com.domain.Student)
 64      */
 65     public void addStudentBySequence(Student student)
 66     {
 67         try
 68         {
 69             //1、从数据库获取主键值
 70             //2、向数据库插入数据
 71             sqlMapClient.insert("insertStudentBySequence", student);
 72         }
 73         catch (SQLException e)
 74         {
 75             // TODO Auto-generated catch block
 76             e.printStackTrace();
 77         }
 78     }
 79
 80     /*
 81      * (non-Javadoc)
 82      * @see com.dao.IStudentDao#deleteStudentById(java.lang.Integer)
 83      */
 84     public void deleteStudentById(Integer id)
 85     {
 86         try
 87         {
 88             sqlMapClient.delete("deleteStudentById", id);
 89         } catch (Exception e)
 90         {
 91             e.printStackTrace();
 92         }
 93
 94     }
 95
 96     /*
 97      * (non-Javadoc)
 98      * @see com.dao.IStudentDao#updateStudentById(com.domain.Student)
 99      */
100     public void updateStudentById(Student student)
101     {
102         try
103         {
104             System.out.println(sqlMapClient.update("updateStudentById", student));
105         }
106          catch (Exception e)
107         {
108             e.printStackTrace();
109         }
110     }
111
112     /*
113      * (non-Javadoc)
114      * @see com.dao.IStudentDao#queryAllStudent()
115      */
116     @SuppressWarnings("unchecked")
117     public List<Student> queryAllStudent()
118     {
119         List<Student> students  = null;
120         try
121         {
122             students = sqlMapClient.queryForList("selectAllStudent");
123         } catch (Exception e)
124         {
125             e.printStackTrace();
126         }
127         return students;
128     }
129
130     /*
131      * (non-Javadoc)
132      * @see com.dao.IStudentDao#queryStudentByName(java.lang.String)
133      */
134     @SuppressWarnings("unchecked")
135     public List<Student> queryStudentByName(String name)
136     {
137         List<Student> students = null;
138         try
139         {
140             students = sqlMapClient.queryForList("selectStudentByName", name);
141         }
142         catch (Exception e)
143         {
144             e.printStackTrace();
145         }
146         return students;
147     }
148
149     /*
150      * (non-Javadoc)
151      * @see com.dao.IStudentDao#queryStudentById(java.lang.Integer)
152      */
153     public Student queryStudentById(Integer id)
154     {
155         Student student = null;
156         try
157         {
158             student = (Student) sqlMapClient.queryForObject("selectStudentById", id);
159         } catch (Exception e)
160         {
161             e.printStackTrace();
162         }
163         return student;
164     }
165
166 }

好了,到此为止基本的配置文件和相关的类就写好了,接下来就是写一些测试了:



 1 package com.test;
 2
 3 import java.sql.Date;
 4
 5 import com.dao.IStudentDao;
 6 import com.dao.impl.IStudentDaoImpl;
 7 import com.domain.Student;
 8
 9 public class TestDao
10 {
11     public static void main(String[] args)
12     {
13         IStudentDao iStudentDao = new IStudentDaoImpl();
14
15     /*    System.out.println("*************查詢所有學生*************");
16         for(Student student:iStudentDao.queryAllStudent())
17         {
18             System.out.println(student);
19         }
20         System.out.println();
21         System.out.println("************根據id查詢************");
22         System.out.println(iStudentDao.queryStudentById(2));
23
24         System.out.println();
25         System.out.println("***********插入记录*************");
26         Student student = new Student();
27         student.setSid(5);
28         student.setSname("小wang");
29         student.setBirthday(new Date(1992-04-19));
30         student.setScore(89);
31         iStudentDao.addStudent(student);
32         System.out.println("end");
33
34         System.out.println();
35         System.out.println("***********删除记录*************");
36         iStudentDao.deleteStudentById(5);*/
37
38         /*System.out.println();
39         System.out.println("***********修改记录*************");
40         Student student1 = new Student();
41         student1.setSid(5);
42         student1.setSname("小wang231321");
43         student1.setBirthday(new Date(1992-04-19));
44         student1.setScore(89);
45         iStudentDao.updateStudentById(student1);*/
46
47         System.out.println();
48         System.out.println("***********模糊查询记录*************");
49         System.out.println(iStudentDao.queryStudentByName("w"));
50     }
51 }
5、最后,对ibaits的一些优缺点总结:  优点:(和jdbc相比较)  (1)、减少了不少的代码量  (2)、简单  (3)、架构级性能增强  (4)、sql语句与程序代码分离  (5)、简化项目中的分工  (6)、增强了移植性 缺点:  (1)、sql代码需要自己写  (2)、参数数量只有一个

注:此文原创。

				
时间: 2024-07-30 13:49:45

ibaits的一个简单的完整的例子的相关文章

一个简单的回调(例子)

1.声明一个回调Interface: public interface CallBack { /** * 执行回调方法 * @param objects 将处理后的结果作为参数返回给回调方法 */ public void execute(Object... objects ); } 2.回调的地方继承回调,实现回调的方法: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe

ThinkPHP 学习(2)---一个简单的起步的例子

文件夹目录是核心目录ThinkPHP,入口文件是index.php,ThinkPHP里面的文件含义下次详解,接下来是启动一个自己的程序,现在可以修改一下入口文件,一般情况下会将自己的文件放在一个文件夹,我现在是先建立自己的文件夹,一个前台Home文件夹,一个后台文件夹Admin,怎么建立一个结构拥有ThinkPHP功能的文件夹呢?打开index.php,加入如下代码, <?php    //1.确定应用名称Home    define('APP_NAME','Admin');    //2.确定

一个简单的Spring定时器例子 注解方式

首先在applicationContext.xml中增加 文件头中增加一条 xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation 中增加一条 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd <beans xmlns:task=&quo

一个简单的iBatis入门例子

一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import java.util.Date; public class Person { private int id; private String firstName; private String lastName; private double weightInKilograms; private do

上海岳城科技一个简单的Ajax请求例子

Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术.通过Ajax,您可以使用 JavaScript的XMLHttpRequest对象来直接与服务器进行通信.您可以在不重载页面的情况与 Web 服务器交换数据.在本文的例子中,我们将演示当用户向一个标准的HTML表单中输入数据时网页如何与web服务器进行通信. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo

[转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程

一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http://blog.csdn.net/locape/article/details/6040383 http://www.cnblogs.com/liuweijian/archive/2009/12/30/1635888.html 一.什么是多线程? 当我自己提出这个问题的时候,我还是很老实的拿着操作系

一个简单的web服务器例子

一个简单的web容器小例子,功能十分简单,只能访问静态资源,对于新手来说还是有一定的意义.主要分三个类 1.server类:主要功能开启socketServer,阻塞server,接收socket访问,解析request,创建request,作出响应 public class TestServer1 { private boolean shutdown = false; // web目录webroot public static final String WEB_ROOT = System.ge

一个简单的java多线程例子

现在有这样一个任务,有一份手机号列表(20W),有一份话单的列表(10W),要统计哪些手机号没有出现在话单中,哪些手机号在话单中出现了不止一次. 想到的最直接的方式,就是两层循环去遍历,虽然此方法比较笨,但目前还没有想出更好的办法. 一开始使用单线程来处理,代码是随手写的并没有进行重构,只是做一个简单的说明: package tool; import java.util.List; public class SingleThread { public static void main(Strin

一个简单的Java程序例子以及其几种注释

在说道主题前,先来啰嗦两句,o()︿︶)o 唉,不说两句心里就有个疙瘩,也许这就是所谓的强迫症吧,好了说说我想啰嗦的,其实也就是这样子的,关于Java开发工具箱的下载以及环境的配置.Java的下载进入到oracle官网下载即可(具体的步骤就不赘述了如今网络资源丰富你懂得),下载好之后然后开始安装,根据安装过程中的说明进行下一步直至完成即可,等等不要激动,还没完了,要开始配置Java的开发环境(说明下我这说的只是正对window操作系统的),其实也很简单,就是对着桌面上的”我的电脑”鼠标右键带点击