- 浏览: 140714 次
- 来自: ...
文章分类
最新评论
-
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 1343Struts2的action之间如何传值? ... -
关于cookie
2010-07-08 10:33 7241.servlet设定cookie后,另外一个servlet在 ... -
servlet load-on-startup
2010-07-05 15:59 1476servlet load-on-startup 真实含义 ... -
web压力测试工具介绍--ZT
2010-05-27 21:48 19111. LoadRunner:支持多种常 ... -
Servlet 工作流程--ZT
2010-04-28 09:35 15841.Servlet 工作流程 用户通过浏览器向Web服务 ... -
xfire 1.2 实现webservice完整流程--ZT
2010-04-27 11:09 923xfire 1.2 实现webservice完整流程 1.打 ... -
webservice 简单开发流程--ZT
2010-04-27 11:07 883webservice主要是以接口来访问服务的,所以我采用的步骤 ... -
请教javaeye的一个问题
2010-04-27 09:22 699javaeye是ruby写的?我同时打开了我的收藏中一个链接, ... -
web并发访问的问题--ZT
2010-04-26 15:25 1215转自:http://luckbubble.bl ... -
session 原理--ZT
2010-04-23 21:34 743session的引入: 鉴于http是无状态的协议,当完 ... -
两段关于MVC的比较,待验证--ZT
2010-04-23 20:09 735还是Spring MVC好 前两 ... -
struts1 和2 的比较--ZT
2010-04-23 19:24 606Struts2与Struts1的对比Action类:• Str ... -
注册流程,信息保存--ZT
2010-04-21 15:31 1054关于网站注册程序的 ... -
filter servlet 区别--ZT
2010-04-21 00:17 2213Filter介绍 Filter可认为是Servlet的一种 ... -
JSP页面传递对象
2010-03-18 16:54 1278JSP页面传递对象 两个jsp页面之间如何传递一个对象? ... -
转帖: weblogic
2010-03-04 12:39 699windows下开发环境部署web ... -
servlet,yui简单无刷新提交
2009-03-06 15:36 926JAVA代码: TestServlet: protected ... -
YUI入门学习
2009-03-06 00:52 1256刚开始学习,借鉴一下,有待实践体验一下: YAHOO.ut ... -
struts spring hibernate 简单介绍
2009-03-03 20:54 1254简单的说下 struts spring h ... -
web.xml配置详细解释(2)
2009-03-03 20:45 712web.xml配置详细解释(2 ...
相关推荐
简单的Ibatis入门例子,让你踏入Ibatis大门
最简单的iBatis入门例子
NULL 博文链接:https://qing393260529.iteye.com/blog/459723
iBATIS入门学习
ibatis入门教程
NULL 博文链接:https://vincent-yy.iteye.com/blog/325670
ibatis入门与ibatis迭代的用法
NULL 博文链接:https://wcp88888888.iteye.com/blog/1328456
ibatis入门到精通详细讲解,配以生动详细的实例,让你用最少的时间学以致用
ibatis入门,这里讲述了初级和高级的所有ibatis数据库连接的配置
iBATIS 入门讲解 程序源码 iBATIS开发指南
ibatis入门级完整示例,包含ibatis-2.3.4.726.jar、commons-logging-1.0.4.jar、mysql-connector-java-3.1.10-bin.jar和建表语句。
包含IBatis入门教程和开发指南的PDF格式,详细介绍了IBATIS的架构和原理,安装和配置,以及如何使用IBATIS。
ibatis 入门级教程,里面包含了Ibatis的增删改查操作,采用的数据库是Oracle,表使用的是emp表,同时包含了Ibatis的主键生成策略,里面注释写得比较详细,非常适合Ibatis入门学习
iBATIS框架学习:iBATIS入门教程
ibatis入门教程,ibatis开发指南 内含两份文档
简单的ibatis入门实例(全代码),附带数据库以及表格创建语句,适合新手学习