`
IT阿狸
  • 浏览: 67876 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iBatis,带一小例子

 
阅读更多

一、iBATIS简介:

        iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis。

 

二、建立Java Project

 

三、导jar包:ibatis-2.3.4.726.jar

 

四、entity,同时需要相关的实体类xml文件

1.Classes类

package org.e276.entity;

public class Classes {

	private Integer id; 
	private String name; 
	private String beginDate; 
	private String endDate;
	
	//构造方法

	public Classes() {
		super();
	}
	
	public Classes(Integer id) {
		super();
		this.id = id;
	}
	
	public Classes(Integer id, String name, String beginDate, String endDate) {
		super();
		this.id = id;
		this.name = name;
		this.beginDate = beginDate;
		this.endDate = endDate;
	}

	//getter/setter
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getBeginDate() {
		return beginDate;
	}

	public void setBeginDate(String beginDate) {
		this.beginDate = beginDate;
	}

	public String getEndDate() {
		return endDate;
	}

	public void setEndDate(String endDate) {
		this.endDate = endDate;
	}
	
}

 

2.Students类

package org.e276.entity;

public class Students {

	private Integer id;
	private String name;
	private Integer age;
	private Classes classes;

	// 构造方法

	public Students() {
		super();
	}

	public Students(String name, Integer age, Classes classes) {
		super();
		this.name = name;
		this.age = age;
		this.classes = classes;
	}

	// getter/setter

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Classes getClasses() {
		return classes;
	}

	public void setClasses(Classes classes) {
		this.classes = classes;
	}

	@Override
	public String toString() {
		return "Students [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}

 

 

3.Students.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "sql-map-2.dtd">

<sqlMap namespace="me">

	<typeAlias alias="Students" type="org.e276.entity.Students" />
	<typeAlias alias="Classes" type="org.e276.entity.Classes" />

	<!-- 学生类,多对一,如果列名和属性名完全一样,则不用映射 -->
	<resultMap class="Students" id="StudentsResult">
		<result property="id" column="id" />
		<result property="name" column="name" />
		<result property="age" column="age" />
		<result property="classes" column="class_id" select="getClassesById" />
	</resultMap>

	<!-- 班级类 -->
	<resultMap class="Classes" id="ClassesResult">
		<result property="id" column="id" />
		<result property="name" column="name" />
		<result property="beginDate" column="begin_date" />
		<result property="endDate" column="end_date" />
	</resultMap>

	<!-- 如果名不同,则必须加上as,通过id查找班级 -->
	<select id="getClassesById" parameterClass="int" resultMap="ClassesResult">
		select * from classes where id = #value#
	</select>

	<!-- 查找所有的学生 -->
	<select id="getAllStudents" resultMap="StudentsResult">
		select * from students
	</select>

	<!-- 根据id得到当前班级所有的学生 -->
	<select id="getStudentsByClassId" resultClass="Students"
		parameterClass="int">
		<![CDATA[
			select id, name, age, class_id from students where class_id = #value#
		]]>
	</select>

	<!-- 插入学生 -->
	<insert id="saveStudent" parameterClass="Students">
		<!-- 注意Oracle中的id是以序列的形式插入,不能省略id这一列 -->
		<![CDATA[
			insert into students values(students_seq.nextval,#name#, #age#, #classes.id#)
		]]>
		<!-- 返回主键 -->
		<selectKey resultClass="int" keyProperty="id">
			<!-- Oracle中的写法:select 序列名.currval as id from dual -->
			<![CDATA[
				select students_seq.currval as id from dual
			]]>
		</selectKey>
	</insert>

	<!-- 多表联接查询,查询学生表和班级表 -->
	<select id="selectStudentsAndClasses" resultClass="java.util.HashMap">
		<![CDATA[
			select s.id as sid, s.name as sname, s.age as sage, c.name as cname from students s inner join classes c on s.class_id = c.id 
		]]>
	</select>
</sqlMap>

 

 

 

五、测试类(使用单元测试)

package org.e276.test;

import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.e276.entity.Classes;
import org.e276.entity.Students;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class TestStudents {

	SqlMapClient sqlMapper;

	@Before
	public void setUp() throws Exception {
		Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
		// 得到SqlMapClient接口对象
		sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
		// 关闭对象
		reader.close();
	}

	@After
	public void tearDown() throws Exception {
		sqlMapper = null;
	}

	/**
	 * 通过id查找班级
	 * 
	 * @throws SQLException
	 */
	public void getClassesById() throws SQLException {
		@SuppressWarnings("unchecked")
		List<Classes> classes = sqlMapper.queryForList("getClassesById", 2);
		for (Classes clazz : classes) {
			System.out.println("班级名:" + clazz.getName());
		}
	}

	/**
	 * 查找所有的学生
	 * 
	 * @throws SQLException
	 */
	
	public void getAllStudents() throws SQLException {
		@SuppressWarnings("unchecked")
		List<Students> students = sqlMapper.queryForList("getAllStudents");
		for (Students stus : students) {
			System.out.println(stus);
		}
	}

	/**
	 * 查询班级ID为3的学生信息
	 * 
	 * @throws SQLException
	 */
	
	public void getStudentsByClassId() throws SQLException {
		@SuppressWarnings("unchecked")
		List<Students> stuList = sqlMapper.queryForList("getStudentsByClassId", 3);
		for (Students students : stuList) {
			System.out.println(students);
		}
	}

	/**
	 * 插入一个学生记录
	 * 
	 * @throws SQLException
	 */
	
	public void saveStudent() throws SQLException {
		Students student = new Students("李某某", 32, new Classes(2));
		int id = (Integer) sqlMapper.insert("saveStudent", student);
		System.out.println(id);
	}

	/**
	 * 多表联接,查询学生表和班级表
	 * 
	 * @throws SQLException
	 */
	@Test
	public void selectStudentsAndClasses() throws SQLException {
		@SuppressWarnings("unchecked")
		List<Map<String, Object>> result = sqlMapper.queryForList("selectStudentsAndClasses");
		for (Map<String, Object> map : result) {
			System.out.println("序号:" + map.get("SID"));
			System.out.println("学生姓名:" + map.get("SNAME"));
			System.out.println("年龄:" + map.get("SAGE"));
			System.out.println("班级名:" + map.get("CNAME"));
			System.out.println("-------------");
		}
	}
}

 

 

 

六、iBatis的配置文件 SqlMapConfig.xml

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

  <!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource -->
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
      <property name="JDBC.Username" value="y2"/>
      <property name="JDBC.Password" value="bdqn"/>
    </dataSource>
  </transactionManager>

  <!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="org/e276/entity/Students.xml"/>
  <!-- List more here...
  <sqlMap resource="com/mydomain/data/Order.xml"/>
  <sqlMap resource="com/mydomain/data/Documents.xml"/>
  -->

</sqlMapConfig>

 

 

 

七、demo

E276-iBatis.zip

 

 

分享到:
评论

相关推荐

    ibatis的一个小例子

    【标题】:“ibatis的一个小例子” 在Java Web开发领域,Ibatis(现已被更名为MyBatis)是一款广泛使用的持久层框架。它提供了一个灵活的SQL映射框架,使开发者可以将SQL语句与Java代码分离,从而实现数据访问层的...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...

    ibatis小例子Demo

    这个"ibatis小例子Demo"是为了帮助初学者快速理解和掌握Ibatis的核心功能和基本用法。 Ibatis的主要特点包括: 1. **XML配置文件**:Ibatis通过XML配置文件来定义SQL语句、参数映射和结果映射,使得SQL与Java代码...

    原创的一个iBatis例子

    这是一个用iBator生成iBatis有关代码的例子。 特别说明: Eclipse应该是3.4.1以上版本, 并且安装了iBator插件。否则可用iBator的命令行版本或ant工具。 测试用数据是: CREATE TABLE PERSON( id INTEGER NOT NULL,...

    Ibatis连接数据库的小例子

    在这个小例子中,我们已经成功地用Ibatis连接上了ORACLE数据库,并执行了一个简单的查询操作。Ibatis允许我们灵活地编写SQL,同时提供了事务管理和结果映射等功能,使得数据库操作更加便捷和高效。 注意,为了运行...

    ibatis2.3例子代码

    总结来说,"ibatis2.3例子代码"提供了一个基于iBatis 2.3版本与MySQL数据库交互的实例。通过学习这个例子,你可以了解到如何配置iBatis,如何编写SQL映射文件,以及如何在Java代码中使用SqlSession和Mapper接口来...

    spring+ibatis+ehcache整合例子

    这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...

    .net中使用iBATIS的小例子

    这个小例子展示了如何在Visual Studio 2008中集成和使用iBATISNET。下面我们将详细探讨iBATIS在.NET中的使用方法,以及如何利用提供的文件进行实践。 首先,了解iBATIS的基本概念。iBATIS是一个轻量级框架,它的...

    ajax和ibatis的综合应用例子

    这个例子是一个很好的学习资源,可以帮助开发者理解如何在实际项目中整合Ajax和iBatis,提升Web应用的性能和用户体验。通过分析这些文件,我们可以深入了解两者的配合使用,以及在具体场景下的实现细节。

    ibatis学习小例子

    标题 "ibatis学习小例子" 暗示我们即将探讨的是关于Ibatis,一个轻量级的Java持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化了数据库操作。Ibatis提供了灵活的映射机制,避免了对JDBC的繁琐处理...

    学习ibatis很好的例子JPetStore

    学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore

    Ibatis入门例子,Ibatis教程

    在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    使用的iBatis 简单例子

    iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得开发者能够更灵活地控制数据库操作。在这个“使用的iBatis简单例子”中,我们将深入探讨如何配置和使用iBatis进行数据库...

    struts+spring+ibatis+mysql小例子

    总结起来,"struts+spring+ibatis+mysql小例子"展示了如何将这四个组件有效整合,以实现一个完整的Web应用程序。这个例子涵盖了基础的Web交互,数据管理,以及更高级的功能,如分页和数据导出,对于初学者来说是一个...

    第一个ibatis例子

    这个"第一个ibatis例子"是一个典型的入门教程,旨在帮助初学者快速理解并掌握Ibatis的基本用法。 首先,Ibatis的核心组件包括XML配置文件、SqlMapConfig.xml、Mapper接口以及Mapper XML文件。在入门例子中,我们...

    iBatis工程简单例子

    iBatis工程的简单例子,在eclipse上实现的,数据库是mysql数据库,里面的字段为CREATE DATABASE MYDB; use MYDB; Drop TABLE IF EXISTS `MYDB`.`student`; Create TABLE `MYDB`.`student` ( `name` varchar(40) NOT...

    ibatis中iterate的例子

    举个例子,假设我们有一个用户ID的列表,我们需要查询这些ID对应的所有用户信息,可以这样配置iBatis的映射文件: ```xml SELECT * FROM users WHERE id IN (" property="ids" open="," close=")"&gt; #{ids[index...

    ibatis简单例子

    **Ibatis例子解析** 在"ibatis简单例子"中,我们可能有两个主要的部分: 1. **test**目录:这通常包含测试类,用于运行和验证Ibatis配置和映射。在这些测试类中,可以看到如何实例化SqlSessionFactory,打开...

    ibatis学习完整实例,例子

    Ibatis,作为一个轻量级的持久层框架,以其灵活、易用的特点在Java开发领域广泛应用。本教程旨在通过一个完整的实例——"ibatistest2"项目,帮助开发者深入理解和掌握Ibatis的核心功能与实践技巧。 首先,Ibatis的...

Global site tag (gtag.js) - Google Analytics