IBATIS常用的16种SQL语句写法
IBATIS常用的16种SQL语句写法

accessTimestamp <= #value# </delete>
2. 将特殊字符放在 xml 的 CDATA 区内:
Xml 代码 1. <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" paramete rClass="long"> 2. 3. 4. 5. 6. 7. 8. <![CDATA[ delete from MemberAccessLog where accessTimestamp <= #value# ]]> </delete>
Xml 代码 1. <select id="com.fashionfree.stat.accesslog.selectSumDistinctCountOfAccessMemberN um" 2. parameterClass="hashMap" resultClass="int">
3. 4. 5. 6. 7. 8. 9.
32. <isNotNull property="startIndex"> 33. <isNotNull property="pageSize"> 34. limit #startIndex# , #pageSize# 35. </isNotNull> 36. </isNotNull> 37. </dynamic> 38. </sql>
10. </iterate> 11. </dynamic> 12. order by 13. moduleId 14. </select>
mybatis sql语法

MyBatis SQL语法介绍MyBatis是一个开源的持久层框架,它简化了数据库操作的编写过程,提供了强大的SQL映射功能。
本文将深入探讨MyBatis的SQL语法,包括常见的CRUD操作、动态SQL、参数绑定、结果映射等。
基本CRUD操作查询MyBatis的SQL语法使用了类似于XML的语法来编写SQL语句。
下面是一个简单的查询示例:<select id="selectUserById" resultType="er">SELECT * FROM user WHERE id = #{id}</select>•select标签用于定义查询语句。
•id属性为查询语句的唯一标识。
•resultType属性指定查询结果的类型。
•#{id}是参数占位符,会被实际的参数值替换。
插入插入操作使用insert标签,示例如下:<insert id="insertUser" parameterType="er">INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age})</insert>•parameterType属性指定插入语句的参数类型。
更新更新操作使用update标签,示例如下:<update id="updateUser" parameterType="er">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}</update>删除删除操作使用delete标签,示例如下:<delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id}</delete>动态SQLMyBatis提供了强大的动态SQL功能,可以根据条件来动态构建SQL语句。
SQL命令和经常使用语句大全【经典】

