ibatis2.0
基于STRUTS2.0+SPRING+IBATIS技术的WEB开发

基于STRUTS2.0+SPRING+IBATIS技术的WEB开发摘要:随着b/s多层应用已成为web开发的主流,本文首先介绍了struts2.0、spring、ibatis这三种框架,随后介绍了如何使用这三种框架组合来实现web开发。
关键词:b/s struts2.0 spring ibatis随着中国软件的发展,不同于c/s软件,用户不需要在每台电脑上安装客户端软件,b/s软件只需要在联网电脑的浏览器中输入网址就可以访问远程的信息,因此b/s软件越来越受到用户的欢迎。
b/s 软件的开发有很多种方式,有不同的语言,本文主要介绍在struts2.0、spring、ibatis三种框架组合的基础上实现高校宿舍智能化、信息化管理的研究与实现。
1、struts2.0struts2的体系使用了webwork的设计核心,并大量使用拦截器来处理用户请求,从而允许用户的业务逻辑控制器与servlet api分离。
从数据流图上来看,struts2与webwork相差不大,struts2同样使用拦截器作为处理,以用户的业务逻辑控制器为目标,创建一个控制器代理。
控制器代理负责处理用户请求,处理用户请求时回调业务控制器的execute方法,该方法的返回值将决定了struts 2将怎样的视图资源呈现给用户。
2、springspring是目前java ee 领域中比较流行的一个开源框架,它的目的是为了解决企业应用程序开发的复杂性。
spring框架的分层架构允许在不同的层次上选择各种组件,所以spring可以和hibernate、struts以及jsf等框架结合起来。
spring框架是一个分层架构,由7个定义良好的模块组成。
spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。
组成spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
3、ibatisibatis是以sql为中心的持久化层框架。
ibatis iterate用法

ibatis iterate用法摘要:1.iBatis 简介2.iBatis Iterate 用法概述3.iBatis Iterate 的具体用法4.示例代码5.总结正文:1.iBatis 简介iBatis 是一个流行的Java 持久层框架,它支持定制化SQL、存储过程以及高级映射。
iBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。
iBatis 可以使用简单的XML 或注解进行配置和原生映射,将接口和Java 的POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录。
2.iBatis Iterate 用法概述在iBatis 中,Iterate 是一个非常有用的标签,用于处理结果集的迭代。
使用Iterate 标签,可以方便地对结果集进行遍历和处理。
iBatis 的Iterate 用法主要分为两种:一种是在SQL 语句中使用,另一种是在Java 代码中使用。
3.iBatis Iterate 的具体用法(1) 在SQL 语句中使用在SQL 语句中使用Iterate,可以通过"foreach" 关键字实现。
以下是一个示例:```sql<select id="findAll" resultMap="userResultMap">SELECT * FROM userWHERE deleted = #{deleted}ORDER BY #{orderBy}</select><iterate open="(" close=")" conjunction="),("><select id="findUserByName" resultMap="userResultMap"> SELECT * FROM user WHERE name = #{name}</select></iterate>```(2) 在Java 代码中使用在Java 代码中使用Iterate,可以通过以下步骤实现:1) 创建一个ResultMap 对象,用于映射结果集到Java 对象。
ibatis parameterclass 类型

ibatis parameterclass 类型IBatis是一个持久层框架,它的目标是将数据库操作与Java代码解耦,提供了一种方便、直观的方式来进行SQL映射和数据库操作。
在IBatis中,参数类(Parameter Class)是一个很重要的概念,它用来传递参数给SQL语句。
在IBatis中,参数类有不同的类型,我们可以使用中括号来对参数类的类型进行分类。
这篇文章将详细介绍IBatis参数类类型,并逐步回答与之相关的问题。
一、什么是参数类?参数类是用来传递参数给SQL语句的Java对象。
在IBatis中,参数类是一个POJO(Plain Old Java Object),它的属性对应SQL语句中的参数。
二、IBatis参数类的类型有哪些?1. 单个参数类(Single Parameter Class)单个参数类指的是只有一个参数的情况,这个参数可以是任意类型。
在IBatis 的SQL语句中,可以使用"?"占位符来表示参数,参数类通过设置SQL语句的parameterClass属性进行绑定。
示例:javapublic class User {private String username;private String password;省略getter和setter方法}<sql id="getUserByUsernameAndPassword">SELECT *FROM userWHERE username = ?AND password = ?</sql><select id="getUser" parameterClass="User" resultClass="User"> {getUserByUsernameAndPassword}</select>2. 多个参数类(Multiple Parameter Classes)多个参数类指的是有多个参数的情况,这些参数可以是不同类型的。
ibatis中输入输出各种类型的参数分析及#与$区别

