(本文章于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 <= #{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&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/
分享到:
相关推荐
功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。
labview程序代码参考学习使用,希望对你有所帮助。
大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插
labview程序代码参考学习使用,希望对你有所帮助。
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频