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" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="com/configs/SqlMap.properties"/> <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}"/>
</dataSource>
</transactionManager> <sqlMap resource="com/configs/Student.xml"/>
</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:

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

 <?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>
<typeAlias alias="Student" type="com.domain.Student"/>
<!--
查询记录
-->
<select id="selectAllStudent" resultClass="Student"> <!-- resultClass与上方sqlMap定义的映射对应 -->
select *
from Student
</select>
<!-- 根據指定id查詢 -->
<select id="selectStudentById" parameterClass="integer" resultClass="Student">
select *
from Student
where sid = #sid#
</select>
<!-- 模糊查询 -->
<select id="selectStudentByName" parameterClass="String" resultClass="Student">
select sid,sname,birthday,score
from student
where sname like '%$sname$%'
</select> <!--
插入记录
-->
<insert id="insertStudent" parameterClass="Student">
insert into Student
(sid,sname,birthday,score)
values
(#sid#,#sname#,#birthday#,#score#)
</insert> <!-- **通过序列增加学生 -->
<insert id="insertStudentBySequence" parameterClass="Student">
<selectKey resultClass="integer" keyProperty="sid">
select studentPKSequence.nextVal
from dual
</selectKey>
insert into Student(sid,sname,birthday,score)
values(#sid#,#sname#,#birthday#,#score#)
</insert> <!--
删除记录
-->
<delete id="deleteStudentById" parameterClass="integer">
delete
from Student
where sid = #sid#
</delete> <!-- 修改记录 -->
<update id="updateStudentById" parameterClass="Student">
update Student
set sname = #sname#,
birthday = #birthday#,
score = #score#
where sid = #sid#
</update>
</sqlMap>

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

  Student实体类:

 package com.domain;
import java.sql.Date; public class Student
{
private Integer sid = 0;
private String sname = null;
private Date birthday = null;
private float score = 0; public Integer getSid()
{
return sid;
} public void setSid(Integer sid)
{
this.sid = sid;
} public String getSname()
{
return sname;
} public void setSname(String sname)
{
this.sname = sname;
} public Date getBirthday()
{
return birthday;
} public void setBirthday(Date birthday)
{
this.birthday = birthday;
} public float getScore()
{
return score;
} public void setScore(float score)
{
this.score = score;
} @Override
public String toString()
{
String context = "sid=:" + sid + "\tsname=:" + sname + "\tbirthday=:"
+ birthday + "'\tscore=:" + score;
return context;
}
}

 实体dao接口:

 package com.dao;

 import java.util.List;

 import com.domain.Student;

 public interface IStudentDao
{
/*
* 添加学生
*/
public void addStudent(Student student); /*
* 通过序列增加学生
*/
public void addStudentBySequence(Student student); /*
* 根据传入的id删除学生
*/
public void deleteStudentById(Integer id); /*
* 根据传入的id修改学生
*/
public void updateStudentById(Student student);
/*
* 查询所有学生信息
*/
public List<Student> queryAllStudent(); /*
* 根据传入的名称查询学生
*/
public List<Student> queryStudentByName(String name); /*
* 根据传入的id查询学生
*/
public Student queryStudentById(Integer id);
}

  dao的实现类:

 package com.dao.impl;

 import java.io.Reader;
import java.sql.SQLException;
import java.util.List; import com.dao.IStudentDao;
import com.domain.Student;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class IStudentDaoImpl implements IStudentDao
{ private static SqlMapClient sqlMapClient = null; /**
* 在内存中只加载一次
*/
static
{
try
{
/*
* 讀取配置文件
*/
Reader reader = Resources.getResourceAsReader("com/configs/SqlMapConfig.xml"); /*
* 创建SqlMapClient接口的变量实例
*/
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); /*
* 关闭字符流
*/
reader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
} /*
* 添加学生
* @see com.dao.IStudentDao#addStudent(com.domain.Student)
*/
public void addStudent(Student student)
{
try
{
sqlMapClient.insert("insertStudent", student);
} catch (Exception e)
{
e.printStackTrace();
}
} /*
* (non-Javadoc)
* @see com.dao.IStudentDao#addStudentBySequence(com.domain.Student)
*/
public void addStudentBySequence(Student student)
{
try
{
//1、从数据库获取主键值
//2、向数据库插入数据
sqlMapClient.insert("insertStudentBySequence", student);
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /*
* (non-Javadoc)
* @see com.dao.IStudentDao#deleteStudentById(java.lang.Integer)
*/
public void deleteStudentById(Integer id)
{
try
{
sqlMapClient.delete("deleteStudentById", id);
} catch (Exception e)
{
e.printStackTrace();
} } /*
* (non-Javadoc)
* @see com.dao.IStudentDao#updateStudentById(com.domain.Student)
*/
public void updateStudentById(Student student)
{
try
{
System.out.println(sqlMapClient.update("updateStudentById", student));
}
catch (Exception e)
{
e.printStackTrace();
}
} /*
* (non-Javadoc)
* @see com.dao.IStudentDao#queryAllStudent()
*/
@SuppressWarnings("unchecked")
public List<Student> queryAllStudent()
{
List<Student> students = null;
try
{
students = sqlMapClient.queryForList("selectAllStudent");
} catch (Exception e)
{
e.printStackTrace();
}
return students;
} /*
* (non-Javadoc)
* @see com.dao.IStudentDao#queryStudentByName(java.lang.String)
*/
@SuppressWarnings("unchecked")
public List<Student> queryStudentByName(String name)
{
List<Student> students = null;
try
{
students = sqlMapClient.queryForList("selectStudentByName", name);
}
catch (Exception e)
{
e.printStackTrace();
}
return students;
} /*
* (non-Javadoc)
* @see com.dao.IStudentDao#queryStudentById(java.lang.Integer)
*/
public Student queryStudentById(Integer id)
{
Student student = null;
try
{
student = (Student) sqlMapClient.queryForObject("selectStudentById", id);
} catch (Exception e)
{
e.printStackTrace();
}
return student;
} }

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


 package com.test;

 import java.sql.Date;

 import com.dao.IStudentDao;
import com.dao.impl.IStudentDaoImpl;
import com.domain.Student; public class TestDao
{
public static void main(String[] args)
{
IStudentDao iStudentDao = new IStudentDaoImpl(); /* System.out.println("*************查詢所有學生*************");
for(Student student:iStudentDao.queryAllStudent())
{
System.out.println(student);
}
System.out.println();
System.out.println("************根據id查詢************");
System.out.println(iStudentDao.queryStudentById(2)); System.out.println();
System.out.println("***********插入记录*************");
Student student = new Student();
student.setSid(5);
student.setSname("小wang");
student.setBirthday(new Date(1992-04-19));
student.setScore(89);
iStudentDao.addStudent(student);
System.out.println("end"); System.out.println();
System.out.println("***********删除记录*************");
iStudentDao.deleteStudentById(5);*/ /*System.out.println();
System.out.println("***********修改记录*************");
Student student1 = new Student();
student1.setSid(5);
student1.setSname("小wang231321");
student1.setBirthday(new Date(1992-04-19));
student1.setScore(89);
iStudentDao.updateStudentById(student1);*/ System.out.println();
System.out.println("***********模糊查询记录*************");
System.out.println(iStudentDao.queryStudentByName("w"));
}
}
5、最后,对ibaits的一些优缺点总结:
  优点:(和jdbc相比较)
  (1)、减少了不少的代码量
  (2)、简单
  (3)、架构级性能增强
  (4)、sql语句与程序代码分离
  (5)、简化项目中的分工
  (6)、增强了移植性
 缺点:
  (1)、sql代码需要自己写
  (2)、参数数量只有一个

注:此文原创。

												

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

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

    一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http ...

  2. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

  3. 2.1 一个简单的Web工程例子

    一个简单的Web工程例子 开发环境: Eclipse: Neon Release (4.6.0) JDK:1.8.0_92 Tomcat:8.5.9 Maven:3.3.9 1. 在Eclipse中创 ...

  4. 一个简单的web服务器例子

    一个简单的web容器小例子,功能十分简单,只能访问静态资源,对于新手来说还是有一定的意义.主要分三个类 1.server类:主要功能开启socketServer,阻塞server,接收socket访问 ...

  5. Matlab高级教程_第二篇:一个简单的混编例子

    1. 常用的混编是MATLAB和VS两个编辑器之间的混编方式. 2. 因为MATLAB的核是C型语言,因此常见的混编方式是MATLAB和C型语言的混编. 3. 这里介绍一个简单的MATLAB语言混编成 ...

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

    在说道主题前,先来啰嗦两句,o()︿︶)o 唉,不说两句心里就有个疙瘩,也许这就是所谓的强迫症吧,好了说说我想啰嗦的,其实也就是这样子的,关于Java开发工具箱的下载以及环境的配置.Java开发工具箱 ...

  7. perl 一个简单的面向对象的例子

    <pre name="code" class="python">[root@wx03 wx]# cat x1.pm package x1; use ...

  8. 一个简单的Spring AOP例子

    转载自: http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html 经过这段日子的学习和使用Spring,慢慢地体会到Sprin ...

  9. 一个简单的ruby生成器例子(用连续体Continuation实现)

    ruby中有很多经典的驱动器结构,比如枚举器和生成器等.这次简单介绍下生成器的概念.生成器是按照功能要求,一次产生一个对象,或称之为生成一个对象的方法.ruby中的连续体正好可以用来完成生成器的功能. ...

随机推荐

  1. 利用servicestack连接redis

    利用servicestack连接redis 引言:作为少有的.net架构下的大型网站,stackoverflow今日发表了一篇文章,介绍了其技术体系,原文链接http://highscalabilit ...

  2. node.js系列笔记之fs模块《二》

    一:感触 最近工作比较忙,感觉也比较多,因为工作上的不顺利,再加上加班比较多,所以最近心情不是很好,再加上英语能力差到不行,所以最近半个月学习进度也比较慢, 但还是告诉自己每天都坚持学一点,即使今天心 ...

  3. IOS touch event animation 转动的风车

    最近开始学习IOS的开发,师兄给我提出一个需求:实现一个可拖动的转盘.师兄提示我说利用touch event和UIView animation.经过一两天的折腾边学边做,算是实现了基本功能.这里写写加 ...

  4. Android开发之Ubuntu上Eclipse不显示手机设备

    一.准备工作   A.开启Android设备,用USB数据线连接到Ubuntu系统.   B.启用设备的USB调试模试    C.启动Eclipse,在Devices栏会现一个有很多???号的不明设备 ...

  5. php设计模式----工厂模式

    工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品. 目的:简化对象生成过程,更加灵活. 例子如下: <?php /** * User: freephp * ...

  6. java布尔值进行and和or逻辑运算原理

    先看看如下代码: public class Test { public static void test() { boolean a = true; boolean b = false; if (a ...

  7. 基于gulp编写的一个简单实用的前端开发环境好了,安装完Gulp后,接下来是你大展身手的时候了,在你自己的电脑上面随便哪个地方建一个目录,打开命令行,然后进入创建好的目录里面,开始撸代码,关于生成的json文件请点击这里https://docs.npmjs.com/files/package.json,打开的速度看你的网速了注意:以下是为了演示 ,我建的一个目录结构,你自己可以根据项目需求自己建目

    自从Node.js出现以来,基于其的前端开发的工具框架也越来越多了,从Grunt到Gulp再到现在很火的WebPack,所有的这些新的东西的出现都极大的解放了我们在前端领域的开发,作为一个在前端领域里 ...

  8. 游戏对象、组件和Prefabs

    如标题所言,本文由3个部分组成,分别讲述游戏对象.组件和Prefabs(预设体). 1. 游戏对象 任何游戏对象都由组件组成,组件是实现一切功能所必需的.我们创建的对象会在Hierarchy视图中显示 ...

  9. linux:C语言通过ICMP协议判断局域网内部主机是否存活

    ICMP协议 ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方. ICMP协议是IP ...

  10. GMap学习笔记

    GMap学习笔记 1.GMap体系详解 What is the map control (GMapControl)? This is the control which renders the map ...