`
pzh244658240
  • 浏览: 11634 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

IBatis查删改查与调用存储过程 mysql数据库

阅读更多

 

 

简单介绍一下IBatis
是什么iBATIS一词来源于“internet”“abatis”的组合,是一个由Clinton Begin2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。


iBATIS提供的持久层框架包括SQL MapsData Access ObjectsDAO),同时还提供一个利用这个框架开发的JPetStore实例。

相对HibernateApache OJB一站式”ORM解决方案而言,ibatis 是一种半自动化ORM实现。 

所谓半自动,可能理解上有点生涩。纵观目前主流的 ORM,无论 Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过 Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对 SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的 SQL 并调用 JDBC 接口加以执行。 


为什么看到这里我想很多人想要问,为什么要弄一个半自动化的持久层框架,这里的话就要从hibernate的缺陷说起,虽然hibernate使得对数据的操作变得简单,但是如果数据库的数据处理量特别大,性能也要求很高,需要对sql语句进行优化才能够达到预期的要求,这个时候hibernate确实就是一个累赘了。所以在hibernatejdbc之间多了一个选择,那就是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.后面的太长了还是下附件吧。。

 

0
0
分享到:
评论
2 楼 pzh244658240 2012-03-02  
ssy341 写道
SqlMapClientBuilder 是什么啊?报错啊

对于这种问题。还是没有理解编译java是怎么实现的呀。。包呀。兄弟。导包,网上一大堆。
1 楼 ssy341 2012-03-01  
SqlMapClientBuilder 是什么啊?报错啊

相关推荐

Global site tag (gtag.js) - Google Analytics