简单介绍一下IBatis
是什么:iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。
相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。
所谓“半自动”,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。
为什么:看到这里我想很多人想要问,为什么要弄一个半自动化的持久层框架,这里的话就要从hibernate的缺陷说起,虽然hibernate使得对数据的操作变得简单,但是如果数据库的数据处理量特别大,性能也要求很高,需要对sql语句进行优化才能够达到预期的要求,这个时候hibernate确实就是一个累赘了。所以在hibernate和jdbc之间多了一个选择,那就是IBatis,他使得开发人员不用在写繁琐的数据库访问代码,和字段读取操作。并且自己写sql语句。
怎么做:具体代码在附件中
1.建表
CREATE TABLE `users` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` varchar(255) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE PROCEDURE `sp_modify_user`(in_id Integer, in_age Integer)
begin
update users set age=in_age where id=in_id;
end;
2.建一个实体类
package com.ibatis.entity;
/**
*
* @author Administrator
* User实体类
*/
public class Users {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4.一个映射
<?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="Users">
<typeAlias alias="AllUsersParm" type="com.ibatis.entity.Users"/>
<select id="getUsers" resultClass="AllUsersParm">
SELECT id,name,age FROM USERS
</select>
<insert id="addUser">
insert into USERS(id,name,age) values(#id#,#name#,#age#)
</insert>
<select id="getUser" parameterClass="int" resultClass="com.ibatis.entity.Users">
SELECT id,name,age FROM USERS WHERE id = #id#
</select>
<delete id="deleteUser" parameterClass="int">
delete from users where id=#id#
</delete>
<update id="modifyUser" parameterClass="AllUsersParm">
update users
<dynamic prepend="set">
<isNotNull prepend="," property="name">
name=#name#
</isNotNull>
<isGreaterThan prepend="," property="age" compareValue="0">
age=#age#
</isGreaterThan>
</dynamic>
where id=#id#
</update>
<procedure id="updateUserAgeById" parameterClass="java.util.Map">
<!-- {call sp_modify_user($id$,$age$)} -->
call sp_modify_user($id$,$age$)
</procedure>
<!-- 分页 -->
<select id="pageUsers" parameterClass="java.util.Map" resultClass="AllUsersParm">
select * from users
<dynamic prepend="WHERE">
<isGreaterThan prepend="AND" property="age" compareValue="0">
age > $age$
</isGreaterThan>
</dynamic>
order by id limit $beginCount$,$pageSize$
</select>
<!--
二元条件元素
属性解释:
prepend:可被覆盖的sql语句组成部分,添加在语句的前面(可选)
property:被比较的属性(必须)
compareProperty:另一个用于和前者比较的属性(必须或选择comPareValue)
compareValue:用于比较的值(必须或选择compareProperty)
isEqual
isLessEqual
isLessThan
isGreaterThan
isGreaterEqual:比较属性值是否大于等于静态值或另一个属性值
isPropertyAvailable:检查是否存在该属性(存在parameter bean 的属性)
isNotPropertyAvailable:检查是否存在该属性(不存在parameter bean 的属性)
isNull:检查属性是否为null
isNotNull:检查属性是否不为null
isEmpty:检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(""或size()<1)
isNotEmpty:检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(不为""或size()>0)
if:<isNotEmpty prepend="and" property="name"> name=#name# </isNotEmpty>
isParameterPresent:检查是否存在参数对象(不为null)
isNotParameterPresent:检查是否不存在参数对象
-->
</sqlMap>
5.IBatis配置文件
<?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/ibatis/db.properties" />
<settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="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="${user}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="com/ibatis/Users.xml" />
</sqlMapConfig>
<!--
(文件元素说明:
resource:属性列表配置文件,以便用于数据库连接参数设置。
settings:
cacheModelsEnabled:数据高速缓存,提高程序性能,利用LRU(最近最久未使用)方法对使用过的数据保存在内存中。默认true
enhancementEnabled:指定是否用cglib中那些已优化的类来提高延迟加载的性能。默认ture
lazyLoadingEnabled:延迟加载,除非绝对需要,否则推迟加载的技术。默认true
maxRequests(已废弃):一次最多有多少个请求,默认为512
maxSessions(已废弃):任何时候只允许会话数,默认128
maxTransactions(已废弃):事务最大数目,默认32
useStatementNamespaces:在引用已映射语句时,是否需要使用限定名。默认false
transactionManager:处理所有的数据库事务。
dataSoutce:数据源工厂
property:配置项
sqlMap:配置SQLMAP文件
typeAlias:定义别名)
-->
6.后面的太长了还是下附件吧。。
分享到:
相关推荐
ibatIS调用存储过程是数据库操作中常见的一种技术,特别是在复杂的业务逻辑处理或数据批量操作时,存储过程能够提供更高的效率和更好的性能。本文将深入探讨如何在ibatIS框架中调用存储过程,以及涉及到的相关知识点...
### 操作数据库iBATIS查询详解 #### 一、iBATIS中的LIKE查询技巧 ...通过以上配置,iBATIS能够有效地管理与数据库的交互过程,并提供强大的查询功能。在实际开发过程中,根据项目需求合理配置这些参数是非常重要的。
根据提供的文件信息,标题为“ibatis调用存储过程”,主要关注的是如何使用ibatis框架来调用数据库中的存储过程。下面将详细解释ibatis框架的基本概念、存储过程的概念以及如何在ibatis中配置和执行存储过程。 ### ...
当我们需要调用数据库中的存储过程时,iBATIS也提供了一种简便的方法。本篇文章将详细介绍如何在iBATIS中调用存储过程,包括带参数和不带参数的存储过程,并通过一个具体的例子进行说明。 首先,存储过程是预编译的...
在Java开发中,使用iBATIS(现在称为MyBatis)作为持久层框架时,调用数据库的存储过程是一种常见的需求。本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库...
ibatis调用oracle存储过程分页
### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...
iBatis调用存储过程
在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...
在本项目中,"struts+spring_ibaits+调用Mysql存储过程实现增删改查",意味着开发者利用这三个框架来处理数据库中的增、删、改、查(CRUD)操作,并通过调用MySQL的存储过程来实现这些功能。存储过程是预编译的SQL...
iBatis 是一个SQL映射框架,它将数据库操作与业务逻辑分离,允许开发者编写自定义的SQL,存储过程,甚至完整的事务控制。在iBatis中,SQL语句通常写在XML配置文件中,通过MyBatis的Mapper接口与Java代码进行交互,...
iBatis,全称为MyBatis iBatis,是一个基于Java的持久层框架,它简化了数据库与应用程序之间的交互,避免了直接编写大量的SQL语句和手动处理结果集。在这个过程中,iBatis提供了一个SQL映射框架,允许开发者将SQL...
Ibatis是一个优秀的持久层框架,它简化了Java应用与数据库之间的数据操作,避免了传统的JDBC代码繁琐的过程。MySQL则是一款广泛使用的开源关系型数据库管理系统,以其高效、稳定和易用性而闻名。 首先,要实现...
在调用存储过程时,Ibatis允许开发者编写SQL语句或存储过程,然后在XML配置文件中定义这些操作,使得调用过程直观且易于维护。 Blazeds是一个Flash Remoting解决方案,主要用于Flex和Java之间的数据通信。通过...
iBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本教程中,你将深入理解如何利用iBatis与MySQL数据库进行交互,提升你的软件开发技能。以下是对每个部分的详细解释: 1. **iBatis...
iBatis是一个优秀的Java持久层框架,它主要负责数据库的交互,通过XML或注解方式配置和映射SQL,使得开发者能够将精力集中在业务逻辑上,而不是繁琐的JDBC代码。iBatis的核心思想是将SQL语句和Java代码分离,提供了...
本工程用于研究Ibatis和MySQL结合使用的方法 本工程编码方式:UTF-8 须执行的SQL语句: CREATE DATABASE `test`; USE `test`; DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` char(36) NOT NULL...
在MySql 5.2中,支持诸多高级特性,如存储过程、触发器、视图等,这些可以通过Ibatis的SQL映射文件进行调用。同时,MySql的InnoDB引擎提供事务支持,与Ibatis的事务管理无缝对接。 对于初学者,理解Ibatis的动态SQL...