项目需要,需要用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的的增删改查和一对一、一对多查询 完成的项目
加快了开发速度,但是也有一些不足之处,比如由于三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此,本文主要是对Strtus2、Spring、iBatis三个开源框架进行一个集成
java mybatis实现的增删改查实例,包含表关系如一对一,一对多,多对多的sql标签结果集写法,常见的多参数传参方法等。
在网上下了很多的spingmvc+ibatis代码,但是没有一个跑的通,所以自己整了一个spingmvc+ibatis 的增删改查的示例,绝对能跑通,里面有我对某些注解的解释,非常适合初学者,就两分,算是给点功劳分了,网上大多数都...
看了Ibatis很多的书,说了很多很多,过于复杂,本人先把Ibatis的增删改查所有的例子总结了一下,写了一个简单易懂的例子,对初学者入门学习有很大的帮助.简单易懂,下载解压后即可运行.
26 一对多关联............................................................................................ 26 一对一关联...........................................................................
3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 ...
1.Spring简介 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development ...可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。
除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: <br>1、 ...
除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: <br>1、 ...
再比如LOB字段的处理,可以直接通过增、删、改、查等接口处理,遇到较大的LOB,也可以用流的方式处理,避免内存溢出的问题。再比如获取数据库序列,我们采用了统一的算法,不同的数据库都使用同一个接口来获取序列,...
除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: <br>1、 ...