Weed3 一个微型ORM框架(只有0.1Mb哦)
源码:https://github.com/noear/weed3
源码:https://gitee.com/noear/weed3
五个指令 + 三种变量形式。先来段xml
这个示例里把各种情况应该呈现出来了
<?xml version="1.0" encoding="utf-8" ?>
<mapper namespace="weed3demo.xmlsql2" :db="testdb">
<sql id="user_add1" :return="long"
:param="m:weed3demo.mapper.UserModel,sex:int"
:note="添加用户">
INSERT user(user_id,mobile,sex) VALUES(@{m.user_id},@{m.mobile},@{sex})
</sql>
<sql id="user_add2" :return="long" :note="添加用户">
INSERT user(user_id) VALUES(@{user_id:int})
</sql>
<sql id="user_add_for" :return="long" :note="批量添加用户3">
INSERT user(id,mobile,sex) VALUES
<for var="m:weed3demo.mapper.UserModel" items="list">
(@{m.user_id},@{m.mobile},@{m.sex})
</for>
</sql>
<sql id="user_del" :note="删除一个用户">
DELETE FROM user WHERE id=@{m.user_id:long}
<if test="sex > 0">
AND sex=@{sex:int}
</if>
</sql>
<sql id="user_set"
:note="更新一个用户,并清理相关相存"
:caching="localCache"
:cacheClear="user_${user_id},user_1">
UPDATE user SET mobile=@{mobile:String},sex=@{sex:int}
<if test="icon != null">
icon=@{icon:String}
</if>
</sql>
<sql id="user_get_list"
:note="获取一批符合条件的用户"
:declare="foList:int,user_id:long"
:return="List[weed3demo.mapper.UserModel]"
:caching="localCache"
:cacheTag="user_${user_id},user_1">
SELECT id,${cols:String} FROM user
<trim prefix="WHERE" trimStart="AND ">
<if test="mobile?!">
AND mobile LIKE '${mobile:String}%'
</if>
<if test="foList == 0">
AND type='article'
</if>
<if test="foList == 1">
AND type='post'
</if>
</trim>
</sql>
<sql id="user_cols1">name,title,style,label</sql>
<sql id="user_cols2">name,title</sql>
<sql id="user_get_list2"
:note="获取一批符合条件的用户"
:declare="foList:int,user_id:long"
:return="List[weed3demo.mapper.UserModel]"
:caching="localCache"
:cacheTag="user_${user_id},user_1">
SELECT id,
<if test="foList == 0">
<ref sql="user_cols1"/>
</if>
<if test="foList == 1">
<ref sql="user_cols2"/>
</if>
FROM user WHERE sex>1 AND mobile LIKE '@{mobile:String}%'
</sql>
</mapper>
四个指令说明
sql 代码块定义指令
:require(属性:导入包或类)
:param?(属性:外部输入变量申明;默认会自动生成::新增***)
:declare(属性:内部变量类型预申明)
:return(属性:返回类型)
:db (属性:数据库上下文name)
:note(属性:描述、说明、注解)
:caching(属性:缓存服务name) //是对 ICacheController 接口的映射
:cacheClear?(属性:清除缓存)
:cacheTag?(属性:缓存标签,支持在入参或结果里取值替换)
:usingCache?(属性:缓存时间,int)
if 判断控制指令(没有else)
test (属性:判断检测代码)
//xml避免语法增强:
//lt(<) lte(<=) gt(>) gte(>=) and(&&) or(||)
//例:m.sex gt 12 :: m.sex >=12
//简化语法增强:
//??(非null,var!=null) ?!(非空字符串,StringUtils.isEmpty(var)==false)
//例:m.icon?? ::m.icon!=null
//例:m.icon?! ::StringUtils.isEmpty(m.icon)==false
for 循环控制指令 (通过 ${var}_index 可获得序号,例:m_index::新增***)
var (属性:循环变量申明)
items (属性:集合变量名称)
sep? (属性:分隔符::新增***)
trim 修剪指令
trimStart(属性:开始位去除)
trimEnd(属性:结尾位去除)
prefix(属性:添加前缀)
suffix(属性:添加后缀)
ref 引用代码块指令
sql (属性:代码块id)
三种变量形式
name:type = 变量申明(仅用于var ,或:declare)
@{name:type} = 变量注入(仅用于代码块)
${name:type} = 变量替换(用于代码块,或:cacheTag,或:cacheClear)
关于返回值的几种形式说明
//多行,列表(用[]替代<>)
:return="List[weed3demo.mapper.UserModel]" //将返回 List<UserModel>
:return="List[String]" //将返回 List<String> (Date,Long,...大写开头的单值类型)
:return="MapList" //将返回 List<Map<String,Object>>
:return="DataList" //将返回 DataList
//一行
:return="weed3demo.mapper.UserModel" //将返回 UserModel
:return="Map" //将返回 Map<String,Object>
:return="DataItem" //将返回 DataItem
//单值
:return="String" //将返回 String (或别的任何单职类型)
网友评论