ibatis中输⼊输出各种类型的参数分析及#与$区别ibatis中输⼊/输出各种类型的参数分析及#与$区别(1)在数据库持久层的框架中,⼤家⼀定听过Hibernate的⼤名了吧,经典的SSH框架就有它的⼀份哦!可是我今天要说的却是另外⼀个持久层的框架,它就是 iBatis。
与Hibrenate相⽐,它的主要优势就是简单、⼩巧、轻量级,但是它的功能却丝毫不亚于Hibernate,下⾯让我们来看看 iBatis在项⽬中的应⽤吧!iBatis 确实很简单,它的⼯作原理就是通过SQL Map映射⽂件将sql语句和java对象对应起来(如:在利⽤对象属性的getter从属性中获取值,查询结果后,将各值⽤setter⽅法放到对象中).在iBatis中,sql语句是我们⼿⼯编写好的,这⼀点与Hibernate不同,Hibernate是通过映射java对象和数据库表字段来⾃动⽣成的sql语句。
(2)ibatis中的namespace与resultMap<sqlMap namespace="admin">在运⽤时如下:this.getSqlMapClient().update(“admin.update”, entity);分析:ibatis 配置⽂件中的useStatementNamespaces:是否使⽤Statement命名空间。
这⾥的命名空间指的是映射⽂件中,sqlMap节点的namespace属性,如:<sqlMap namespace="User">。
这⾥,指定了此sqlMap节点下定义的操作均从属于"User"命名空间。
在 useStatementNamespaces="true"的情况下,Statement调⽤需追加命名空间,如:sqlMap.update("User.updateUser",user);否则直接通过Statement名称调⽤即可,如:sqlMap.update("updateUser",user);好处:在实际应⽤中,利⽤namespace可以防⽌两个同名的⽅法⽽引起冲突。
ibatis xml 注入参数

ibatis xml 注入参数
iBATIS(现在称为MyBatis)是一个持久层框架,它允许开发人员使用XML文件或注解来映射Java对象和数据库记录。
在iBATIS中,XML注入参数是指在SQL查询中使用参数,并且这些参数是通过XML文件进行注入的。
XML注入参数可以用来动态地构建SQL查询,根据不同的条件传入不同的参数值。
在iBATIS的XML文件中,可以使用`<select>`, `<insert>`, `<update>`, `<delete>`等标签来定义SQL语句,而这些SQL语句可以包含参数。
参数的注入可以通过`#`或者`$`符号来实现。
使用`#`符号时,参数会被预编译,可以防止SQL注入攻击,但是只能用于传递值。
而使用`$`符号时,参数会被直接替换到SQL语句中,可以用于传递列名或表名,但是容易受到SQL注入攻击。
在使用XML注入参数时,需要注意防止SQL注入攻击。
可以通过参数预编译、输入验证、过滤特殊字符等方式来增强安全性。
此外,在编写SQL语句时,也要注意参数的合法性和准确性,以避免出现错误或安全隐患。
总之,iBATIS的XML注入参数是一种灵活而强大的功能,能够
帮助开发人员动态构建SQL查询,但在使用过程中需要注意安全性和准确性,以免出现潜在的问题。
ibatis 批量插入逻辑

ibatis 批量插入逻辑Ibatis是一种主流的ORM框架,可以帮助Java开发人员更轻松地访问数据库。
在实际开发中,我们经常需要将大量数据批量插入数据库。
对于这种情况,Ibatis提供了简单而有效的解决方案。
首先,我们需要准备好数据。
通常,我们会将需要插入的数据放在一个List或数组中。
这样,我们就能够很方便地操作这些数据。
接下来,我们需要创建一个SqlMapClient对象。
这个对象是Ibatis的核心类,负责管理数据库连接和执行数据库操作。
在创建这个对象时,我们需要指定mybatis-config.xml文件的路径。
现在,我们可以开始实现批量插入逻辑了。
首先,我们需要打开一个SqlMapSession对象。
这个对象允许我们执行一系列操作,并在完成后自动关闭连接。
然后,我们可以使用SqlMapSession的insert()方法将数据插入数据库中。
虽然我们可以使用一个循环来逐个插入数据,但这种方法非常低效。
相反,我们可以使用Ibatis的批处理功能来一次性插入多条数据。
使用批处理可以大大提高性能和效率。
以下是使用Ibatis批处理功能进行数据插入的示例代码:```javaSqlMapSession session = sqlMapClient.openSession();try {session.startBatch();for (Data data : dataList) {session.insert("insertData", data);}session.executeBatch();} finally {session.close();}```在上面的代码中,我们首先打开了一个SqlMapSession对象。
然后,我们调用startBatch()方法开始批处理。
接下来,我们使用一个循环遍历数据,并调用insert()方法插入每个数据。
当我们插入所有数据后,我们调用executeBatch()方法来执行批处理。
iBatis详细使用手册(.net版)

