一、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
相关推荐
【标题】:“ibatis的一个小例子” 在Java Web开发领域,Ibatis(现已被更名为MyBatis)是一款广泛使用的持久层框架。它提供了一个灵活的SQL映射框架,使开发者可以将SQL语句与Java代码分离,从而实现数据访问层的...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...
这个"ibatis小例子Demo"是为了帮助初学者快速理解和掌握Ibatis的核心功能和基本用法。 Ibatis的主要特点包括: 1. **XML配置文件**:Ibatis通过XML配置文件来定义SQL语句、参数映射和结果映射,使得SQL与Java代码...
这是一个用iBator生成iBatis有关代码的例子。 特别说明: Eclipse应该是3.4.1以上版本, 并且安装了iBator插件。否则可用iBator的命令行版本或ant工具。 测试用数据是: CREATE TABLE PERSON( id INTEGER NOT NULL,...
在这个小例子中,我们已经成功地用Ibatis连接上了ORACLE数据库,并执行了一个简单的查询操作。Ibatis允许我们灵活地编写SQL,同时提供了事务管理和结果映射等功能,使得数据库操作更加便捷和高效。 注意,为了运行...
总结来说,"ibatis2.3例子代码"提供了一个基于iBatis 2.3版本与MySQL数据库交互的实例。通过学习这个例子,你可以了解到如何配置iBatis,如何编写SQL映射文件,以及如何在Java代码中使用SqlSession和Mapper接口来...
这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...
这个小例子展示了如何在Visual Studio 2008中集成和使用iBATISNET。下面我们将详细探讨iBATIS在.NET中的使用方法,以及如何利用提供的文件进行实践。 首先,了解iBATIS的基本概念。iBATIS是一个轻量级框架,它的...
这个例子是一个很好的学习资源,可以帮助开发者理解如何在实际项目中整合Ajax和iBatis,提升Web应用的性能和用户体验。通过分析这些文件,我们可以深入了解两者的配合使用,以及在具体场景下的实现细节。
标题 "ibatis学习小例子" 暗示我们即将探讨的是关于Ibatis,一个轻量级的Java持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化了数据库操作。Ibatis提供了灵活的映射机制,避免了对JDBC的繁琐处理...
学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore学习ibatis很好的例子JPetStore
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得开发者能够更灵活地控制数据库操作。在这个“使用的iBatis简单例子”中,我们将深入探讨如何配置和使用iBatis进行数据库...
总结起来,"struts+spring+ibatis+mysql小例子"展示了如何将这四个组件有效整合,以实现一个完整的Web应用程序。这个例子涵盖了基础的Web交互,数据管理,以及更高级的功能,如分页和数据导出,对于初学者来说是一个...
这个"第一个ibatis例子"是一个典型的入门教程,旨在帮助初学者快速理解并掌握Ibatis的基本用法。 首先,Ibatis的核心组件包括XML配置文件、SqlMapConfig.xml、Mapper接口以及Mapper XML文件。在入门例子中,我们...
iBatis工程的简单例子,在eclipse上实现的,数据库是mysql数据库,里面的字段为CREATE DATABASE MYDB; use MYDB; Drop TABLE IF EXISTS `MYDB`.`student`; Create TABLE `MYDB`.`student` ( `name` varchar(40) NOT...
举个例子,假设我们有一个用户ID的列表,我们需要查询这些ID对应的所有用户信息,可以这样配置iBatis的映射文件: ```xml SELECT * FROM users WHERE id IN (" property="ids" open="," close=")"> #{ids[index...
**Ibatis例子解析** 在"ibatis简单例子"中,我们可能有两个主要的部分: 1. **test**目录:这通常包含测试类,用于运行和验证Ibatis配置和映射。在这些测试类中,可以看到如何实例化SqlSessionFactory,打开...
Ibatis,作为一个轻量级的持久层框架,以其灵活、易用的特点在Java开发领域广泛应用。本教程旨在通过一个完整的实例——"ibatistest2"项目,帮助开发者深入理解和掌握Ibatis的核心功能与实践技巧。 首先,Ibatis的...