- 浏览: 103235 次
- 性别:
- 来自: 上海
最新评论
-
karistino:
设定的进程数目不同时统计的关键字个数不一样
JAVA多线程读写文件范例 -
sd6292766:
在系统的服务进程中,找到“DCom Server Proces ...
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径 -
zyh3380433:
怎么解决?????
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径 -
sd6292766:
ribavnu 写道线程锁。求楼主继续霸气啊,来个把钱存到数据 ...
JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现) -
ribavnu:
线程锁。求楼主继续霸气啊,来个把钱存到数据库的,然后数据库实现 ...
JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现)
IBATIS是优秀的半ORM框架,原先一直在用HIBERNATE,不过对HIBERNATE过于强大但问题多多的ORM方案十分反感。遂翻阅了一下IBATIS。自己写了一个例子,不用SPRING+STRUTS。
首先去ibatis.apache.org下载最新的2.X的ibatis包,我用的是JAR包,没有用ibator插件调试安装。本地环境,ORACLE数据库,JDK1.6。
ibatis的核心是sqlmap框架。
新建一个JAVA工程即可,导入ibatisJAR包。我的是ibatis2.3.4-768.jar。新建一个XML文件,sql-map-config.xml,这个文件用于配置配置JDBC事务管理。
sql-map-config.xml
我们在表里有一张数据表 :
create table TAXPAYER
(
ID NUMBER(10),
NSR_NAME VARCHAR2(256),
ORG_ID NUMBER,
NSRSBH VARCHAR2(20),
GXSJ VARCHAR2(20)
)
数据请自行录入。
taxpayer对应的JAVABEAN:
接下来,我们新建一个taxpayer.xml,所有对taxpayer表的SQL操作,全部写在这个文件里,
taxpayer.xml:
这里写了一个需要有3个条件的查询,并且把条件适当复杂一下,用个LIKE条件。注意,这个SQL配置里面,我们用到了3个参数。下面我们要在调用该SQL的时候,分别给这3个参数赋值。阅读了一下ibatis的中文手册,我们可以采用MAP的方式赋值。下面开始写测试类,需要调用ibatis库下的sqlMap框架类来实现:
赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。
新增,修改,删除操作请自行完成。
使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。
首先去ibatis.apache.org下载最新的2.X的ibatis包,我用的是JAR包,没有用ibator插件调试安装。本地环境,ORACLE数据库,JDK1.6。
ibatis的核心是sqlmap框架。
新建一个JAVA工程即可,导入ibatisJAR包。我的是ibatis2.3.4-768.jar。新建一个XML文件,sql-map-config.xml,这个文件用于配置配置JDBC事务管理。
sql-map-config.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"> <sqlMapConfig> <settings cacheModelsEnabled="true" <!--全局性地启用或禁用SqlMapClient的所有缓存model。调试程序时使用--> enhancementEnabled="true" <!--全局性地启用或禁用运行时字节码增强,以优化访问Java Bean属性的性能,同时优化延迟加载的性能。--> lazyLoadingEnabled="true" <!--全局性地启用或禁用SqlMapClient的所有延迟加载。调试程序时使用。--> maxRequests="32" <!--同时执行SQL语句的最大线程数--> maxSessions="10" <!--同一时间内活动的最大session数--> maxTransactions="5" <!--同一时间内允许的最大SqlMapClient.startTransaction()的线程数--> useStatementNamespaces="false" /> <transactionManager type="JDBC" > <!--JDBC事务管理器--> <dataSource type="SIMPLE"> <propertyname="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.0.16:1521:orcl"/> <property name="JDBC.Username" value="procczg"/> <property name="JDBC.Password" value="procczg"/> </dataSource> </transactionManager> <sqlMap resource="ibatis/Taxpayer.xml" /> <!--这是引用所有的SQL配置文件,ibatis在此处声明要调用到的SQL文件--> </sqlMapConfig>
我们在表里有一张数据表 :
create table TAXPAYER
(
ID NUMBER(10),
NSR_NAME VARCHAR2(256),
ORG_ID NUMBER,
NSRSBH VARCHAR2(20),
GXSJ VARCHAR2(20)
)
数据请自行录入。
taxpayer对应的JAVABEAN:
public class Taxpayer { /** 业务字段 */ private int id; private String nsr_name; private String org_id; private String nsrsbh; private String gxsj; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNsr_name() { return nsr_name; } public void setNsr_name(String nsr_name) { this.nsr_name = nsr_name; } public String getOrg_id() { return org_id; } public void setOrg_id(String org_id) { this.org_id = org_id; } public String getNsrsbh() { return nsrsbh; } public void setNsrsbh(String nsrsbh) { this.nsrsbh = nsrsbh; } public String getGxsj() { return gxsj; } public void setGxsj(String gxsj) { this.gxsj = gxsj; } }
接下来,我们新建一个taxpayer.xml,所有对taxpayer表的SQL操作,全部写在这个文件里,
taxpayer.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="Taxpayer"> <statement id="getTaxpayer" resultClass="ibatis.Taxpayer"> select * from taxpayer where id = #id# and org_id = #org# and nsr_name like '%$nsrmc$%' </statement> </sqlMap>
这里写了一个需要有3个条件的查询,并且把条件适当复杂一下,用个LIKE条件。注意,这个SQL配置里面,我们用到了3个参数。下面我们要在调用该SQL的时候,分别给这3个参数赋值。阅读了一下ibatis的中文手册,我们可以采用MAP的方式赋值。下面开始写测试类,需要调用ibatis库下的sqlMap框架类来实现:
import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class IbatisTest { /** * @param args * author by 刘峰 * 2010-6-22下午04:47:21 */ public static void main(String[] args) { // TODO Auto-generated method stub SqlMapClient s = null; try { Reader reader = Resources.getResourceAsReader("ibatis/sql-map-config.xml"); s = SqlMapClientBuilder.buildSqlMapClient(reader); Map mParameter = new HashMap(); mParameter.put("id", new Integer(10533)); mParameter.put("org", new Integer(16)); mParameter.put("nsrmc", "纳税人名称"); Taxpayer t = (Taxpayer)s.queryForObject("getTaxpayer", mParameter); System.out.println(t.getId()); System.out.println(t.getNsr_name()); System.out.println(t.getNsrsbh()); System.out.println(t.getOrg_id()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。
新增,修改,删除操作请自行完成。
使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。
发表评论
-
转载:常见数据库字段类型与java.sql.Types的对应
2013-08-08 15:34 1788今天工作时候,刚好碰到类型转换错误的现象。找到一篇这样的列表文 ... -
maven+eclipse3.7+web工程开发+tomcat7.0搭环境的一些心得
2013-02-20 19:50 3790开头第一句话,过程真的很累,现在还存在一些细节问题。因 ... -
eclipse下使用ORACLE11GR1运行项目的一个要点记录
2013-02-20 00:06 1612参考资料:http://www.cnblogs.com ... -
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径
2012-12-12 17:08 20841对于JAVA在调用打印控件jacob时,会出现这样的报错提示。 ... -
转载:maven Nexus入门指南
2012-12-02 23:38 1155因本人电脑故障,需要重启,特地用博客记下地址,方便下次学习 ... -
JAVA多线程读写文件范例
2012-11-22 01:04 5516在写之前先声明,本文是基于之前在博客园网站上检索到的一 ... -
转载:JAVA开发人员成长路线
2012-11-18 17:24 1378转载地址:http://samter.it ... -
转载: 从JAVA多线程理解到集群分布式和网络设计的浅析
2012-10-25 23:58 1595转载地址:http://blog.csdn.net/tujiy ... -
mysql一个怪现象,百思不得其解
2012-10-03 17:42 891今天在JBOSS上配置JMS时,需要配置MYSQL 的 ... -
今天安装了apache服务器
2012-09-28 15:23 948今天因为我机器搭环境需要,安装了APACHE服务器 ... -
spring rmi的记录,转载的,吃完饭等下自己要用
2012-09-22 13:33 1033http://blog.csdn.net/j2ee_dev/a ... -
Spring的JdbcTemplate做个简单记录,方便记忆
2012-09-16 17:50 1043调用jdbcTemplate的UPDATE方法时,返回 ... -
转载:软件工程术语英语表达
2012-07-20 13:51 1277这里记录一下,常用的建模工具都是英文版的,这样方便校对 ... -
LOG4J工作中的一些个人收获
2012-06-21 23:38 1498继上一篇LOG4J一些工作中的学习总结之后,今天我在程序调试过 ... -
LOG4J一些工作中的学习总结
2012-06-20 12:19 1175首先声明:我这里使用的是apache的log4j日志框 ... -
转载:oschina网站的架构
2012-06-13 13:20 1487OsChina.NET 这个域名是在2008年8月16日申请的 ... -
转载:JFREECHART初级教程
2012-05-20 00:21 951JFreeChart是一组功能强大、灵活易用的Java绘图AP ... -
JS用open方法传中文乱码的解决方案,经测试,有效
2010-11-30 17:11 1295首先,在前台调用open打开对话框的位置,对要传值的中 ... -
JDK1.6存在一个方法错误,大家一起来交流下
2010-09-03 15:49 935今天在公司做项目时,用到这么一个功能:需要批量执行一些 ... -
JAVA多线程的探讨(收藏)
2010-08-07 22:30 997探索并发编程(一)------操作系统篇 探索并发编程(二) ...
相关推荐
1.程序功能说明: MATLAB实现多种群遗传算法(完整代码) 逼近C=[9,8,7,6,5,4,3,2,1]的9维向量. 2.代码说明:注释清晰,参数和变量说明清晰,方便更改、方便初学者使用,模块化编程,方便替换目标函数。运行环境Windows7及以上操作系统,MATLAB2014a及以上版本。 3.适用专业:计算机、电子信息工程、数学、物理、机械工程、土木工程等专业的大学生、研究生毕业设计,各类专业的课程设计、海外留学生作业等。 4作者介绍:资深算法工程师, 从事Matlab、Python算法仿真工作15年,专业研究遗传算法、粒子群算法、蚁群算法、鲸鱼算法、狼群算法等. 有问题联系QQ: 1579325979
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
小学元旦晚会PPT 模版
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
MATLAB中的语义分割技术探究与应用实践,matlab,语义分割 ,matlab; 语义分割,Matlab语义分割技术解析
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pulseaudio-10.0-6.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pulseaudio-10.0-6.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
"基于OpenCV与深度学习的人脸表情识别系统:利用Python与PyQt构建的可视化实时检测工具",基于OpenCV的人脸表情识别系统 相关技术:python,opencv,pyqt,深度学习 (请自行安装向日葵远程软件,以便提供远程帮助) 可编译为.exe文件。 软件说明:摄像头实时检测,加载照片,视频均可。 有基础的同学,可自行修改完善。 第一张和第二张为运行截图。 ,基于OpenCV的人脸表情识别系统; Python; OpenCV; PyQt; 深度学习; 实时检测; 照片和视频支持; 可编译为.exe文件; 运行截图。,"基于OpenCV与深度学习的人脸表情识别系统"
,步进方案,步进源码,两相步进矢量控制,超前角控制两种模式,成熟产品方案 支持特殊功能定制
三相储能PCS双向能量流动与Matlab仿真控制研究——基于SVPWM调制技术的建模与应用,三相储能PCS(Matlab仿真) 1.可实现Grid to Battery,Battery to Grid的能量双向流动。 2.本仿真基于Matlab仿真建立的模型, 3.采用SVPWM进行控制 ,三相储能PCS; 双向能量流动; Matlab仿真; SVPWM控制,三相储能PCS:能量双向流Matlab仿真模型(SVPWM控制)
deepseek部署教程.md
nodejs010-nodejs-ansicolors-0.3.2-1.el6.centos.alt.noarch.rpm
基于三菱PLC的四路抢答器控制系统原理及实践:含带解释的梯形图与IO分配图解,三菱 MCGS 基于PLC的四路抢答器控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,三菱MCGS; PLC四路抢答器; 控制系统; 梯形图接线图; 原理图图纸; IO分配; 组态画面。,三菱PLC四路抢答器控制系统原理图及组态画面解析
基于运动数据时空特征提取的人类运动片段.pdf
基于机器学习的选股模型及投资组合研究.pdf
ollama安装包。。。。。。。。。。。。。。。。。
nodejs010-nodejs-ansistyles-0.1.3-1.el6.centos.alt.x86_64.rpm
Screenshot_20250201_111207_com_tencent_mm_LauncherUI.jpg
基于时空Transformer的端到端的视频注视目标检测.pdf