- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ibatis简单实现与配置由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
那我们什么时候可以用到ibatis呢,我们用hibernate的时候会发现,有的时候hibernate不支持一些特别精确的查询,这个时候我们完全可以用到ibatis,因为他是半自动化的。一会我们可以看到,他的查询语句是我们在配置文件xml中写的。hibernate可以用到一些大型的项目当中,ibatis我们可以应用到一些小型的项目当中。 下面我们看下ibatis的具体实现,hibernate中,我们都知道有一个hibernate.cfg.xml配置文件,和另一个*.hbm.xml配置文件,在ibatis中,我们同样也有两个配置文件,一个为SqlMapConfig.xml另一个为*.xml下面我们具体的看下两个配置文件中的具体配置方法。 SqlMapConfig.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" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <!-- maxrequest 同时执行sql语句的最大条数 最好至少是maxTransactions的10倍数 而且大于maxSession maxTransactions 同时进入SqlMapClient.startTransaction()的 最大线程数 maxSession 同一时间段内 最大session数 大于maxTransactions 小于maxRequest cacheModelsEnabled 全局性的启用或者禁用SqlMapClient的所有缓存model true为启用 默认为启用 lazyLoadingEnabled 全局性的启用或者禁用SqlMapClient的所有延迟加载,调试程序使用 true为启用 默认为启用 enhancementEnabled 全局性的启用或者禁用运行时字节码增强 false为禁用 默认为禁用 useStatementNamespaces 如果启用本属性,必须使用权限定名来引用mappedstatement。 这是由sql-map的名称和mapped-statment的名称合成,默认为false 禁用。 --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/sample"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="admin"/> <!-- transactionManager元素为SQL Map配置事务管理服务 type指定所使用的管理器类型可以为JDBC JTA EXTERNAL datasource元素是transactionManager的一部分 为SQL Map数据源设置了一些列参数。 dataSource type为 是根据选择链接数据库的方式决定的 peoperty中的JDBC.Driver为 驱动 ConnectionURL为链接地址 Username为访问数据库的用户名 Password为访问数据库的密码 --> <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 sample" /> <property name="Pool.PingEnabled" value="false" /> <property name="Pool.PingConnectionsOlderThan" value="1" /> <property name="Pool.PingConnectionsNotUsedFor" value="1" /> <!-- MaximumIdleConnections数据库连接池中允许的挂起(idle)连接数 MaximumCheckoutTime数据库联接池中,连接被某个任务所允许占用的最大时间, 如果超过这个时间限定,连接将被强制收回。(毫秒) TimeToWait当线程试图从连接池中获取连接时,连接池中无可用连接可供使用, 此时线程将进入等待状态,直到池中出现空闲连接。 此参数设定了线程所允许等待的最长时间。(毫秒) PingQuery数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲 状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。 检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”, 如果执行此语句成功,连接池管理器将认为此连接处于可用状态 PingEnabled是否允许检测连接状态。 PingConnectionsOlderThan对持续连接时间超过设定值(毫秒)的连接进行检测。 Pool.PingConnectionsNotUsedFor对空闲超过设定值(毫秒)的连接进行检测。 --> </dataSource> </transactionManager> <sqlMap resource="com/kobe/map/User.xml" /> <!-- sqlmap源的 位置"包名/ .xml注意包中间有.的时候用/代替" --> </sqlMapConfig> <!-- 注意 1.0允许配置多个数据源,这引起了一些不好的实现,因此 2.0版本只允许一个数据源,要使用多个部署/配置参数,您最好使用多个属性文件, 不同的属性文件,或在创建SQL Map时传入不同的属性文件。 --> 里面的配置文件,对我们初级入门的人来说,主要的配置就是连接数据库的配置。 下面,我们在看下*.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="User"> <!-- 映射文件名称 --> <typeAlias alias="user" type="com.kobe.map.User"/> <!-- 给对应的类取别名 --> <!-- sql语句 <![CDATA[可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。 --> <select id="getUser" parameterClass="java.lang.String" resultClass="user"> <!-- parameterClass是参数类型 resultClass是结果的类型 如果sql语句包括参数, 那么格式是#id# --> <![CDATA[ select name,sex from t_user where name = #name#]]> </select> <select id="getAllUser" resultClass="user"> <![CDATA[ select name, sex from t_user where name = #name# ]]> </select> <update id="updateUser" parameterClass="user"> <![CDATA[ UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# ]]> </update> <delete id="deleteUser" parameterClass="user"> delete from t_user where id=#id# </delete> <insert id="insertUser" parameterClass="user"> <![CDATA[ insert into t_user (id,name,sex) values (#id#,#name#,#sex#) ]]> </insert> </sqlMap> 这里面配置文件我们可以看出来了。这里体现了ibatis半自动化的体现,因为他的sql语句并不是自动生成,而是我们自己写的,所以这样我们可以执行更精确的查询。 下面我们在看下Test实现 import java.sql.SQLException; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class Test { public static void main(String args[]){ //首先初始化iBatis获得一个SqlMapClient对象 String resource = "com/kobe/map/SqlMapConfig.xml"; com.ibatis.sqlmap.client.SqlMapClient sqlMap = null; try { java.io.Reader reader = com.ibatis.common.resources.Resources .getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); } // sqlMap系统初始化完毕,开始执行update操作 try { sqlMap.startTransaction(); User user = new User(); //user.setId(24); //user.setName("lzq"); //user.setSex(24); //sqlMap.insert("insertUser", user); //user.setId(24); //user.setName("kobelzq"); //user.setSex(24); //sqlMap.update("updateUser", user); //key为User xml中配置的id名字 键为bean的名字 user.setId(2); sqlMap.delete("deleteUser", user); sqlMap.commitTransaction(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { try { sqlMap.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } System.out.println("操作成功"); } } } 上面我加注释的地方,大家可以根据不同的需要,测试下不同的效果,我测试了三个效果,分别为增,删,改,查询大家要是感兴趣的话,可以自己写下。我这里少写了一个持久类,持久类的写法大家都熟悉,我就不在这里给大家展示了,无非就是get与set方法,大家可以自己实现一下.
最后此篇关于ibatis简单实现与配置的文章就讲到这里了,如果你想了解更多关于ibatis简单实现与配置的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在努力实现以下目标, 假设我有字符串: ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ) ) ) ) ) 我想编写一个正则
给定: 1 2 3 4 5 6
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
大家好,我卡颂。 Svelte问世很久了,一直想写一篇好懂的原理分析文章,拖了这么久终于写了。 本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一
身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母”X“。 与之匹配的正则表达式: ?
我们先来最简单的,网页的登录窗口; 不过开始之前,大家先下载jquery的插件 本人习惯用了vs2008来做网页了,先添加一个空白页 这是最简单的的做法。。。先在body里面插入 <
1、MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出
前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等
Go语言语法类似于C语言,因此熟悉C语言及其派生语言( C++、 C#、Objective-C 等)的人都会迅速熟悉这门语言。 C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的
我正在使用快速将 mkv 转换为 mp4 ffmpeg 命令 ffmpeg -i test.mkv -vcodec copy -acodec copy new.mp4 但不适用于任何 mkv 文件,当
我想计算我的工作簿中的工作表数量,然后从总数中减去特定的工作表。我错过了什么?这给了我一个对象错误: wsCount = ThisWorkbook.Sheets.Count - ThisWorkboo
我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果是,它会从中读取,如果不是,它会根据我为它制作的模板创建一个。 我在 ini 部分使用 Config::Simple。 我的问题是,如果
尝试让一个 ViewController 通过标准 Cocoa 通知与另一个 ViewController 进行通信。 编写了一个简单的测试用例。在我最初的 VC 中,我将以下内容添加到 viewDi
我正在绘制高程剖面图,显示沿路径的高程增益/损失,类似于下面的: Sample Elevation Profile with hand-placed labels http://img38.image
嗨,所以我需要做的是最终让 regStart 和 regPage 根据点击事件交替可见性,我不太担心编写 JavaScript 函数,但我根本无法让我的 regPage 首先隐藏。这是我的代码。请简单
我有一个非常简单的程序来测量一个函数花费了多少时间。 #include #include #include struct Foo { void addSample(uint64_t s)
我需要为 JavaScript 制作简单的 C# BitConverter。我做了一个简单的BitConverter class BitConverter{ constructor(){} GetBy
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是 Simple.Data 的新手。但我很难找到如何进行“分组依据”。 我想要的是非常基本的。 表格看起来像: +________+ | cards | +________+ | id |
我现在正在开发一个 JS UDF,它看起来遵循编码。 通常情况下,由于循环计数为 2,Alert Msg 会出现两次。我想要的是即使循环计数为 3,Alert Msg 也只会出现一次。任何想法都
我是一名优秀的程序员,十分优秀!