目录系列(1) 总览 (2)系列(2) 配置运行环境和日志处理 (4)系列(3) 映射文件基础 (11)系列(4) iBatisNet API基础 (14)系列(5) ParameterMap (19)系列(6) ResultMap (23)系列(1) 总览学习和使用Ibatisnet已经有一段时间了,前段时间也有写过一些与iBatis相关的Blog。
也答应过一些朋友要比较全面地介绍一下iBatis,分享自己的学习过程和使用经验,记录一些常见且容易出现的问题。
但由于前段时间一直在准备考试,而且当前的项目时间进度也比较紧,所以一直迟迟未能开始,在这里表示歉意,希望现在开始不会晚。
不过最近社区(博客园)好消息不断,我发现越来越多的人开始关注iBatis了,并且也有热心网友在极力推广,如果您已经对它已经有一些了解了,那么更推荐您去阅读ShanYou的文章,他写的文章可能更加适合您。
我本人也是一名初学者,这里记录的一些东西可能不会有很多的理论知识(理论知识还不够扎实),更多的可能是突出自己学习过程中需要很长时间来解决的一些问题,或者是个人认为特别重要,并且容易忘记的细节。
水平有限,出现错误在所难免,如在这过程中不当之处敬请愿谅,并请不啬赐教。
废话一翻后,进入今天的正题。
今天的主题是Introduction,非官方正式介绍的中文版,更多详细的介绍请参阅官方文档。
我们要使用它就必须要知道它是干什么用的,能为我们做哪些工作,开发效率如何,执行效率如何,技术难度怎么样。
提到iBatis,大家可能会与ORM技术联系起来。
是的,没错,它与ORM技术有一定程度上的联系,但是更确切地讲,它并不是一种很正统的ORM解决方案。
因为它不像NHi bernate那样,具备全自动的数据操作,包括查询,插入,更新,删除;也没有像它那样,与数据库的约束关系有紧密的联系(对NHibernate的了解不多,如果有不妥之处,希望能留下你们的臭鸡蛋,等着下回用)。
ibatis配置文件、映射文件详解

ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解1.sqlMapConfig.xml配置文件详解:Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<! DOCTYPE sqlMapConfig3.P UBLIC "-////DTD SQL Map Config 2.0//EN"4."/dtd/sql-map-config-2.dtd" >5.<sqlMapConfig>6.<settings7.cacheModelsEnabled ="true" <!--是否启用缓存机制-- >zyLoadingEnabled="true"<!-- 是否启用延迟加载机制 -->9.enhancementEnabled="true"<!-- 是否启用字节码增强机制 -->10.errorTracingEnabled="true"<!-- 是否启用错误处理机制 -->11.maxRequests="32"<!-- 最大并发请求数 -->12.maxSessions="10"<!-- 最大Session数 -->13.maxTransactions="5"<!-- 最大并发事务数 -->eStatementNamespaces="true"/><!-- 是否启用名称空间 -->15.<transactionManager type ="JDBC"><!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->16.<dataSource type ="SIMPLE"><!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->17.<property name ="JDBC.Driver"value ="com.mysql.jdbc.Driver"/>18.<property name ="JDBC.ConnectionURL"value ="jdbc:mysql://localhost/test"/>19.<property name ="ername"value ="root"/>20.<property name ="JDBC.Password"value ="wyq"/>21.<property name ="Pool.MaximumActiveConnections"value ="10"/><!-- 连接池维持的最大容量 -->22.<property name ="Pool.MaximumIdleConnections"value ="5"/><!-- 连接池允许挂起的最大连接 -->23.<property name ="Pool.MaximumCheckoutTime"value ="120000"/><!-- 连接被某个任务所允许占用的最大时间 -->24.<property name ="TimeToWait"value ="500"/><!-- 线程允许等待的最大时间 -->25.26.</dataSource>27.</transactionManager>28.<sqlMap resource ="com/wyq/map/userMap.xml"/>29.</sqlMapConfig>一transactionManager节点transactionManagerab 定义了ibatis的事务管理器,目前提供了以下几种选择:1) JDBC通过传统JDBC mit/rollback实现事务支持.2) JTA使用容器提供的JTA服务实现全局事务管理.3) EXTERNAL外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理.此外,通过Spring等轻量级容量实现事务的配置化管理也是一个不错的选择.二dataSource 节点dataSource 从属于transactionManager, 用于设定ibatis运行期使用DataSource属性.type 属性: dataSource 元素的type 属性指定了dataSource 的实现类型.可选项目:1) SIMPLE:SIMPLE 是ibatis 内置的dataSource 实现,其中实现了一个简单的数据库连接池机制,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.JDBC 使用数据库自己的事务(局部事务),connect.beginTranstion(), mit()等.2) DBCP基于Apache DBCP连接池组件实现的DataSource封装,当无容器提供DataSource服务时,建议使用该选项,对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.JTA :使用jta 事务管理器管理事务(全局事务),使用userTranstion对象.3) JNDI使用J2EE容器提供的DataSource实现, DataSource将通过指定的JNDI Name从容器中获取.对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.Ibatis 不控制事务,事务交由外部控制,一般在CTM,或spring托管事务中使用.JNDI的配置大部分都在应用服务器中进行,所以在ibatis中的配置相对简单(1)jdbc事务控制的JNDI配置Xml代码1.<transctionManager type ="JDBC">2.<dataSource type ="JNDI">3.<property name ="DataSource"value ="java:comp/env/jdbc/myDataSource"/>4.</dataSource>5.</transctionManager>(2)JTA事务控制的JNDI配置Xml代码1.<transctionManager type ="JTA">2.<property name ="UserTransaction"value ="java:/ctx/con/UserTransaction"/>3.<dataSource type ="JNDI">4.<property name ="DataSource"value ="java:comp/env/jdbc/myDataSource"/>5.</dataSource>6.</transctionManager>sqmMap节点指定了映射文件的位置,配置文件中可以定义多个sqlMap元素,以指定项目内所包含的所有映射文件.ibatis学习笔记(二)>>>>>>>sqlMapConfig.xml文件详解ibatis基础代码包括:1.ibatis实例配置一个典型的配置文件如下(具体配置项目的含义见后):<? xml version="1.0" encoding="UTF-8" ?><! DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0/"[url]/dtd/[/url]sql-map-config-2.dt<sqlMapConfig >< settingscacheModelsEnabled ="true"enhancementEnabled ="true"lazyLoadingEnabled ="true"errorTracingEnabled ="true"maxRequests ="32"maxSessions ="10"maxTransactions ="5"useStatementNamespaces ="false"/>< transactionManager type ="JDBC" >< dataSource type ="SIMPLE" >< property name ="JDBC.Driver" value ="com.p6spy.engine.spy.P6SpyDriver" />< property name ="JDBC.ConnectionURL" value="jdbc:mysql://localhost/sample" />< property name ="ername" value ="user" />< property name ="JDBC.Password" value ="mypass" />< 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 ACCOUNT" />< property name ="Pool.PingEnabled" value ="false" />< property name ="Pool.PingConnectionsOlderThan" value ="1" />< property name ="Pool.PingConnectionsNotUsedFor" value ="1" /></ dataSource ></ transactionManager >< sqlMap resource ="com/ibatis/sample/User.xml" /></ sqlMapConfig >⑴Settings 节点cacheModelsEnabled是否启用SqlMapClient上的缓存机制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ibatis学习文档一. ibatis介绍1.ibatis简介:ibatis一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。
最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
将“Internet”中象征性的“i”和abatis中的“batis”组合所以暗示了抵御Internet的意思。
相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。
ibatis需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。
同样的需求,ibatis的工作量比Hibernate要大很多。
类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而ibatis要把那些sql ma pping的地方一一修改。
可维护性方面,ibatis更好一些。
因为 iBatis 的 sql 都保存到单独的文件中。
而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。
如果你开发一个新系统,希望完全控制对象模型,进行数据库设计,那么Hibernate 是一个好的选择;如果你工作在一个很古老的数据库系统上,数据库设计非常糟糕,你又没有权利去改变数据库设计,那么iBATIS更合适一些。
因为ibatis是以SQL的方式开发,所以ibatis自身是不能动态生成表的,当然可以把SQL预先写入xml中,但是这种方式在开发中使用率并不高,并且以后不断的建表会比较繁琐,所以通常情况下,我们需要首先创建表,然后再使用ibatis来操作数据,在这方面,就没有hibernate建表那么容易。
二. ibatis简单入门2.ibatis快速开发:创建一个java项目,然后导入驱动包到lib文件夹下面,我们需要的驱动包有ibatis-2.3.4.726.jar和classes12.jar,然后添加一个SqlMapConfig.xml到src下面,在此xml中写入以下内容:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0//EN""/dtd/sql-map-config-2.dtd"><sqlMapConfig><transactionManager type="JDBC" commitRequired="false"><dataSource type="SIMPLE"><property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="JDBC.ConnectionURL"value="jdbc:oracle:thin:@localhost:1521:ORAC"/><property name="ername" value="test"/><property name="JDBC.Password" value="test"/></dataSource></transactionManager><sqlMap resource="com/cn/thinkmore/bean/BuMen_SqlMap.xml"/></sqlMapConfig>然后创建一个pojo,对应数据库中的一个表,例如:package .thinkmore.bean;public class BuMen {private String bid;private String bumenname;private String bumencode;public BuMen(){}public String getBumencode() {return bumencode;}public void setBumencode(String bumencode) {this.bumencode = bumencode;}public String getBid() {return bid;}public void setBid(String bid) {this.bid = bid;}public String getBumenname() {return bumenname;}public void setBumenname(String bumenname) {this.bumenname = bumenname;}}接着创建此pojo的映射xml文件,名字自定义,尽量pojo类名_SqlMap命名,我在这里的创建的POJO类名叫BuMen,所以我创建此xml文件叫BuMen_SqlMap.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapPUBLIC "-////DTD SQL Map 2.0//EN""/dtd/sql-map-2.dtd"><sqlMap><select id="selectAll" resultClass=".thinkmore.bean.BuMen">select bid,bumenname,bumencode from BuMen</select></sqlMap>最后,我们来创建一个带有main方法的测试类:package .thinkmore.bean;import java.io.IOException;import java.io.Reader;import java.sql.SQLException;import java.util.List;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;public class TestConsole {private static SqlMapClient sqlMapClient;static {try {Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();} catch (IOException e) {// Fail fast.throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);}}public static void main(String[] args) {try {List list = sqlMapClient.queryForList("selectAll");System.out.println(list);for(Object obj:list){BuMen bm = (BuMen)obj;System.out.println("bid="+bm.getBid()+"bumenname="+bm.getBumenname()+" bumencode="+bm.getBumencode());}}catch (SQLException e) {e.printStackTrace();}}}最后运行成功,这样我们就快速搭配起来了ibatis的环境了。
三. ibatis核心技术3.ibatis配置文件---sqlMapConfig.xml:下面,我们来详细介绍sqlMapConfig中的常用标签:<sqlMapConfig>配置文件的父标签,所有标签必须写在此标签内部。
<properties/>引用属性文件,用于引用标准的propertis属性文件。
在属性文件中定义的属性,可以作为变量在配置文件及其包含的所有映射文件中引用,例如:如果在属性文件中包含如下属性:url=jdbc:oracle:thin:@localhost:1521:ORAC那么就可以在xml文件中,这样调用:<property name=" JDBC.ConnectionURL" value="${url}"/><setting/>设置属性,用于配置和优化SqlMap实例的各种属性,此标签本身及其所有的属性都是可选的。
下面是它的内部属性介绍:maxRequests:同时执行SQL语句的最大线程数。
大于这个值的时候,后面的线程将被阻塞,直到有线程执行完成,不同的数据库有不同的限制值,但是任何数据库通常应该把此属性值设置为maxTransactions的10倍,并且总是大于maxSessions和maxTransactions,减少此值可能会提高性能(默认值 512)maxSessions:同一时间内活动的最大Session数,一个Session可以是代码请求的显式Session,也可以是当线程使用SqlMapClient实例(执行一条语句)自动获得的Session,它应该总是大于或者等于maxTransactions并且小于maxRequests,减小这个参数值可能会减少内存使用(默认值 128)maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数,大于这个值的线程将阻塞直到另一个线程退出。