`
chengyu2099
  • 浏览: 460056 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ibatis的增删改查 一对一、一对多等

阅读更多
项目需要,需要用ibatis,我花了一天时间学习,一天时间整理,希望能和刚入门的ibatis朋友,一起分享.....


/**
 * IbatisTest.java
 * com.isoftstone.cry.ibatisTest
 *
 * Function: TODO 
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 Mar 10, 2011 	
 *
 * Copyright (c) 2011,  All Rights Reserved.
*/

package com.isoftstone.cry.ibatis;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.isoftstone.cry.pojo.KeyBean;
import com.isoftstone.cry.pojo.LockBean;
/**
 * 
 * ClassName:IbatisDemo
 * Project: 
 * Company: isoftStone
 *
 * @author   
 * @version  
 * @since    Ver 1.1
 * @Date	 2011	Mar 14
 * @see
 */
public class IbatisDemo {
	public static void main(String[] args) throws IOException,SQLException{
//		读取配置文件
		Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
		SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
//		单表的增删改查
//		①、查询表集合
		/*List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList("lockNameSpace.getLockList");
		for(LockBean lb : lockList){
			System.out.println(
					lb.getId()+" "+lb.getLockName()+" "+lb.getLockFactory() 
			);
		}*/
//		②、查询表对象 by id
		/*LockBean lb = (LockBean)sqlMap.queryForObject("lockNameSpace.getLockObjectById",new Long(1));
		System.out.println(
				lb.getId()+" "+lb.getLockName()+" "+lb.getLockFactory()
		);*/
//		③、查询表对象 by like
		/*List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList("lockNameSpace.getLockObjectByLike",new String("南京"));
		for(LockBean lb : lockList){
			System.out.println(
					lb.getId()+" "+lb.getLockName()+" "+lb.getLockFactory() 
			);
		}*/
//		④、查询表对象 动态组合查询
//		test 前台http 获取属性值
	/*	LockBean lb = new LockBean();
		lb.setLockFactory("南京");
		lb.setLockType(new Integer(12));
		List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList
		("lockNameSpace.getLockListByDynamic",lb);
		for(LockBean lock : lockList){
			System.out.println(
					lock.getId()+" "+lock.getLockName()+" "+lock.getLockFactory() 
			);
		}*/
//		⑤、多表查询 - 一对一 关联查询 ... (所谓“n+1”Select问题)
		/*List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList
		("lockNameSpace.getLockList");
		for(LockBean lock : lockList){
			System.out.println(
					lock.getId()+" "+lock.getLockName()+" "+lock.getLockInfo().getLockMoney()
			);
		}*/
//		⑥、多表查询 - 一对一 (解决所谓“n+1”Select问题)
		/*List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList
		("lockNameSpace.getLockListOneToOne");
		for(LockBean lock : lockList){
			System.out.println(
					lock.getId()+" "+lock.getLockName()+" "+lock.getLockInfo().getLockMoney()
			);
		}*/
//		7、 多表查询 一对多(基本解决,有个bug.....)
		/*List<LockBean> lockList = (List<LockBean>)sqlMap.queryForList
		("lockNameSpace.getLockList");
		System.out.println("size = "+lockList.size());
		for(int i=0;i<lockList.size();i++)
		{
			LockBean lb = lockList.get(i);
			System.out.println(lb.getId()+" - ");
			for(int j=0;j<lb.getKeyList().size();j++){
				KeyBean kb = lb.getKeyList().get(j);
				System.out.println(kb.getLockId()+" "+kb.getId()+" "+kb.getKeyName());
			}
		}*/
//		8、插入操作 insert
		/*LockBean lb = new LockBean();
		lb.setLockName("lockName");
		lb.setLockFactory("lockFactory");
		lb.setLockColor("lockColor");
		lb.setLockType(new Integer(44));
		sqlMap.insert("lockNameSpace.insertLock",lb);
		System.out.println("insert success .... ");*/
		
//		9、批量插入操作 insert
		/*List<LockBean> lbList = new ArrayList<LockBean>();
		for(int i=0;i<5;i++){
			LockBean lb = new LockBean();
			lb.setLockName("lockName"+i);
			lb.setLockFactory("lockFactory"+i);
			lb.setLockColor("lockColor"+i);
			lb.setLockType(new Integer(44)+i);
			lbList.add(lb);
		}*/
//		结合spring批量处理
		/*SqlMapClientCallback callback = new SqlMapClientCallback() {
            public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {    
                executor.startBatch();
                for (T tObject : memberList) {               
                    executor.insert(statement, tObject); // statement在*MapSql.xml一条语句的id    
                }            
                executor.executeBatch();           
                return null;
            }
        };*/
//		ibatis 批量插入 - 删除跟新类似
		/*sqlMap.startTransaction();
		for(int i=0;i<lbList.size();i++){
			sqlMap.insert("lockNameSpace.batchInsertLock",lbList.get(i));
		}
		sqlMap.executeBatch();
		sqlMap.commitTransaction();
		sqlMap.endTransaction();
		System.out.println("批量插入完成................");*/
		
//		10、 删除操作 delete
		/*sqlMap.delete("lockNameSpace.deleteLock",100);*/
		
//		11、批量删除
		/*sqlMap.startTransaction();
		for(int i=51;i<100;i++){
			sqlMap.delete("lockNameSpace.deleteLock",i);
		}
		sqlMap.executeBatch();
		sqlMap.commitTransaction();
		sqlMap.endTransaction();
		System.out.println("批量删除完成................");*/
		
//		12、更新操作 update ..
		/*LockBean lb = new LockBean();
		lb.setLockName("updatelockName");
		lb.setLockColor("upColor");
		lb.setId(50);
		sqlMap.update("lockNameSpace.updateLock",lb);
		System.out.println("更新完成。。。。。");*/
//		13、批量更新
		/*List<LockBean> lbList = new ArrayList<LockBean>();
		for(int i=50;i<60;i++){
			LockBean lb = new LockBean();
			lb.setLockName("lockName"+i);
			lb.setLockFactory("lockFactory"+i);
			lb.setLockColor("Color"+i);
			lb.setLockType(new Integer(44)+i);
			lb.setId(i);
			lbList.add(lb);
		}
		
		sqlMap.startTransaction();
		for(int i=0;i<lbList.size();i++){
			sqlMap.update("lockNameSpace.updateLock",lbList.get(i));
		}
		sqlMap.executeBatch();
		sqlMap.commitTransaction();
		sqlMap.endTransaction();
		System.out.println("批量更新完成................");*/
	}
}

<?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="lockNameSpace">
	<!-- ibatis add,delete,modify,query demo -->
	<!-- 设计映射 -->
	<typeAlias alias="lock" type="com.isoftstone.cry.pojo.LockBean"/>
	<typeAlias alias="lockInformation" type="com.isoftstone.cry.pojo.LockInfoBean"/>
	<typeAlias alias="lockKey" type="com.isoftstone.cry.pojo.KeyBean"/>
	
	<resultMap id="lockResult" class="lock">
		<result property="id" column="id"/>
		<result property="lockName" column="lock_Name"/>
		<result property="lockColor" column="lock_Color"/>
		<result property="lockFactory" column="lock_Factory"/>
		<result property="lockType" column="lock_Type"/>
		<!-- 一对一设置 n+1 select 延时加载-->
		<result property="lockInfo" column="id" select="lockNameSpace.getLockVsInfo"/>
		<!-- 一对多 -->
		<result property="keyList" column="id" select="lockNameSpace.getKeyList"/>
		<!-- <result property="lockInfo" resultMap="resultLockInfo"/>-->
	</resultMap>
	
	<!-- 备注:resultMap 映射机制,resultClass 隐式映射(前提是javaBean属性和表字段column相同) -->
	<!-- query object list -->
	<!-- query all -->
	<select id="getLockList" resultMap="lockResult">
		<![CDATA[
		SELECT * FROM LOCK_
		]]>
	</select>
	<!-- query by id -->
	<select id="getLockObjectById" resultMap="lockResult">
		SELECT * FROM LOCK_ WHERE ID = #VALUE#
	</select>
	<!-- query by like -->
	<select id="getLockObjectByLike" resultMap="lockResult">
		SELECT * FROM LOCK_ WHERE LOCK_FACTORY LIKE '%$VALUE$%'
	</select>
	<!-- query dynamik -->
	<select id="getLockListByDynamic" resultMap="lockResult">
		SELECT * FROM LOCK_
		<dynamic prepend="WHERE">
			<isNotEmpty prepend="and" property="lockFactory">
				(lock_factory like '%$lockFactory$%')
			</isNotEmpty>
			<isNotNull prepend="AND" property="lockType">
				(lock_type = #lockType#)
			</isNotNull>
		</dynamic>
	</select>
	<!-- 多表查询 一对一 -->
	<!-- 关联lockInfo表属性对应数据库字段 -->
	<resultMap id="resultLockInfo" class="lockInformation">
		<result property="id" column="id"/>
		<result property="lockId" column="lock_Id"/>
		<result property="lockWeight" column="lock_Weight"/>
		<result property="lockMoney" column="lock_Money"/>
		<result property="lockRemark" column="lock_Remark"/>
	</resultMap>
	<!-- 一对一查询 SQL -->
	<!-- 
		在lock_表POJO中增加了 lockInfo对象
		result property="lockInfo" column="id" select="lockNameSpace.getLockVsInfo"
		用2次SQL查询实现 一对一 关联
		也就是所谓“n+1”Select问题(如果lock表有十几万数据,而lockinfo表就几条数据问题)
	 -->
	<select id="getLockVsInfo" resultMap="resultLockInfo">
		select * from lock_info where lock_id = #value#
	</select>
	<!-- 
	解决一对一的 n+1 问题 (待解决...)
	<select id="getLockListOneToOne" parameterClass="int" resultMap="lockResult">
		<![CDATA[
			SELECT l.*,i.* FROM lock_ l,lock_info i WHERE l.id=i.lock_id and l.id=#value#
		]]>
	</select>
	-->
	<!-- 一对多 (单向关联和双向关联)-->
	<resultMap class="lockKey" id="keyResultMap">
		<result property="id" column="id"/>
		<result property="keyName" column="key_Name"/>
		<result property="lockId" column="lock_Id"/>
	</resultMap>
	<select id="getKeyList" parameterClass="int" resultMap="keyResultMap">
		select * from key_ where LOCK_ID = #id#
	</select>
	<!-- insert -->
	<insert id="insertLock" parameterClass="lock">
		<!-- 获取序列 -->
		<selectKey keyProperty="id" resultClass="long">
			SELECT pagetest_seq.nextval AS id FROM dual 
		</selectKey>
		insert into lock_ (id,lock_Name,lock_Color,lock_Factory,lock_Type) values (#id#,#lockName#,#lockColor#,#lockFactory#,#lockType#)
	</insert>
	<!-- batch insert -->
	<insert id="batchInsertLock" parameterClass="lock">
		<!-- 获取序列 -->
		<selectKey keyProperty="id" resultClass="long">
			SELECT pagetest_seq.nextval AS id FROM dual 
		</selectKey>
		insert into lock_ (id,lock_Name,lock_Color,lock_Factory,lock_Type) values (#id#,#lockName#,#lockColor#,#lockFactory#,#lockType#)
	</insert>
	<!-- delete -->
	<delete id="deleteLock" parameterClass="int">
		delete from lock_ where id =#id#
	</delete>
	<!-- update -->
	<update id="updateLock" parameterClass="lock">
		update lock_ set lock_name=#lockName# , lock_color=#lockColor# where id=#id#
	</update>
	<!-- page -->
	<!-- batch -->
</sqlMap>

<?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">

<sqlMapConfig>
	<settings 
		cacheModelsEnabled="true" 
		enhancementEnabled="true" 
		lazyLoadingEnabled="true" 
		maxRequests="32" 
		maxSessions="10"
		maxTransactions="5" 
		useStatementNamespaces="true" />
		
    <transactionManager type="JDBC" commitRequired="false">
       <dataSource type="SIMPLE">
         <property name="JDBC.Driver" value="oracle.jdbc.OracleDriver"/>
         <property name="JDBC.ConnectionURL"
              value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"/>
         <property name="JDBC.Username" value="SYSTEM"/>
         <property name="JDBC.Password" value="suypower"/>
       </dataSource>
    </transactionManager>
    
    <sqlMap resource="com/isoftstone/cry/pojo/lock.xml"/>
</sqlMapConfig>
public class KeyBean implements Serializable{
	private long id ;
	private String keyName ;
	private long lockId ;
。。。。。。。get、set

----------------------------
public class LockBean implements Serializable{
	private long id ; // 主键
	private String lockName ; // 锁名称
	private String lockColor ; // 锁颜色
	private String lockFactory ; // 锁出厂公司
	private Integer lockType ; // 锁类型 - 枚举字段 (用封装类型,允许null)
	
	private LockInfoBean lockInfo ; // 一对一
	private List<KeyBean> keyList = new ArrayList<KeyBean>(); // 一对多

get、set
-----------------------------
public class LockInfoBean implements Serializable{
	private long id ;
	private long lockId ;
	private String lockWeight ;
	private String lockMoney ;
	private String lockRemark ;

分享到:
评论

相关推荐

    ibatis的的增删改查和一对一、一对多查询

    ibatis的的增删改查和一对一、一对多查询 ibatis的的增删改查和一对一、一对多查询 ibatis的的增删改查和一对一、一对多查询 完成的项目

    SSI(Struts2,Spring,Ibatis)集成实现用户增删改查

    加快了开发速度,但是也有一些不足之处,比如由于三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此,本文主要是对Strtus2、Spring、iBatis三个开源框架进行一个集成

    mybatis增删改查实例

    java mybatis实现的增删改查实例,包含表关系如一对一,一对多,多对多的sql标签结果集写法,常见的多参数传参方法等。

    Spingmvc+ibatis

    在网上下了很多的spingmvc+ibatis代码,但是没有一个跑的通,所以自己整了一个spingmvc+ibatis 的增删改查的示例,绝对能跑通,里面有我对某些注解的解释,非常适合初学者,就两分,算是给点功劳分了,网上大多数都...

    Ibatis学习指南,适合于初学者参考

    看了Ibatis很多的书,说了很多很多,过于复杂,本人先把Ibatis的增删改查所有的例子总结了一下,写了一个简单易懂的例子,对初学者入门学习有很大的帮助.简单易懂,下载解压后即可运行.

    ibatis 开发指南(pdf)

    26 一对多关联............................................................................................ 26 一对一关联...........................................................................

    springmybatis

    3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 ...

    基于maven项目的SSM框架与layu前端框架的代码

    1.Spring简介 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development ...可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。

    AppFramework_V1.0

    除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: &lt;br&gt;1、 ...

    AppFramework_V1.0_New

    除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: &lt;br&gt;1、 ...

    DBKING使用指南

    再比如LOB字段的处理,可以直接通过增、删、改、查等接口处理,遇到较大的LOB,也可以用流的方式处理,避免内存溢出的问题。再比如获取数据库序列,我们采用了统一的算法,不同的数据库都使用同一个接口来获取序列,...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: &lt;br&gt;1、 ...

Global site tag (gtag.js) - Google Analytics