设为首页 收藏本站
查看: 1311|回复: 0

[经验分享] ibatis3 (mybatis) 实例代码下载兼ibatis3优劣分析

[复制链接]

尚未签到

发表于 2016-11-28 07:39:00 | 显示全部楼层 |阅读模式
  (本文章于2010-06-30更新以适应mybatis的最新版本)
  作为rapid-framework路线图的一部分,集成ibatis3也是以后要更新的内容之一.
  现编写了ibatis3的代码例子. 
  一.首先我们来看现在的xml mapper关于增删改查的编写

<mapper namespace="UserInfo">
<resultMap id="RM.UserInfo" type="com.company.project.model.UserInfo">
<result property="userId" column="USER_ID"/>
<result property="username" column="USERNAME"/>
<result property="password" column="PASSWORD"/>
<result property="birthDate" column="BIRTH_DATE"/>
<result property="sex" column="SEX"/>
<result property="age" column="AGE"/>
</resultMap>
<!-- 用于select查询公用抽取的列 -->
<sql id="UserInfo.columns">
<![CDATA[
USER_ID,
USERNAME,
PASSWORD,
BIRTH_DATE,
SEX,
AGE
]]>
</sql>
<!-- useGeneratedKeys="true" keyProperty="xxx" for sqlserver and mysql -->
<insert id="UserInfo.insert" useGeneratedKeys="true" keyProperty="userId">
<![CDATA[
INSERT INTO USER_INFO (
USER_ID ,
USERNAME ,
PASSWORD ,
BIRTH_DATE ,
SEX ,
AGE
) VALUES (
#{userId} ,
#{username} ,
#{password} ,
#{birthDate} ,
#{sex} ,
#{age}
)
]]>
<!--
oracle: order="BEFORE" SELECT sequenceName.nextval AS ID FROM DUAL
DB2: order="BEFORE"" values nextval for sequenceName
<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="userId">
SELECT sequenceName.nextval AS ID FROM DUAL
</selectKey>
-->
</insert>
<update id="UserInfo.update" >
<![CDATA[
UPDATE USER_INFO SET
USERNAME = #{username} ,
PASSWORD = #{password} ,
BIRTH_DATE = #{birthDate} ,
SEX = #{sex} ,
AGE = #{age}
WHERE
USER_ID = #{userId}
]]>
</update>
<delete id="UserInfo.delete">
<![CDATA[
DELETE FROM USER_INFO WHERE
USER_ID = #{id}
]]>
</delete>
<select id="UserInfo.getById" resultMap="RM.UserInfo">
SELECT <include refid="UserInfo.columns" />
<![CDATA[
FROM USER_INFO
WHERE
USER_ID = #{id}
]]>
</select>
<sql id="UserInfo.findPage.where">
<!-- ognl访问静态方法的表达式 为@class@method(args),以下为调用rapid中的Ognl.isNotEmpty()方法,还有其它方法如isNotBlank()可以使用,具体请查看Ognl类 -->
<where>      
<if test="@Ognl@isNotEmpty(userId)">
AND USER_ID = #{userId}
</if>
<if test="@Ognl@isNotEmpty(username)">
AND USERNAME = #{username}
</if>
<if test="@Ognl@isNotEmpty(password)">
AND PASSWORD = #{password}
</if>
<if test="@Ognl@isNotEmpty(birthDateBegin)">
AND BIRTH_DATE >= #{birthDateBegin}
</if>
<if test="@Ognl@isNotEmpty(birthDateEnd)">
AND BIRTH_DATE &lt;= #{birthDateEnd}
</if>
<if test="@Ognl@isNotEmpty(sex)">
AND SEX = #{sex}
</if>
<if test="@Ognl@isNotEmpty(age)">
AND AGE = #{age}
</if>
</where>
</sql>
<select id="UserInfo.findPage.count" resultType="long">
SELECT count(*) FROM USER_INFO
<include refid="UserInfo.findPage.where"/>   
</select>
<!--
分页查询已经使用Dialect进行分页,也可以不使用Dialect直接编写分页
因为分页查询将传 offset,pageSize,lastRows 三个参数,不同的数据库可以根于此三个参数属性应用不同的分页实现
-->
<select id="UserInfo.findPage" resultMap="RM.UserInfo">
SELECT <include refid="UserInfo.columns" />
FROM USER_INFO
<include refid="UserInfo.findPage.where"/>
<if test="@Ognl@isNotEmpty(sortColumns)">
ORDER BY ${sortColumns}
</if>
</select>
</mapper>
  与ibatis2 sqlmap的主要异同:
  1. insert节点现在可以直接指定mysql auto_increment(或是sqlserver identity)的主键生成策略
  useGeneratedKeys="true" keyProperty="userId" 
  2.动态构造sql部分,test部分采用的是struts2 ognl表达式,还有choose,foreach语句等,跟struts2 tag是否很像呢?
  (注:此处现可以使用ONGL访问静态方法来解决:@Ognl@isNotEmpty(userId))
  Ognl静态方法调用
  二.构造SqlSessionFactory,以前的SqlMapClient

Reader reader = Resources.getResourceAsReader("Configuration.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
  三. 配置文件Configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/company/project/model/mapper/UserInfoMapper.xml" />
</mappers>
</configuration>
  以上就是完整的示例, 具体demo代码下载:  http://rapid-framework.googlecode.com/files/ibatis3_demo.zip
  ibatis3 annotation评价:
  难听点,根本是个脑残方案,如果用annotation写,我还不如使用类似jdbc的java代码. 不知道自己优势是在xml文件,瞎跟风.
  而spring现在还没有对ibatis3集成,不过以后rapid会先与spring发布ibatis3的插件, 只提供生成器模板,现不自己开发集成,等待spring. 当然以后对提供类似ibatis2的基于方言Dialect的分页还是会提供的.
  最后仍然做下广告: rapid-framework, 现最好的项目脚手架
  http://code.google.com/p/rapid-framework/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306333-1-1.html 上篇帖子: 生成mybatis中所需的javabean和基础配置信息 下篇帖子: 问题1:WebLogic下Mybatis Error building SqlSession
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表