SQL命令和经常使用语句大全【经典】学习SQL应明白的动态SQL语句大体语法1 、一般SQL语句能够用Exec执行eg: Select * from tableNameExec('select * from tableName')Exec sp_executesql N'select * from tableName' -- 请注意字符串前必然要加N2、字段名,表名,数据库名之类作为变量时,必需用动态SQLeg:declare @fname varchar(20)set @fname = 'FiledName'Select @fname from tableName -- 错误,可不能提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格固然将字符串改成变量的形式也可declare @fname varchar(20)set @fname = 'FiledName' --设置字段名declare @s varchar(1000)set @s = 'select ' + @fname + ' from tableName'Exec(@s) -- 成功exec sp_executesql @s -- 此句会报错declare @s Nvarchar(1000) -- 注意此处改成nvarchar(1000) set @s = 'select ' + @fname + ' from tableName'Exec(@s) -- 成功exec sp_executesql @s -- 此句正确3、输出参数declare @num int,@sqls nvarchar(4000)set @sqls='select count(*) from tableName'exec(@sqls)--如何将exec执行结果放入变量中?declare @num int,@sqls nvarchar(4000)set @sqls='select @a=count(*) from tableName 'exec sp_executesql @sqls,N'@a int output',@num output select @num另外,若是想要在SQL语句字符串中利用单引号'' 能够利用''''--语句功能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据概念CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储进程DROP PROCEDURE --从数据库中删除存储进程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域概念DROP DOMAIN --从数据库中删除一个域--数据操纵GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务操纵COMMIT --终止当前事务ROLLBACK --中止当前事务SET TRANSACTION --概念当前事务数据访问特点--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问打算OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行预备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述预备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必需以@@开头--IF ELSEdeclare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @yprint 'x > y' --打印字符串'x > y' else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08 when job_level = ’2’ then e_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1 while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @y print @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1 select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator value ex:(宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)--------- 只能在利用like关键字的where子句中利用通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stock*** = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- 子查询--------- 除非能确保内层select只返回一个行的值,--------- 不然应在外层where子句顶用一个in限定符select distinct column_name form table_name --------- distinct指定检索特有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_ nameselect stockname , "stocknumber" = count(*) from table_name group by s tockname--------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union归并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx") value (select Stockname , Stocknumber from Stock_table2)---value为select 语句***update***update table_name set Stockname = "xxx" [where Stockid = 3] Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有行,仍维持表的完整性drop table table_name --------------- 完全删除表***alter table*** --- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null ..... sp_help table_name ---- 显示表已有特点create table table_name (name char(20), age smallint, lname varchar(30)) insert into table_name select ......... ----- 实现删除列的方式(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockna me的default约束***function(/*经常使用函数*/)***----统计函数----AVG --求平均值COUNT --统计数量MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWage from employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回整体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回整体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π 即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--若是没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全数转换为小写UPPER() --函数把字符串全数转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部份字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串显现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的不同--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序倒置REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ]) CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate()) 运行结果如下------------------------------ ------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期距离number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同的地方DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部份DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部份GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时刻----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回效劳器端运算机的名称HOST_NAME() --函数返回效劳器端运算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中利用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判定所给定的表达式是不是为合理日期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判定所给定的表达式是不是为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值假设不相等时那么返回expression1 的值sql中的保留字action add aggregate allalter after and asasc avg avg_row_length auto_incrementbetween bigint bit binaryblob bool both bycascade case char characterchange check checksum columncolumns comment constraint createcross current_date current_time current_timestamp data database databases datedatetime day day_hour day_minuteday_second dayofmonth dayofweek dayofyear dec decimal default delayeddelay_key_write delete desc describedistinct distinctrow double dropend else escape escapedenclosed enum explain existsfields file first floatfloat4 float8 flush foreignfrom for full functionglobal grant grants grouphaving heap high_priority hourhour_minute hour_second hosts identified ignore in index infileinner insert insert_id intinteger interval int1 int2int3 int4 int8 intoif is isam joinkey keys kill last_insert_idleading left length likelines limit load locallock logs long longbloblongtext low_priority max max_rows match mediumblob mediumtext mediumint middleint min_rows minute minute_second modify month monthname myisamnatural numeric no notnull on optimize optionoptionally or order outeroutfile pack_keys partial passwordprecision primary procedure processprocesslist privileges read realreferences reload regexp renamereplace restrict returns revokerlike row rows secondselect set show shutdownsmallint soname sql_big_tables sql_big_selectssql_low_priority_updates sql_log_off sql_log_update sql_select_limit sql_small_result sql_big_result sql_warnings straight_joinstarting status string tabletables temporary terminated textthen time timestamp tinyblobtinytext tinyint trailing totype use using uniqueunlock unsigned update usagevalues varchar variables varyingvarbinary with write whenwhere year year_month zerofill经常使用SQL命令和ASP编程在进行数据库操作时,无非确实是添加、删除、修改,这得设计到一些经常使用的SQL语句,如下:SQL经常使用命令利用方式:(1) 数据记录挑选:sql="select * from 数据表where 字段名=字段值order by 字段名[desc]"sql="select * from 数据表where 字段名like %字段值% order by 字段名[desc] "sql="select top 10 * from 数据表where 字段名order by 字段名[desc]"sql="select * from 数据表where 字段名in (值1,值2,值3)"sql="select * from 数据表where 字段名between 值1 and 值2"(2) 更新数据记录:sql="update 数据表set 字段名=字段值where 条件表达式"sql="update 数据表set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"(3) 删除数据记录:sql="delete from 数据表where 条件表达式"sql="delete from 数据表" (将数据表所有记录删除)(4) 添加数据记录:sql="insert into 数据表(字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"sql="insert into 目标数据表select * from 源数据表" (把源数据表的记录添加到目标数据表)(5) 数据记录统计函数:AVG(字段名) 得出一个表格栏平均值COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计MAX(字段名) 取得一个表格栏最大的值MIN(字段名) 取得一个表格栏最小的值SUM(字段名) 把数据栏的值相加引用以上函数的方式:sql="select sum(字段名) as 别名from 数据表where 条件表达式"set rs=conn.excute(sql)用rs("别名") 获取统的计值,其它函数运用同上。
mybatis实战教程之八:动态sql语句

mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句mybatis 的动态sql语句是基于OGNL表达式的。
可以方便的在sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句(简单的条件判断)2. choose (when,otherwize) ,相当于java 语言中的switch ,与jstl 中的choose 很类似.3. trim (对包含的内容加上prefix,或者suffix 等,前缀,后缀)4. where (主要是用来简化sql语句中where条件判断的,能智能的处理and or ,不必担心多余导致语法错误)5. set (主要用于更新时)6. foreach (在实现mybatis in 语句查询时特别有用)下面分别介绍这几种处理方式1. mybaits if 语句处理程序代码<select id="dynamicIfTest" parameterType="Blog" resultType="Blog"> select * from t_blog where 1 = 1<if test="title != null">and title = #{title}</if><if test="content != null">and content = #{content}</if><if test="owner != null">and owner = #{owner}</if></select>这条语句的意思非常简单,如果你提供了title参数,那么就要满足title=#{title},同样如果你提供了Content和Owner的时候,它们也需要满足相应的条件,之后就是返回满足这些条件的所有Blog,这是非常有用的一个功能,以往我们使用其他类型框架或者直接使用JDBC的时候,如果我们要达到同样的选择效果的时候,我们就需要拼SQL语句,这是极其麻烦的,比起来,上述的动态SQL就要简单多了2.2. choose (when,otherwize) ,相当于java 语言中的switch ,与jstl 中的choose 很类似程序代码<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog"> select * from t_blog where 1 = 1<choose><when test="title != null">and title = #{title}</when><when test="content != null">and content = #{content}</when><otherwise>and owner = "owner1"</otherwise></choose></select>when元素表示当when中的条件满足的时候就输出其中的内容,跟JAVA中的switch效果差不多的是按照条件的顺序,当when中有条件满足的时候,就会跳出choose,即所有的when和otherwise条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出otherwise中的内容。
mysql基础语句汇总

mysql基础语句汇总MySQL是一种常用的关系型数据库管理系统,它支持多种基础语句来操作数据库。
下面列举了十个常用的MySQL基础语句,用于对数据库进行增删改查等操作。
1. 创建数据库:CREATE DATABASE database_name;通过此语句可以创建一个新的数据库。
其中database_name为你想要创建的数据库的名称。
2. 创建表:CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,...);通过此语句可以在数据库中创建一个新的表。
其中table_name为你想要创建的表的名称,column1、column2等为表的列名,datatype为列的数据类型。
3. 插入数据:INSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);通过此语句可以向表中插入新的数据。
其中table_name为你想要插入数据的表的名称,column1、column2等为表的列名,value1、value2等为要插入的数据值。
4. 更新数据:UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;通过此语句可以更新表中的数据。
其中table_name为你想要更新数据的表的名称,column1、column2等为要更新的列名和新的数据值,condition为更新的条件。
5. 删除数据:DELETE FROM table_nameWHERE condition;通过此语句可以删除表中的数据。
其中table_name为你想要删除数据的表的名称,condition为删除的条件。
6. 查询数据:SELECT column1, column2, ...FROM table_nameWHERE condition;通过此语句可以从表中查询数据。
ibatis annotations in 条件

ibatis annotations in 条件
您好!iBatis条件(annotations)是指在iBatis中使用的一种注解,用于定义查询条件。
以下是一些常见的iBatis条件注解:
1. @Select:用于定义查询语句,可以指定查询条件。
例如:@Select("SELECT * FROM table WHERE column =
#{value}")
2. @Insert:用于定义插入语句,可以指定插入的条件。
例如:@Insert("INSERT INTO table (column1, column2) VALUES (#{value1}, #{value2})")
3. @Update:用于定义更新语句,可以指定更新的条件。
例如:@Update("UPDATE table SET column = #{value} WHERE condition = #{condition}")
4. @Delete:用于定义删除语句,可以指定删除的条件。
例如:@Delete("DELETE FROM table WHERE column =
#{value}")
以上是一些常见的iBatis条件注解,您可以根据具体需求选择使用。
ibatis动态SQL标签用法

iBatis动态SQL标签用法1、动态SQL片段通过SQL片段达到代码复用<!--动态条件分页查询--><sql id="sql_count">select count(*)</sql><sql id="sql_select">select *</sql><sql id="sql_where">from icp<dynamic prepend="where"><isNotEmpty prepend="and"property="name">name like '%$name$%'</isNotEmpty><isNotEmpty prepend="and"property="path">path like '%path$%'</isNotEmpty><isNotEmpty prepend="and"property="area_id">area_id = #area_id#</isNotEmpty><isNotEmpty prepend="and"property="hided">hided = #hided#</isNotEmpty></dynamic><dynamic prepend=""><isNotNull property="_start"><isNotNull property="_size">limit #_start#, #_size#</isNotNull></isNotNull></dynamic></sql><select id="findByParamsForCount"parameterClass="map"resultClass="int "><include refid="sql_count"/><include refid="sql_where"/></select><select id="findByParams"parameterClass="map"resultMap="icp.result_base"><include refid="sql_select"/><include refid="sql_where"/></select>2、数字范围查询所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段<isNotEmpty prepend="and"property="_img_size_ge"><![CDATA[img_size >= #_img_size_ge#]]></isNotEmpty><isNotEmpty prepend="and"property="_img_size_lt"><![CDATA[img_size < #_img_size_lt#]]></isNotEmpty>多次使用一个参数也是允许的<isNotEmpty prepend="and"property="_now"><![CDATA[execplantime >= #_now#]]></isNotEmpty><isNotEmpty prepend="and"property="_now"><![CDATA[closeplantime <= #_now#]]></isNotEmpty>3、时间范围查询<isNotEmpty prepend="" property="_starttime"><isNotEmpty prepend="and"property="_endtime"><![CDATA[createtime >= #_starttime#and createtime < #_endtime#]]></isNotEmpty></isNotEmpty>4、in查询<isNotEmpty prepend="and"property="_in_state">state in ('$_in_state$')</isNotEmpty>5、like查询<isNotEmpty prepend="and"property="chnameone">(chnameone like '%$chnameone$%' or spellinitial like '% $chnameone$%')</isNotEmpty><isNotEmpty prepend="and"property="chnametwo">chnametwo like '%$chnametwo$%'</isNotEmpty>6、or条件<isEqual prepend="and"property="_exeable"compareValue="N "><![CDATA[(t.finished='11' or t.failure=3)]]></isEqual><isEqual prepend="and"property="_exeable"compareValue="Y "><![CDATA[t.finished in ('10','19') and t.failure<3]]></isEqual>7、where子查询<isNotEmpty prepend="" property="exprogramcode"><isNotEmpty prepend="" property="isRational"><isEqual prepend="and"property="isRational"compa reValue="N">code not in(select t.contentcodefrom cms_ccm_programcontent twhere t.contenttype='MZNRLX_MA'and t.programcode = #exprogramcode#)</isEqual></isNotEmpty></isNotEmpty><select id="findByProgramcode"parameterClass="string"resultMap="cms_ ccm_material.result">select *from cms_ccm_materialwhere code in(select t.contentcodefrom cms_ccm_programcontent twhere t.contenttype = 'MZNRLX_MA'and programcode = #value#)order by updatetime desc</select>9、函数的使用<!--添加--><insert id="insert"parameterClass="RuleMaster">insert into rulemaster(name,createtime,updatetime,remark) values (#name#,now(),now(),#remark#)<selectKey keyProperty="id"resultClass="long">select LAST_INSERT_ID()</selectKey></insert><!--更新--><update id="update"parameterClass="RuleMaster">update rulemaster setname = #name#,updatetime = now(),remark = #remark#where id = #id#</update>10、map结果集<!--动态条件分页查询--><sql id="sql_count">select count(a.*)</sql><sql id="sql_select">select a.id vid,a.img imgurl,a.img_s imgfile,b.vfilename vfilename, name,c.id sid,c.url url,c.filename filename,c.status status</sql><sql id="sql_where">From secfiles c, juji b, videoinfo awherea.id =b. videoidand b.id = c.segmentidand c.status = 0order by a.id asc,b.id asc,c.sortnum asc<dynamic prepend=""><isNotNull property="_start"><isNotNull property="_size">limit #_start#, #_size#</isNotNull></isNotNull></dynamic></sql><!--返回没有下载的记录总数--><select id="getUndownFilesForCount"parameterClass="map"resultClass="i nt"><include refid="sql_count"/><include refid="sql_where"/></select><!--返回没有下载的记录--><select id="getUndownFiles"parameterClass="map"resultClass="java.util. HashMap"><include refid="sql_select"/><include refid="sql_where"/></select>。
ibatis foreach写法

ibatis foreach写法在iBatis中,使用foreach语句是一种方便的方式来处理集合或数组数据。
下面是iBatis中使用foreach语句的写法示例:1. 单个元素遍历:```sql<select id="selectPerson" resultType="Person">SELECT FROM person WHERE id IN<foreach item="id" index="index" collection="list" open="(" separator="," close=")">{id}</foreach></select>```在上面的示例中,`collection`属性指定了要遍历的集合或数组,`item`属性表示当前迭代的元素,`index`属性表示当前迭代的索引,`open`和`close`属性指定了遍历结果的开头和结尾,`separator`属性指定了元素之间的分隔符。
2. 多个属性遍历:```sql<select id="selectPersons" resultType="Person">SELECT FROM person<where><foreach item="person" index="index" collection="list" separator="AND">(id = {} AND name = {})</foreach></where></select>```在上面的示例中,我们使用了`where`标签来构建查询条件,并在其中嵌套了`foreach`标签。
mybatis sql语句写法

MyBatis 是一个流行的持久层框架,它提供了一种将 Java 对象和关系数据库中的数据进行映射的方式。
在 MyBatis 中,SQL 语句可以使用 XML 文件或注解的方式进行编写。
以下是 MyBatis 中 SQL 语句的两种常用写法:### 1. XML 文件方式在 MyBatis 中,SQL 语句通常会被定义在 XML 文件中,例如 `mapper.xml`。
XML 文件中可以包含各种 SQL 语句,比如查询、插入、更新、删除等。
#### 示例:```xml<!-- 定义一个查询语句 --><select id="selectUserById" parameterType="int" resultType="User">SELECT * FROM users WHERE id = #{userId}</select><!-- 定义一个插入语句 --><insert id="insertUser" parameterType="User">INSERT INTO users (id, username, password) VALUES (#{id}, #{username},#{password})</insert>```在上面的示例中,我们分别定义了一个查询语句和一个插入语句。
其中,`<select>` 标签用于定义查询语句,`<insert>` 标签用于定义插入语句。
在这两个标签中,我们可以指定 SQL 语句的内容,并使用 `#{}` 来引用参数或属性。
### 2. 注解方式除了 XML 文件,MyBatis 也支持使用注解的方式在接口方法上直接定义 SQL 语句。
#### 示例:```javapublic interface UserMapper {@Select("SELECT * FROM users WHERE id = #{userId}")User selectUserById(int userId);@Insert("INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})")void insertUser(User user);}```在上面的示例中,我们定义了一个 `UserMapper` 接口,并使用 `@Select` 和 `@Insert` 注解来分别指定查询和插入的 SQL 语句。
mybatis写法sql

mybatis写法sqlMyBatis是一种流行的Java持久化框架,它提供了一种简单而强大的方式来执行SQL查询和操作数据库。
下面是一些使用MyBatis编写SQL的示例:1. 查询操作:```java\n@Select(\"SELECT * FROM users WHERE id =#{id}\")\nUser getUserById(int id);\n```上述代码使用`@Select`注解指定了查询语句,并使用`#{id}`占位符来传递参数。
在执行时,MyBatis会将占位符替换为实际的参数值,并返回查询结果。
2. 插入操作:```java\n@Insert(\"INSERT INTO users (name, age) VALUES (#{name}, #{age})\")\nvoid insertUser(User user);\n```上述代码使用`@Insert`注解指定了插入语句,并使用`#{name}`和`#{age}`占位符来传递参数。
在执行时,MyBatis会将占位符替换为实际的参数值,并将数据插入到数据库中。
3. 更新操作:```java\n@Update(\"UPDATE users SET name = #{name}, age = #{age} WHERE id =#{id}\")\nvoid updateUser(User user);\n```上述代码使用`@Update`注解指定了更新语句,并使用`#{name}`、`#{age}`和`#{id}`占位符来传递参数。
在执行时,MyBatis会将占位符替换为实际的参数值,并更新数据库中对应的记录。
4. 删除操作:```java\n@Delete(\"DELETE FROM users WHERE id = #{id}\")\nvoid deleteUser(int id);\n```上述代码使用`@Delete`注解指定了删除语句,并使用`#{id}`占位符来传递参数。
mybatis教程之动态sql语句

mybatis教程之动态sql语句MyBatis是一个开源的持久层框架,它提供了一种将SQL语句与Java 代码解耦的方式。
在MyBatis中使用动态SQL可以根据不同的条件生成不同的SQL语句,使得SQL语句更具灵活性。
动态SQL的实现有两种方式:使用XML文件和使用注解。
使用XML文件的方式:1. 在Mapper的XML文件中,使用`<if>`元素来判断条件是否成立,如果成立则生成对应的SQL语句段。
```xml<select id="getUserByName" parameterType="string"resultMap="userResultMap">select * from user<where><if test="name != null">and name = #{name}</if><if test="age != null">and age = #{age}</if></where>```2. 使用`<choose>`、`<when>`和`<otherwise>`元素来进行多条件判断,类似于Java中的switch语句。
```xml<select id="getUserByCondition" parameterType="map" resultMap="userResultMap">select * from user<where><choose><when test="name != null">and name = #{name}</when><when test="age != null">and age = #{age}</when><otherwise>and 1=1</otherwise></where></select>```使用注解的方式:```java``````javapublic class UserSqlProviderSQL sql = new SQL(;sql.SELECT("*").FROM("user").WHERE("1=1");if(name != null)sql.AND.WHERE("name = #{name}");}return sql.toString(;}}```以上就是使用MyBatis实现动态SQL的两种方式。
mybatissql语句的写法

mybatissql语句的写法MyBatis 是一种用于Java 编程语言的持久层框架,它提供了一种优雅的方式来使用SQL 语句与数据库进行交互。
以下是MyBatis SQL 语句的一般写法,包括了常见的增删改查操作:1. 查询操作(SELECT):```xml<!--根据id 查询用户--><select id="selectUserById" resultType="User">SELECT * FROM users WHERE id = #{id}</select>```在这个例子中,`selectUserById` 是一个唯一标识符,`resultType` 指定了查询结果的类型,`#{id}` 是一个占位符,表示需要动态传入的参数。
2. 插入操作(INSERT):```xml<!--插入用户--><insert id="insertUser" parameterType="User">INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password}) </insert>```在这个例子中,`insertUser` 是插入操作的唯一标识符,`parameterType` 指定了插入操作的参数类型,`#{id}`, `#{username}`, `#{password}` 是插入的字段值。
3. 更新操作(UPDATE):```xml<!--更新用户信息--><update id="updateUser" parameterType="User">UPDATE users SET username=#{username}, password=#{password} WHERE id=#{id} </update>```在这个例子中,`updateUser` 是更新操作的唯一标识符,`parameterType` 指定了更新操作的参数类型,`#{username}`, `#{password}`, `#{id}` 是更新的字段值。
mybatis的sql语句中,表达式的编写方式

mybatis的sql语句中,表达式的编写方式在MyBatis的SQL语句中,可以使用表达式来实现更灵活和动态的查询。
以下是一些常见的表达式编写方式:1. 参数占位符方式:使用#{parameter}来引用参数,例如:```SELECT * FROM table WHERE column = #{paramName}```2. 动态SQL标签方式:使用MyBatis提供的动态SQL标签来实现条件判断和动态拼接SQL语句,例如:```<select id="query" parameterType="map"resultType="er">SELECT * FROM table<where><if test="param1 != null">AND column1 = #{param1}</if><if test="param2 != null">AND column2 = #{param2}</if></where></select>```3. OGNL表达式方式:使用OGNL(Object-Graph Navigation Language)表达式来实现复杂的条件判断和函数调用,例如:```SELECT * FROM table WHERE column =#{param.property1.property2}```4. XML CDATA片段方式:使用<![CDATA[]]>标记来包裹SQL语句,以避免XML转义字符的影响,例如:```SELECT * FROM table WHERE column =<![CDATA[#{param}]]>```这些都是MyBatis中常用的表达式编写方式,根据业务需求和个人喜好选择合适的方式即可。
mybatis sql语句

mybatis sql语句MyBatisSQL语句是一种存储在.sql文件中,用来操作数据库的查询语句,它是将程序和关系数据库之间的映射关系抽象出来,使得关系数据库中的操作可以比手写SQL语句更加简易。
MyBatis SQL语句的主要目的就是要支撑MyBatis框架中的数据操作,它可以简化非常复杂的查询SQL语句,提高代码的可读性,让开发人员更容易理解和调试代码。
MyBatis SQL语句可以用来创建、更新、查询以及删除数据库中的表。
它可以通过SQL语句来处理数据库中的表,提高开发效率,它使得开发人员可以更容易地管理数据库。
## 二、MyBatis SQL语句标准格式MyBatis SQL语句的标准格式是:```<statement id=[statement_id]parameterType=[parameter_type] resultType=[result_type][SQL]</statement>```其中:1. statement_id:SQL语句的唯一标识,MyBatis在执行SQL 语句时通过这个标识找到对应的SQL语句。
2. parameterType:查询参数的类型,MyBatis会在执行SQL语句前将参数的对象转换成parameterType对应的类型。
3. resultType:查询结果的类型,MyBatis会在查询完成后将结果转换成resultType对应的类型。
4. SQL:用于查询、更新、插入或删除数据库中表数据的SQL 语句,被MyBatis执行时会把statement_id中指定的参数值放入SQL 语句中。
## 三、MyBatis SQL语句常用功能MyBatis SQL语句提供了对数据库表操作的常用功能,它可以帮助开发人员更加方便快捷地对数据库表进行操作。
### 1.询数据MyBatis SQL语句支持常见的select操作,能够通过条件查询数据库表中的数据,并支持多表联查,允许开发人员在查询数据时实现更复杂的筛选条件。
Ibatis sql语句公共部分写法

Ibatis sql语句公共部分写法Sql代码<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapPUBLIC "-////DTD SQL Map 2.0//EN""/dtd/sql-map-2.dtd"><sqlMap namespace="exp"><!-- 定义的语句块必须放到最上面否则报错--><!--定义查询公共查询条件--><sql id="userCommon">FROM tb_user_info, tb_user_grant, tb_team_infoWHERE tb_user_info.n_team_id = tb_team_info.c_tti_id(+)AND tb_user_info.c_nme = tb_user_grant.c_nmeAND tb_user_info.c_del = '0'<dynamic><isEmpty property="role" prepend="AND"><![CDATA[ tb_user_grant.c_user_role != 'ROLE_DELIVERER' AND tb_user_grant.c_user_role != 'ROLE_OUTER' ]]></isEmpty><isNotEmpty property="role" prepend="AND"><![CDATA[ tb_user_grant.c_user_role = #role# ]]></isNotEmpty><isNotEmpty property="account" prepend="AND"><![CDATA[ tb_user_info.c_nme LIKE '%' || #account# || '%' ]]></isNotEmpty><isNotEmpty property="name" prepend="AND"><![CDATA[ tb_user_info.c_true_nme LIKE '%' || #name# || '%' ]]></isNotEmpty><isNotEmpty property="idCard" prepend="AND"><![CDATA[ tb_user_info.c_id = #idCard# ]]></isNotEmpty><isNotEmpty property="employeeNumber" prepend="AND"><![CDATA[ Tb_user_info.c_staff_no = #employeeNumber# ]]></isNotEmpty></dynamic></sql><!--总记录数查询--><select id="aboutUserInfo_queryCount" parameterClass="erManagerDTO"resultClass="ng.Long"><![CDATA[SELECT COUNT(DISTINCT tb_user_info.c_nme)]]><isParameterPresent ><include refid="userCommon"/></isParameterPresent></select><!-- 结果查询--><select id="aboutUserInfo_queryList_user" parameterClass="erManagerDTO"resultClass="erManagerDTO"><![CDATA[SELECT rowIndex,account,name,role,sex,birthday,employeeNumber,idCard,enCompanyDate,sysName,agentUsernme,branch,phone,mobile,billDate,billZone,billsquence,resName,resPhone,remark,email,phonezone,enabled,teamFROM (SELECT ROWNUM AS rowIndex, a.*FROM (SELECT DISTINCT tb_user_info.c_nme AS account,tb_user_info.c_true_nme AS name,tb_user_grant.c_user_role AS role,tb_user_info.c_sex AS sex,tb_user_info.c_birth AS birthday,tb_user_info.c_staff_no AS employeeNumber,tb_user_info.c_id AS idCard,tb_user_info.t_in_date AS enCompanyDate,tb_user_info.c_cb_usernme AS sysName,tb_user_info.c_agent_usernme AS agentUsernme,tb_user_info.c_sub_corp AS branch,tb_user_info.c_tel AS phone,tb_user_info.c_mobile AS mobile,tb_user_info.t_bill_date AS billDate,tb_user_info.c_bill_zone AS billZone,tb_user_info.c_deliver_sq AS billsquence,tb_user_info.c_res_name AS resName,tb_user_info.c_res_phone AS resPhone,tb_user_info.c_remark AS remark,tb_user_info.c_email AS email,tb_user_info.c_phonezone AS phonezone,tb_user_info.c_enabled AS enabled,tb_team_info.c_nme AS team]]><isParameterPresent ><include refid="userCommon"/></isParameterPresent><![CDATA[) a]]><dynamic prepend="WHERE"><isNotEmpty property="endRowNum" prepend="AND"><![CDATA[ ROWNUM <= #endRowNum# ]]></isNotEmpty></dynamic><![CDATA[)]]><dynamic prepend="WHERE"><isNotEmpty property="startRowNum" prepend="AND"><![CDATA[ rowIndex >= #startRowNum# ]]></isNotEmpty></dynamic></select></sqlMap>Xml代码<!-- *************************分页信息******************************** --><!--定义查询公共查询条件--><sql id="userCommon">FROM TB_USER tb_user<dynamic><isNotEmpty property="uuser" prepend="AND"><![CDA TA[ tb_user.uuser LIKE '%' || #uuser# || '%' ]]></isNotEmpty><isNotEmpty property="uname" prepend="AND"><![CDA TA[ tb_user.uname LIKE '%' || #uname# || '%' ]]></isNotEmpty></dynamic></sql><!-- 查询user表tb_user总记录数--><select id="user_queryCount" parameterClass="erDTO" resultClass="ng.Long"><![CDATA[SELECT COUNT(DISTINCT tb_user.uuid)]]><isParameterPresent><include refid="userCommon"/></isParameterPresent></select><!-- 查询user表tb_user当前页的记录信息--><select id="user_select" parameterClass="erDTO"resultClass="erDTO"><![CDATA[SELECT rowIndex,uuid,uuser,uname,upassword,uroleFROM (SELECT A.*, ROWNUM rowIndexFROM (SELECT TB_USER.UUID as uuid,TB_USER.UUSER as uuser,TB_USER.UNAME as uname,TB_USER.UPASSWORD as upassword,TB_USER.UROLE as urole]]><isParameterPresent><include refid="userCommon" /></isParameterPresent><![CDA TA[) A]]><dynamic prepend="WHERE"><isNotEmpty property="endRowNum" prepend="AND"><![CDATA[ ROWNUM <= #endRowNum# ]]></isNotEmpty></dynamic><![CDATA[)]]><dynamic prepend="WHERE"><isNotEmpty property="startRowNum" prepend="AND"><![CDA TA[ rowIndex >= #startRowNum# ]]></isNotEmpty></dynamic></select><!-- *************************分页信息end************************************* -->原文来自:雨枫技术教程网原文网址:/plus/view-168276-1.html。
mybatis sql语法

mybatis sql语法MyBatis是一种持久化框架,它可以将SQL语句与Java代码分离,提供了一种便捷的方式来操作数据库。
下面是一些常用的MyBatis SQL语法的参考内容。
1. 查询语句MyBatis中的查询语句是通过XML文件或注解来定义的。
XML文件中的查询语句通常包括以下几个部分:- `select`关键字:用于指定要查询的列。
- `from`关键字:用于指定要查询的表。
- `where`关键字:用于指定查询条件。
例如,下面是一个简单的查询语句的示例:```xml<select id="getUserById" resultType="User">select * from user where id = #{id}</select>```该语句中,`getUserById`是查询语句的唯一标识符,`#{id}`是一个占位符,用于接收传入的参数。
2. 更新语句MyBatis中的更新语句用于修改数据库表中的数据。
更新语句通常包括以下几个部分:- `update`关键字:用于指定要更新的表。
- `set`关键字:用于指定要更新的列及其新值。
- `where`关键字:用于指定更新数据的条件。
以下是一个更新语句的示例:```xml<update id="updateUser" parameterType="User">update user set name=#{name}, age=#{age} where id=#{id}</update>```该语句中,`updateUser`是更新语句的唯一标识符,`#{name}`、`#{age}`和`#{id}`是占位符,用于接收传入的参数。
3. 插入语句MyBatis中的插入语句用于向数据库表中插入新的数据。
插入语句通常包括以下几个部分:- `insert into`关键字:用于指定要插入数据的表。
mybatissql语句

mybatissql语句
1. 查询指定条件下的所有用户信息
SELECT * FROM user WHERE age>20 AND gender='male';
2. 查询用户信息并按照年龄从大到小排序
SELECT * FROM user ORDER BY age DESC;
3. 查询用户信息并按照姓名首字母的字典序排序
SELECT * FROM user ORDER BY SUBSTR(name,1,1);
4. 查询用户信息并限制返回结果数量
SELECT * FROM user LIMIT 10;
5. 插入一条新的用户信息
INSERT INTO user(name, age, gender) VALUES ('Tom', 25, 'male');
6. 更新指定用户的信息
UPDATE user SET age=30 WHERE name='Tom';
7. 删除指定用户的信息
DELETE FROM user WHERE name='Tom';
8. 查询指定条件下的用户信息,并且对查询结果进行分页
SELECT * FROM user WHERE age>20 AND gender='male' LIMIT 10 OFFSET 20;
9. 查询指定条件下的用户信息,并且使用模糊查询进行匹配SELECT * FROM user WHERE name LIKE '%Tom%';
10. 查询指定条件下的用户信息,并且对查询结果进行分组统计。
ibatis动态sql

IBATIS动态SQL直接使用JDBC一个非常普遍的问题就是动态SQL。
使用参数值、参数本身和数据列都是动态SQL,通常是非常困难的。
典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接。
对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子:<select id="getUserList" resultMap="user">select * from user<isGreaterThan prepend="and" property="id" com pareValue="0"> whereuser_id = #userId#</isGreaterThan>order by createTim edesc</select>上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。
如果参数“id”大于0,将创建下面的语句:select * from user where user_id = ? order by createTim edesc或者,如果“id”参数小于等于0,将创建下面的语句:select * from user order by createTim edesc以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:<sql id="queryCondition"><dynamic prepend="WHERE"><isGreaterThan prepend="and" property="id" com pareValue="0"> whereuser_id = #userId#</isGreaterThan></dynamic></sql><select id="getUserList" resultMap="user">select * from user<!-- 引入动态的查询条件--><include refid="queryCondition"/>order by createTim edesc</select>这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。
mybatis的sql语句及使用mybatis的动态sqlmybatis防注入

mybatis的sql语句及使⽤mybatis的动态sqlmybatis防注⼊由于看到写的⽐较详细的⽂档这⾥将之前的删掉了,只留下⼀些我认为能帮助理解的和关于动态sql及防注⼊的⼀些理解。
⽂档链接:1 <!-- 根据条件查询⽤户 -->2 <select id="queryUserByWhere" parameterType="user" resultType="user">3 SELECT id, username, birthday, sex, address FROM `user`4 WHERE 1=15 <if test="sex != null and sex != ''">6 AND sex = #{sex}7 </if>8 <if test="username != null and username != ''">9 AND username LIKE10'%${username}%'11 </if>12 </select>注意字符串类型的数据需要要做不等于空字符串校验。
上⾯的sql还有where 1=1 这样的语句,很⿇烦可以使⽤mybatis的where标签5 <!-- 根据条件查询⽤户 -->6 <select id="queryUserByWhere" parameterType="user" resultType="user">7 SELECT id, username, birthday, sex, address FROM `user`8 <!-- where标签可以⾃动添加where,同时处理sql语句中第⼀个and关键字 -->9 <where>10 <if test="sex != null">11 AND sex = #{sex}12 </if>13 <if test="username != null and username != ''">14 AND username LIKE15'%${username}%'16 </if>17 </where>18 </select>效果是⼀样的Sql中可将重复的sql提取出来,使⽤时⽤include引⽤即可,最终达到sql重⽤的⽬的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.
<select id="com.fashionfree.stat.accesslog.model.StatMemberAction.selectActionIdsO fModule"
2. 3. 4. 5. 6. 7. ;hashMap"> select moduleId, actionId from StatMemberAction <dynamic prepend="where moduleId in"> <iterate open="(" close=")" conjunction=","> #[]#
(3) 输入参数为一个 java.util.HashMap
Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. <select id="com.fashionfree.stat.accesslog.selectActionIdAndActionNumber" parameterClass="hashMap" resultMap="getActionIdAndActionNumber"> select actionId, count(*) as count from MemberAccessLog where memberId = #memberId#
select count(distinct memberId) from MemberAccessLog where accessTimestamp >= #start# and accessTimestamp < #end#
10. and actionId in $actionIdString$ 11. </select>
32. <isNotNull property="startIndex"> 33. <isNotNull property="pageSize"> 34. limit #startIndex# , #pageSize# 35. </isNotNull> 36. </isNotNull> 37. </dynamic> 38. </sql>
推荐使用第一种方式,写为< 和 > (XML 不对 CDATA 里的内容进行解析,因此如 果 CDATA 中含有 dynamic 标签,将不起作用) (9)include 和 sql 标签 将常用的 sql 语句整理在一起,便于共用:
Xml 代码 1. 2. 3. 4. 5. <sql id="selectBasicSql"> select samplingTimestamp,onlineNum,year, month,week,day,hour from
(1) 输入参数为单个值
Xml 代码 1. 2. 3. 4. 5. 6. 7. <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" parameterClass="long"> delete from MemberAccessLog where accessTimestamp = #value# </delete>
6. 7. 8. 9.
OnlineMemberNum </sql> <sql id="whereSqlBefore"> where samplingTimestamp <= #samplingTimestamp#
10. </sql> 11. <select id="com.fashionfree.accesslog.selectOnlineMemberNumsBeforeSamplingTimes tamp" parameterClass="hashmap" resultClass="OnlineMemberNum"> 12. <include refid="selectBasicSql" /> 13. <include refid="whereSqlBefore" /> 14. </select>
10. </iterate> 11. </dynamic> 12. order by 13. moduleId 14. </select>
说明:注意 select 的标签中没有 parameterClass 一项 另:这里也可以把数组放进一个 hashMap 中,但增加额外开销,不建议使用 (6)让 ibatis 把参数直接解析成字符串
Xml 代码 1. <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" paramete rClass="long"> 2. 3. 4. delete from MemberAccessLog where
5. 6.
Xml 代码 1. <select id="com.fashionfree.stat.accesslog.selectSumDistinctCountOfAccessMemberN um" 2. parameterClass="hashMap" resultClass="int">
3. 4. 5. 6. 7. 8. 9.
(2) 输入参数为一个对象
Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. <insert id="com.fashionfree.stat.accesslog.MemberAccessLog.insert" parameterClass="com.fashionfree.stat.accesslog.model.MemberAccessLog> insert into MemberAccessLog ( accessLogId, memberId, clientIP, httpMethod, actionId, requestURL, accessTimestamp, extend1, extend2, extend3 )
说明:本例中,代码应为: HashMap hashMap = new HashMap(); hashMap.put(“accessTimestamp”, someValue); pagedQuery(“com.fashionfree.stat.accesslog.selectMemberAccessLogBy”, hashMap); pagedQuery 方法首先去查找名为 com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count 的 mapped statement 来进行 sql 查询,从而得到 com.fashionfree.stat.accesslog.selectMemberAccessLogBy 查 询的记录个数, 再进行所需的 paged sql 查询 (com.fashionfree.stat.accesslog.selectMemberAccessLogBy),具体过程参见 utils 类中的 相关代码 (8)sql 语句中含有大于号>、小于号< 1. 将大于号、小于号写为: > < 如:
10. <include refid="whereSql"/> 11. </select> 12. <sql id="selectAllSql"> 13. select 14. accessLogId, memberId, clientIP, 15. httpMethod, actionId, requestURL, 16. accessTimestamp, extend1, extend2, 17. extend3 18. from 19. MemberAccessLog 20. </sql> 21. <sql id="whereSql"> 22. accessTimestamp <= #accessTimestamp# 23. </sql> 24. <sql id="countSql"> 25. select 26. count(*) 27. from 28. MemberAccessLog 29. </sql> 30. <sql id="pageSql"> 31. <dynamic>
10. and accessTimestamp > #start# 11. and accessTimestamp <= #end# 12. group by actionId
13. </select>
(4) 输入参数中含有数组
Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. <insert id="updateStatusBatch" parameterClass="hashMap"> update Question set status = #status# <dynamic prepend="where questionId in"> <isNotNull property="actionIds"> <iterate property="actionIds" open="(" close=")" conjunction=","> #actionIds[]#