- 浏览: 104516 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
刀心60:
"查看当前虚拟机VBxoManage list vm ...
VBoxManage 命令详解 -
tjzx:
...
jquery上传图片预览 -
abc3720:
不行的啊 我试了下
Dialect does not support identity key generation -
tourney:
...
Dialect does not support identity key generation -
kfw5313:
我需要 邮箱是kfw5313@yahoo.com.cn,谢谢! ...
struts2的国际化!配置心得
前两天我一个朋友说,他们想改用ibatis开发,我想ibatis真的比hibernate还要好用吗?所以就抽时间简单写了一个测试项目,使用ibatis实现增删该查,翻页,觉得效果开可以,用起ibatis不是舒服,我想应该使用hibernate用习惯的缘故吧!今天就把我的使用心得给大家分享一下吧!有说的不对的地方望大家多多提出意见!
首先ibatis和hibernate几乎是截然不同的,在ibatis里面是把dao层的方法和sql语句之间形成一个映射关系,好像封装了jdbc的预执行通道PreparedStatement。
下面是sql配置文件
下面是方法
=#userid#其中userid对应的就是dao方法中的参数名字。
他们之间就这样对应起来的!一个方法一个sql配置详细可以看下面的例子
1.下面是ibatis的核心配置文件
2.下面是sql语句配置映射文件
3.下面dao接口
4.下面是dao实现类
5.测试类
6.接下来是pojo
首先ibatis和hibernate几乎是截然不同的,在ibatis里面是把dao层的方法和sql语句之间形成一个映射关系,好像封装了jdbc的预执行通道PreparedStatement。
下面是sql配置文件
<typeAlias alias="userInfo" type="com.md.ibates.pojo.UserInfo" /> <!-- 查询单个用户 --> <select id="findUserInfo" parameterClass="string" resultClass="userInfo" > <![CDATA[select *from usertable where userid=#userid#]]> </select>
下面是方法
public UserInfo getUserInfo(String userid) { try { return (UserInfo) this.queryForObject("findUserInfo", userid); } catch (SQLException e) { e.printStackTrace(); } return null; }
=#userid#其中userid对应的就是dao方法中的参数名字。
他们之间就这样对应起来的!一个方法一个sql配置详细可以看下面的例子
1.下面是ibatis的核心配置文件
<?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"> <!-- ibatis核心配置文件 --> <sqlMapConfig> <!-- cacheModelsEnabled 是否启用SqlMapClient上的缓存机制。 建议设为"true" enhancementEnabled 是否针对POJO启用字节码增强机getter/setter的调用效能,避免Reflect所带来的性能开销。同时,这也为Lazy Loading带来提升。 建议设为"true" errorTracingEnabled 是否启用错误日志,在开发期间建议设为"true" 以方便调试 lazyLoadingEnabled 是否启用延迟加载机制,建议设为"true" maxRequests 最大并发请求数(Statement并发数) maxTransactions 最大并发事务数 maxSessions 最大Session数。即当前最大允许的并发SqlMapClient数。 useStatementNamespaces 是否使用Statement命名空间。 注:这里的命名空间指的是映射文件中,sqlMap节的namespace属性,如在上例中针对t_use 表的映射文件sqlMap节点: <sqlMap namespace="User"> 这里,指定了此sqlMap节点下定义的操作均属于"User"命名空间。 在useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",user); 否则直接通过Statement名称调用即可,如: sqlMap.update("updateUser",user); 但请注意此时需要保证所有映射文件中,Statement定义无重名。 --> <settings enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <!-- transactionManager节点定义了ibatis的事务管理器,目前提供了以下几种选择: type属性: JDBC 通过传统JDBC Connection.commit/rollback实现事务支持。 JTA 使用容器提供的JTA服务实现全局事务管理。 EXTERNAL 外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自 动的事务管理机制。此时ibatis将把所有事务委托给外部容器进行管理。 dataSource 从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性。 type属性:dataSource节点的type属性指定了dataSource的实现类型。 可选项目: SIMPLE: 是ibatis内置的dataSource实现,其中实现了一个简单的 数据库连接池机制,对应 ibatis 实现类为 com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。 DBCP:基于Apache DBCP连接池组件实现的DataSource封装,当无容器提 供DataSource服务时,建议使用该选项,对应ibatis实现类为 com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。 JNDI:使用J2EE容器提供的DataSource实现,DataSource将通过指定 的JNDI Name从容器中获取。对应 ibatis实现类为 com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。 dataSource的子节点说明(SIMPLE&DBCP): JDBC.Driver JDBC 驱动。 如:org.gjt.mm.mysql.Driver JDBC.ConnectionURL 数据库URL。 如:jdbc:mysql://localhost/sample 如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多Statement支持。 JDBC.Username 数据库用户名 JDBC.Password 数据库用户密码 Pool.MaximumActiveConnections 数据库连接池可维持的最大容量。 Pool.MaximumIdleConnections 数据库连接池中允许的挂起(idle)连接数。 JNDI由于大部分配置是在应用服务器中进行,因此ibatis中的配置相对简单分别使用JDBC和JTA事务管理的JDNI配置: 使用JDBC事务管理的JNDI DataSource配置 <transactionManager type ="JDBC" > <dataSource type ="JNDI"> <property name ="DataSource" value ="java:comp/env/jdbc/myDataSource" /> </dataSource > </transactionManager > <transactionManager type ="JTA" > <property name ="UserTransaction" value ="java:/ctx/con/UserTransaction" /> <dataSource type ="JNDI" > <property name ="DataSource" value ="java:comp/env/jdbc/myDataSource" /> </dataSource > --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mydata" /> <property name="JDBC.Username" value="root" /> <property name="JDBC.Password" value="123456" /> <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/md/ibaties/daoImpl/maps/UserDaoImpl.xml" /> </sqlMapConfig>
2.下面是sql语句配置映射文件
<?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"> <!-- 查询单个用户dao方法对应sql配置 --> <sqlMap> <typeAlias alias="userInfo" type="com.md.ibates.pojo.UserInfo" /> <!-- 查询单个用户 --> <select id="findUserInfo" parameterClass="string" resultClass="userInfo" > <![CDATA[select *from usertable where userid=#userid#]]> </select> <!-- 查询所有用户 【当parammeterClass=java.util.ArrayList是如何取参数】 --> <select id="getAllUserInfo" parameterClass="java.util.List" resultClass="userInfo" > select *from usertable where userid not in <iterate open="(" close=")" conjunction="," > #userids[]# </iterate> </select> <!-- 翻页查询用户 【当parammeterClass=java.util.HashMap是如何取参数】 --> <select id="getAllUserInfoPage" parameterClass="java.util.Map" resultClass="userInfo" > <![CDATA[select *from usertable where username like #nu# and address like #nf# ]]> </select> <!-- 删除用户 --> <delete id="deleteUserInfo" parameterClass="string"> <![CDATA[delete from usertable where userid=#userid# ]]> </delete> <!-- 添加用户 --> <insert id="addUserInfo" parameterClass="userinfo" > <![CDATA[ insert into usertable (userid,username,password,sex,age,birthday,address) values (#userid#,#username#,#password#,#sex#,#age#,#birthday#,#address#)]]> </insert> <!--修改用户 --> <insert id="updateUserInfo" parameterClass="userinfo" > <![CDATA[ update usertable set username=#username#,password=#password#,sex=#sex#,age=#age#,birthday=#birthday#,address=#address# where userid=#userid#]]> </insert> </sqlMap>
3.下面dao接口
package com.md.ibaties.dao; import java.util.List; import java.util.Map; import com.md.ibates.pojo.UserInfo; /** *用户dao实现接口 * @author 马东 * 2010-1-13 * 转载请注明出处 */ public interface UserDao { /** * 获得单个用户 * @param userid * @return */ public UserInfo getUserInfo(String userid); /** * 获得一个用户集合 * @param userids * @return */ public List<UserInfo> getAllUserInfo(List<String> userids ); /** * 删除一个用户 * @param userid */ public void deleteUserInfo(String userid); /** * 添加一个用户 * @param userinfo */ public void addUserInfo(UserInfo userinfo); /** * 修改用户 * @param userinfo * @return */ public void updateUserInfo(UserInfo userinfo); /** * 翻页查询 * @param currpage * @param pageSize * @param conds * @return */ public List<UserInfo> getUserInfoPage(int currpage,int pageSize,Map<String,Object> conds); }
4.下面是dao实现类
package com.md.ibaties.daoImpl; import java.sql.SQLException; import java.util.List; import java.util.Map; import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl; import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate; import com.md.ibates.pojo.UserInfo; import com.md.ibaties.dao.UserDao; /** *用户dao实现类 * @author 马东 * 2010-1-13 * 转载请注明出处 */ public class UserDaoImpl extends SqlMapClientImpl implements UserDao{ public UserDaoImpl(SqlMapExecutorDelegate delegate) { super(delegate); } public UserInfo getUserInfo(String userid) { try { return (UserInfo) this.queryForObject("findUserInfo", userid); } catch (SQLException e) { e.printStackTrace(); } return null; } public void addUserInfo(UserInfo userinfo) { try { this.startTransaction(); this.insert("addUserInfo", userinfo); this.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { this.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } } public void deleteUserInfo(String userid) { try { this.startTransaction(); this.delete("deleteUserInfo", userid); this.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { this.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } } public void updateUserInfo(UserInfo userinfo) { try { this.startTransaction(); this.update("updateUserInfo", userinfo); this.commitTransaction(); } catch (SQLException e) { e.printStackTrace(); }finally{ try { this.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } } @SuppressWarnings("unchecked") public List<UserInfo> getAllUserInfo(List<String> userids ) { try { return (List<UserInfo>)this.queryForList("getAllUserInfo",userids); } catch (SQLException e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public List<UserInfo> getUserInfoPage(int currpage, int pageSize, Map<String,Object> conds) { try { return this.queryForList("getAllUserInfoPage", conds,(currpage-1)*pageSize, pageSize); } catch (SQLException e) { e.printStackTrace(); } return null; } }
5.测试类
package com.md.ibaties.test; import java.io.Reader; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl; import com.md.ibates.pojo.UserInfo; import com.md.ibaties.dao.UserDao; import com.md.ibaties.daoImpl.UserDaoImpl; /** * 测试类 * @author 马东 * 2010-1-13 * 转载请注明出处 */ public class Demo { /** * @param args */ public static void main(String[] args) { String resource="SqlMapConfig.xml"; SqlMapClientImpl sqlMap =null; Reader reader; try { reader = Resources.getResourceAsReader(resource); sqlMap =(SqlMapClientImpl)SqlMapClientBuilder.buildSqlMapClient(reader); UserDao user=new UserDaoImpl(sqlMap.delegate); //测试获得单个用户 UserInfo userinfo=user.getUserInfo("1"); System.out.println("-----测试单个用户查询-----"); System.out.println(userinfo+"\n"); //测试用户删除 System.out.println("-----测试用户删除-----"); user.deleteUserInfo("12");//删除用户 // 测试用户添加 System.out.println("-----测试用户添加-----"); user.addUserInfo(new UserInfo("张三","123456","男",20,"西安",new Date()));//添加用户 // 测试用户查看所有的用户(list参数的取法,详见userDaoImpl.xml) System.out.println("-----测试用户查看所有的用户(list参数的取法,详见userDaoImpl.xml)-----"); List<String> ids= new ArrayList<String>(); ids.add("1"); ids.add("19"); List<UserInfo> userinfos=user.getAllUserInfo(ids);//获得所有的用户 System.out.println(userinfos); System.out.println(userinfos.size()); // 测试用户查看所有的用户(翻页)(Map参数的取法,详见userDaoImpl.xml) System.out.println("-----测试用户查看所有的用户(翻页)(Map参数的取法,详见userDaoImpl.xml)-----"); Map<String,Object> conds= new HashMap<String,Object>(); conds.put("nu","%dd%"); conds.put("nf","%xi%"); userinfos=user.getUserInfoPage(0, 5, conds);//翻页查询数据; System.out.println(userinfos.size()); System.out.println(userinfos); } catch (Exception e) { e.printStackTrace(); } } }
6.接下来是pojo
package com.md.ibates.pojo; import java.util.Date; /** *用户pojo类 * @author 马东 * 2010-1-13 * 转载请注明出处 */ public class UserInfo implements java.io.Serializable { // Fields /** * */ private Integer userid; private String username; private String password; private String sex; private Integer age; private String address; private Date birthday; // Constructors /** default constructor */ public UserInfo() { } /** full constructor */ public UserInfo(String username, String password, String sex, Integer age, String address, Date birthday) { this.username = username; this.password = password; this.sex = sex; this.age = age; this.address = address; this.birthday = birthday; } // Property accessors public Integer getUserid() { return this.userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return this.age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address = address; } public Date getBirthday() { return this.birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "userid:"+this.userid+"-- username:"+this.username+"-- sex:"+this.sex+"-- age:"+this.age+"-- bithday:"+this.birthday+"-- address:"+this.address ; } } 具体的可执行例子我给放到附件里面仅供参考!如果有什么出错的地方还望多多指出!
- IbatesTest.zip (1.3 MB)
- 下载次数: 60
相关推荐
IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得
在使用iBatis进行数据库操作的过程中,可能会遇到各种各样的问题。这些问题往往由于iBatis错误信息的隐晦性而难以快速定位与解决。本文将根据所提供的标题、描述及部分内容,详细阐述在使用iBatis时可能遇到的一些...
要开始使用 Ibatis,首先需要从官方网站下载最新版本的 ibatis jar 包,以及 log4j 日志框架的 jar 包。然后,在Java项目中添加这些库,配置log4j.properties以开启SQL日志输出。接着,新建主配置文件sqlMapConfig....
这个压缩包包含了iBATIS的相关使用文档和安装包,是学习和使用iBATIS的重要参考资料。 《iBATIS-SqlMaps-2.pdf》可能是关于iBATIS SQL映射器的详细指南,它会介绍如何编写SQL Map配置文件,这些文件定义了数据库...
struts+spring+ibatis+extjs完美整合! 联系方式:QQ360310087 如果有需要与本人沟通的.
《iBatis 使用手册》是一份详尽的开发资源,涵盖了iBatis框架的各个方面,包括iBatis的开发指南、SQL Maps的使用以及入门教程。iBatis是一款优秀的持久层框架,它允许Java开发者将SQL语句与Java代码分离,实现数据...
iBatis详细使用手册(.net版) iBatis是一个基于.NET框架的持久层框架,提供了一种灵活、可控的方式来实现类ORM(Object-Relational Mapping)的解决方案。下面是对iBatis的详细使用手册的知识点总结: 1. iBatis...
以下是对iBATIS简易使用的详细解释: 1. **环境准备**: - **jar文件**:iBATIS框架运行需要依赖一些库文件,包括`log4j`用于日志记录,`ibatis`核心库,以及`jdbc`驱动,这些都需要添加到项目的类路径中。 - **...
以上就是IBatis的基本使用方法和核心概念,通过它可以有效地提升数据库操作的便捷性和灵活性,降低开发成本。在实际项目中,可以根据需求进行扩展和定制,如结合Spring框架实现更高级的整合应用。
iBatis 中使用安全的拼接语句、动态查询、大于、小于、等于 iBatis 是一个流行的持久层框架,提供了许多强大的功能来帮助开发者构建高效、安全的数据库交互应用程序。本文将详细介绍 iBatis 中使用安全的拼接语句、...
springmvc ibatis 整合, 解决BLOB,CLOB等大字段的问题,内置查询缓存 和解决SpringMVC 返回JSON下载,乱码等问题 ...并提供了一个DEMO ,紧为不了解ibatis,或者首次整合springmvc-ibatis的人使用!
Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...
使用Ibatis对数据库的访问,实现增删改查的操作 ;
【Ibatis 使用手册】 Ibatis 是一款优秀的对象关系映射(ORM)框架,它使得开发者能够在不脱离 SQL 的强大功能的同时,享受面向对象编程的便利。Ibatis.Net 是其针对 .NET 平台的移植版本,它简化了数据访问层(DAL...
**Ibatis简介** Ibatis,又称为SQL Map,是一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件中,与Java代码进行分离,使得...了解并熟练掌握Ibatis的使用,对于提升Java开发效率和代码质量具有重要意义。
本文将围绕“IBATIS开发使用实例”这一主题,深入解析复杂SQL查询的应用,尤其是如何利用SQL进行多表关联、条件筛选以及聚合函数的使用。 ### IBATIS简介 IBATIS,现被称为MyBatis,是一种优秀的持久层框架,它...
ibatis简单使用的想法 ibatis 是一个成熟的框架,现在已经是改名字叫mybatis了,框架的配置比较烦,如xml,dao的书写,还有每个表还要对应于javabean,没有的话,map 也成,这里希望对其进行简单的简化。
介绍了ibatis3.0的配置技巧,包括比较复杂的sql语句的写法。
### iBatis.Net详细使用手册知识点汇总 #### 1. iBatis.Net概述 - **定义**: iBatis.Net是一种轻量级的框架,用于.NET应用程序中的数据访问层。它并非传统的ORM(对象关系映射)工具,而是介于纯ADO.NET与全功能ORM...
根据提供的文件信息,我们可以从中提炼出与ibatis及其Example特性相关的知识点。以下是对这些知识点的详细阐述: ### 1. **ibatis简介** ...希望本文能对你理解和使用ibatis及其Example特性提供一定的帮助。