- 浏览: 143955 次
- 来自: ...
文章分类
最新评论
-
nocb:
太感谢了, 我调了2天,始终找不到原因,
DataOutputStream writeBytes(String s) 中文乱码--ZT -
jbeduhai:
发贴能成功吗,我执行的怎么是说没有登录呢,前面登录是正常的,发 ...
ZT---httpclient如何保持session会话模拟登录后的操作 -
chwanga:
很详细啊,廓然开朗,感谢楼主
filter servlet 区别--ZT -
JMS_Exception:
xvm03 写道promzaid 写道.net 还是 java ...
Java的字符流和字节流 -
xvm03:
promzaid 写道.net 还是 java java
Java的字符流和字节流
ibatis持久化框架使用2007-08-25 10:26最近很火,所以我也下了一个用了一下。看看它与hibernate的异同。
在执行大量数据库操作时,我们的SQL语句必然要得到优化后才能使用。
而Hibernate给我们的条件实在是太局限,在做大型数据操作时候,难免会觉得不是那么快。
ibatis给我的感觉就是短而精悍,可以让我们自定义过程,相当一个半自动的框架。给于程序
员的控制性比较大,使用起来也是比较方便。
-------------------------------------------------------------------------------------
ibatis最主要需要3个jar包:
ibatis-sqlmap-2.jar 主要包
ibatis-common-2.jar 提供的命令
ibatis-dao-2.jar 简单DAO
我的工程结构是这样:
首先要编写一个读取配置文件的类:
我编写了一个IbatisFactory的工厂类,用于读取sqlmap-config.xml里面的配置
--------------------------------
package org.ibatis.model.config;
import java.io.IOException;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class IbatisFactory {
/*使用单例模式,让整个程序中只有一个实例*/
private final static SqlMapClient sqlMapper;
/*其中最主要就是获得SqlMapClient这个类,他相当hibernate中的session用来完成数据库操作*/
public static SqlMapClient newInstence(){
return sqlMapper;
}
/*使用静态块来加载读取配置文件的过程*/
static {
try {
java.io.Reader reader = Resources.getResourceAsReader("org/ibatis/model/config/sqlmap-config.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// Fail fast.
System.out.println("读出XML文件时异常");
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
}
}
-------------------------------------
sqlmap-config.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">
<!--
cacheModelsEnabled - 高速缓冲存储器
enhancementEnabled - 字节码增强
lazyLoadingEnabled - 延迟加载
maxRequests - 最大请求
maxSessions - 最大会话
maxTransactions - 最大事务数
useStatementNamespaces - 使用statement命名空间
-->
<sqlMapConfig>
<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="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL"
value="jdbc:mysql://127.0.0.1:3306/ibatis?characterEncoding=utf-8" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="" />
<property name="JDBC.DefaultAutoCommit" value="false" />
<property name="Pool.MaximumActiveConnections" value="10" />
<property name="Pool.MaximumIdleConnections" value="5" />
<property name="Pool.MaximumCheckoutTime" value="120000" />
<property name="Pool.TimeToWait" value="500" />
<property name="Pool.PingQuery" value="select 1 from ibatis" />
<property name="Pool.PingEnabled" value="false" />
<property name="Pool.PingConnectionsOlderThan" value="1" />
<property name="Pool.PingConnectionsNotUsedFor" value="1" />
</dataSource>
</transactionManager>
<!-- 指定POJO的配置文件的存放的地址 -->
<sqlMap resource="org/ibatis/model/entity/User.xml" />
</sqlMapConfig>
----------------------------------------
然后,我们通过数据库的表设计一个POJO:User.java
package org.ibatis.model.entity;
/**
* iBatis - User.java ----------------------------------------------
*
* @version 0.1 2007-8-24
* @author banseon ---------------------------------------------- 说明:
* 实体Bean 数据库映射表为T_USER
*/
public class User implements Entity {
private long id;
private String username;
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
String str = "Username:" + username + "\n";
str += "Address:" + address;
return str;
}
}
--------------------------------------
上面只是一个普通的POJO,最主要还是下面的配置文件User.xml文件
--------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<!-- 为了简化这里将类在配置文件中指定一个别名,方便调用 -->
<typeAlias alias="User" type="org.ibatis.model.entity.User"/>
<resultMap id="UserResult" class="User">
<result property="username" column="USERNAME"/>
<result property="address" column="ADDRESS"/>
</resultMap>
<select id="getUserbyUsername" resultMap="UserResult">
select * from T_USER WHERE USERNAME = #username#
</select>
<!--
这里提供了增删改查4种配置,里面都有id,这里的id主要起到一个唯一性。
给DAO中的方法调用,你可以编写多个insert配置,但id都要不同。
parameterClass 指的是调用的参数类 后面的名称是这个类的别名
每个操作的中间都带有SQL语句,其中代"#"的表示是参数。系统自动填充。
-->
<!-- Insert example, using the User parameter class -->
<insert id="insert" parameterClass="User">
insert into T_USER (ID,USERNAME,ADDRESS)
values (#id#,#username#,#address#)
</insert>
<!-- Update example, using the User parameter class -->
<update id="update" parameterClass="User">
update T_USER set
USERNAME = #username#,
ADDRESS = #address#
where
ID = #id#
</update>
<!-- Delete example, using an integer as the parameter class -->
<delete id="delete" parameterClass="int">
delete from T_USER where ID = #id#
</delete>
</sqlMap>
-------------------------------------
最后我们来编写一个DAO来测试一下:
-------------------------------------
package org.ibatis.model.dao;
import java.sql.SQLException;
import org.ibatis.model.config.IbatisFactory;
import org.ibatis.model.entity.User;
import com.ibatis.sqlmap.client.SqlMapClient;
public class UserDAO {
//通过工厂得到sqlMapClient实例
protected SqlMapClient sqlMapClient = IbatisFactory.newInstence();
/**
* 插入方法
*/
public void insert(User entity) {
try {
sqlMapClient.startTransaction();//开始事务
sqlMapClient.insert("insert", entity);//这里很总要,第一个参数是指定调用的哪个插入方法
sqlMapClient.commitTransaction();//提交事务
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sqlMapClient.endTransaction();//关闭事务
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}//插入方法结束
}
public static void main(String[] args) {
UserDAO _dao = new UserDAO();
org.ibatis.model.entity.User user = new org.ibatis.model.entity.User();
user.setId(0);
user.setAddress("123123123123");
user.setUsername("banseon123");
_dao.insert(user);
}
--------------------------------------
最后直接插入到数据库当中。
发表评论
-
ZT--Struts2的action之间如何传值?
2011-01-26 20:00 1377Struts2的action之间如何传值? ... -
关于cookie
2010-07-08 10:33 7621.servlet设定cookie后,另外一个servlet在 ... -
servlet load-on-startup
2010-07-05 15:59 1510servlet load-on-startup 真实含义 ... -
web压力测试工具介绍--ZT
2010-05-27 21:48 19531. LoadRunner:支持多种常 ... -
Servlet 工作流程--ZT
2010-04-28 09:35 16071.Servlet 工作流程 用户通过浏览器向Web服务 ... -
xfire 1.2 实现webservice完整流程--ZT
2010-04-27 11:09 958xfire 1.2 实现webservice完整流程 1.打 ... -
webservice 简单开发流程--ZT
2010-04-27 11:07 915webservice主要是以接口来访问服务的,所以我采用的步骤 ... -
请教javaeye的一个问题
2010-04-27 09:22 735javaeye是ruby写的?我同时打开了我的收藏中一个链接, ... -
web并发访问的问题--ZT
2010-04-26 15:25 1246转自:http://luckbubble.bl ... -
session 原理--ZT
2010-04-23 21:34 777session的引入: 鉴于http是无状态的协议,当完 ... -
两段关于MVC的比较,待验证--ZT
2010-04-23 20:09 759还是Spring MVC好 前两 ... -
struts1 和2 的比较--ZT
2010-04-23 19:24 634Struts2与Struts1的对比Action类:• Str ... -
注册流程,信息保存--ZT
2010-04-21 15:31 1100关于网站注册程序的 ... -
filter servlet 区别--ZT
2010-04-21 00:17 2245Filter介绍 Filter可认为是Servlet的一种 ... -
JSP页面传递对象
2010-03-18 16:54 1315JSP页面传递对象 两个jsp页面之间如何传递一个对象? ... -
转帖: weblogic
2010-03-04 12:39 737windows下开发环境部署web ... -
servlet,yui简单无刷新提交
2009-03-06 15:36 953JAVA代码: TestServlet: protected ... -
YUI入门学习
2009-03-06 00:52 1289刚开始学习,借鉴一下,有待实践体验一下: YAHOO.ut ... -
struts spring hibernate 简单介绍
2009-03-03 20:54 1285简单的说下 struts spring h ... -
web.xml配置详细解释(2)
2009-03-03 20:45 743web.xml配置详细解释(2 ...
相关推荐
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...
**iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...
标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...
本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。
**Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...
**ibatis入门** iBatis,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作,避免...
【标题】:Ibatis Ibatis入门教程 【描述】:Ibatis是一款优秀的持久层框架,它简化了Java应用与数据库之间的交互,通过提供一个映射SQL的XML或注解方式,使得开发人员能够将精力集中在业务逻辑上,而不是繁琐的...
自己写了一个Ibatis入门文件 JDK用的1.4 ibatis用的2.3.0 一定要注意版本问题,不然出现本本不兼容很费劲,我调了一上午,注意一定要用JDK1.4 ibatis2.3.0! 数据库自己建一张简单的表就行了,特别说明 只适合新手...
这个压缩包中的"ibatisJavaTest"项目应该是一个简单的Ibatis入门示例,可能包含了配置文件、映射文件、测试类等。通过分析和运行这个项目,你可以直观地了解Ibatis如何与数据库交互,以及如何编写和使用Mapper接口。...
**iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...
【标题】"ibatis入门学习经典案例"是一个针对初学者设计的教程,旨在帮助他们快速理解和掌握MyBatis(原名iBatis)这一流行的Java持久层框架。这个案例提供了完整的部署和运行环境,使学习过程更为直观和便捷。 ...
在这个"ibatis入门实例(全代码)"中,我们将探讨如何通过 Ibatis 实现对数据库的操作,包括数据库的初始化、SQL 映射文件的编写以及 Java 代码的集成。 首先,让我们了解数据库的准备工作。在实例中,提供了数据库...
**Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...
iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...通过这个简单的"iBatis入门Helloworld"项目,你可以快速掌握iBatis的基础操作,并为进一步学习和应用打下坚实基础。