iBatis 是一个 O/R Mapping
解决方案, iBatis 最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,
iBatis 是能满足你的要求又足够灵活的最简单的解决方案。iBatis中所有的DAO方法都只传一个值对象,复杂查询当然也不例外。另外对常见的1:1,1:N关系的支持不如Hibernate。Ibatis是应该属于面向SQL的O/RMapping 而Hibernate 则属于面向对象的O/R Mappding相对比较复杂。
一直听说Ibatis很简单,而且很不错。所以,今天就学习一下。
先建数据库和表:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: ibatis
Target Host: localhost
Target Database: ibatis
Date: 2007-4-24 1:02:15
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
Create TABLE `t_user` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) default NULL,
`password` varchar(10) default NULL,
`email` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
-- ----------------------------
-- Records
-- ----------------------------
Insert INTO `t_user` VALUES ('1', '小林', 'admin',
'test#baidu.com.cn');
Insert INTO `t_user` VALUES ('2', 'Eays, 'admin',
'test2#163.com');
Insert INTO `t_user` VALUES ('3', '8', '8888',
'test3#google.net');
我的Eclipse工程目录:
现在编写Ibatis的SqlMapConfig.xml文件
<?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">
<!-- Ibatis配置文件-->
<sqlMapConfig >
<!-- 加载连接数据库属性文件 -->
<properties resource="net/eays/maps/SqlMapConfig.properties" />
<!--
cacheModelsEnabled:是否启动SqlMapClient的缓存机制。
enhancementEnabled:是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,为延迟加载带来了及大的性能提升。
lazyLoadingEnabled:是否启用延迟加载机制。
maxRequests:最大并大请求数。
maxSessions:最大Session数,即当前最大允许的开发SqlMapClient数
maxTransactions:最大并发事务数。
-->
<settings
cacheModelsEnabled = "true"
enhancementEnabled = "true"
lazyLoadingEnabled = "true"
maxRequests = "32"
maxSessions = "10"
maxTransactions = "5"
useStatementNamespaces = "false"
/>
<!-- DataSource -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<!--JDBC驱动-->
<property name="JDBC.Driver" value="${driver}" />
<!--数据库URL-->
<property name="JDBC.ConnectionURL" value="${url}" />
<!--数据库用户名-->
<property name="JDBC.Username" value="${username}" />
<!--数据库密码-->
<property name="JDBC.Password" value="${password}" />
<!--不知道,在网站上查不出来,有时间再研究-->
<property name="JDBC.DefaultAutoCommit" value="true" />
<!--数据库连接池可维持的最大容量-->
<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 t_user"/>
<!--是否允许检查连接状态-->
<property name="Pool.PingEnabled" value="false"/>
<!--对持续连接超过设定值的连接进行检查-->
<property name="Pool.PingConnectionsOlderThan" value="1"/>
<!--对空闲超过设定值的连接进行检查-->
<property name="Pool.PingConnectionsNotUsedFor" value="1"/>
</dataSource>
</transactionManager>
<!--加载SqlMap文件-->
<sqlMap resource="net/eays/maps/User.xml" />
</sqlMapConfig>
编写配置文件类:SqlMapConfig.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatis
username=root
password=password
编写User.java类
package net.eays.maps;
/**
* @author 小林信仁
* @version 2007.4.23
*/
public class User {
private int id;
private String name;
private String password;
private String email;
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后编写User.java类关联映射的User.xml文件
<?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="Author">
<!--模块配置-->
<!--设置本映射文件中的别名-->
<typeAlias alias="user" type="net.eays.maps.User" />
<!--Statement配置-->
<select id="getUser" parameterClass="java.lang.String" resultClass="user">
<![CDATA[ select name,password,email from t_user where name = #name#]]>
</select>
<!--查询所有的记录-->
<select id="getAllUser" resultClass="user">
<![CDATA[ select * from t_user]]>
</select>
<!--修改-->
<update id="updateUser" parameterClass="user">
<![CDATA[ update t_user set name = #name#,password = #password# where id = #id#]]>
</update>
<!--删除-->
<delete id="deleteUser" parameterClass="user">
<![CDATA[ delete from t_user where id = #id# ]]>
</delete>
<insert id="insertUser" parameterClass="user">
<![CDATA[ insert into t_user(name,password,email) values(#name#,#password#,#email#)]]>
</insert>
</sqlMap>
编写测试类:
package com.eays;
import java.sql.*;
import java.io.Reader;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import net.eays.maps.User;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
/**
* @author 小林信仁
* @version 2007/4/23
*/
public class TestIbatis {
//首先初始化一个Ibatis获取一个SqlMapConfig.xml对象
public static SqlMapClient sqlMap = null;
TestIbatis(){
String resource = "net/eays/maps/SqlMapConfig.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.print("无价实例化SqlMapConfig对象");
}
}
public void updateUser(String name,String password,int id){
User user = new User();
user.setId(id);
user.setName(name);
user.setPassword(password);
try {
sqlMap.startTransaction();
sqlMap.update("updateUser", user);
sqlMap.commitTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.err.println("修改错误");
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static List getAllUser(){
List list = null;
try {
sqlMap.startTransaction();
list = sqlMap.queryForList("getAllUser");
sqlMap.commitTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
public boolean insertUser(String name,String password,String email){
boolean bool = false;
User user = new User();
user.setName(name);
user.setEmail(email);
user.setPassword(password);
try {
sqlMap.startTransaction();
sqlMap.insert("insertUser",user);
bool = true;
sqlMap.commitTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sqlMap.endTransaction();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bool;
}
public static void main(String[] args) {
TestIbatis testIbatis = new TestIbatis();
testIbatis.updateUser("易思网", "sydica", 2);
List list = TestIbatis.getAllUser();
Iterator iterator = list.iterator();
while(iterator.hasNext()){
User user = (User)iterator.next();
System.out.print("Email=" + user.getEmail() + " ");
System.out.print("Id=" + user.getId() + " ");
System.out.print("Password=" + user.getPassword() + " ");
System.out.println("Name=" + user.getName() + " ");
}
}
}
分享到:
相关推荐
Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...
《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...
iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的编写。Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的...
iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,将数据库操作与业务逻辑解耦,使得开发者可以更专注于业务逻辑的实现,而无需关心繁琐的SQL语句编写。本篇文章将深入探讨Ibatis API、文档...
### Ibatis3手册知识点概述 Ibatis3作为一款流行的持久层框架,在软件开发领域具有重要的地位。本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际...
### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...
Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...
**IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...
ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...
根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...
《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...
《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...
**Ibatis 指南** Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或...
在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...
【标题】:“C# IBatis IBatis基础 完整项目” 【描述】中提到的是一个基于C#的IBatis学习项目,适用于初学者。IBatis是一个流行的数据访问层框架,它允许开发者将SQL语句与应用程序代码分离,提高了代码的可维护性...
标题:ibatis教程 输入参数详解 描述:ibatis教程 输入参数详解 ibatis快速入门 标签:ibatis list 部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用...