ibatis常用的16种sql语句写法

合集下载

ibatis打印sql语句

ibatis打印sql语句

ibatis打印sql语句ibatis是一个开源的持久层框架,它可以将Java对象和SQL语句映射起来,从而简化数据库操作。

在开发和调试过程中,有时我们需要查看ibatis执行的sql语句,以便检查是否有错误或者优化性能。

本文将介绍如何使用ibatis打印sql语句,以及一些常见的问题和解决方法。

一、配置日志要想让ibatis打印sql语句,首先需要配置日志。

ibatis支持多种日志框架,如log4j、slf4j、commons-logging等。

我们可以根据自己的项目需求选择合适的日志框架,并在classpath下添加相应的jar包和配置文件。

以log4j为例,我们需要在classpath下添加log4j.jar和log4j.properties文件。

log4j.properties文件的内容如下:# 设置日志输出级别为debuglog4j.rootLogger=debug, stdout# 设置日志输出目标为控制台log4j.appender.stdout=org.apache.log4j.ConsoleAppender# 设置日志输出格式yout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n然后,我们需要在ibatis的配置文件中指定使用log4j作为日志框架。

ibatis的配置文件一般是sqlMapConfig.xml,它位于classpath下的某个目录中,例如com/example/dao/sqlMapConfig.xml。

在这个文件中,我们需要添加如下的属性:<settings><!-- 设置日志实现类为log4j --><setting name="logImpl"value="LOG4J"/></settings>这样,我们就完成了ibatis打印sql语句的基本配置。

mybatis sql语法

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语句。

ibatis sql标签用法

ibatis sql标签用法

ibatis sql标签用法iBATIS SQL标签用法iBATIS是一种基于Java的持久层框架,用于将关系数据库中的数据映射到Java对象。

在iBATIS中,SQL标签是一种用于编写和管理SQL语句的标签。

1. select标签:用于执行数据库查询操作。

它可以用于指定要查询的表名、字段名,以及查询条件等。

例如:<select id="selectUser" parameterType="int" resultType="User">SELECT * FROM Users WHERE id = #{id}</select>2. insert标签:用于执行数据库插入操作。

它可以用于指定要插入的表名和字段名,以及插入的值。

例如:<insert id="insertUser" parameterType="User">INSERT INTO Users (username, password) VALUES (#{username},#{password})</insert>3. update标签:用于执行数据库更新操作。

它可以用于指定要更新的表名和字段名,以及更新的条件和新值。

例如:<update id="updateUser" parameterType="User">UPDATE Users SET username = #{newUsername}, password =#{newPassword} WHERE id = #{id}</update>4. delete标签:用于执行数据库删除操作。

它可以用于指定要删除的表名和删除条件。

例如:<delete id="deleteUser" parameterType="int">DELETE FROM Users WHERE id = #{id}</delete>这些是iBATIS中常用的SQL标签的用法。

ibatis in 传参数

ibatis in 传参数

ibatis in 传参数
在iBatis中,传递参数通常是通过SQL语句来实现的。

iBatis 提供了多种方式来传递参数,包括基本类型参数、对象类型参数和Map类型参数。

首先,对于基本类型参数,可以直接在SQL语句中使用“#”符号来引用参数,例如:
SELECT FROM table_name WHERE column_name = #param#。

这里的“param”就是传递的基本类型参数。

其次,对于对象类型参数,可以在SQL语句中使用“#”符号来引用对象的属性,例如:
SELECT FROM table_name WHERE column1 =
#object.property1# AND column2 = #object.property2#。

这里的“object”就是传递的对象类型参数。

另外,对于Map类型参数,可以在SQL语句中使用“#”符号来引用Map中的键值对,例如:
SELECT FROM table_name WHERE column1 = #mapKey1# AND column2 = #mapKey2#。

这里的“mapKey1”和“mapKey2”就是传递的Map类型参数中的键。

除了以上介绍的方式,iBatis还支持动态SQL,可以根据参数的不同情况动态生成SQL语句,从而实现灵活的参数传递。

总的来说,iBatis提供了多种灵活的方式来传递参数,开发人员可以根据具体的需求选择合适的方式来实现参数传递。

希望以上回答能够帮助到你。

ibaties 别名定义语法

ibaties 别名定义语法

ibatis 别名是一种在 SQL 文件或 XML 文件中给 SQL 语句定义别名的语法规则。

通过使用别名,可以让 SQL 语句或 XML 文件中的代码更加清晰易读,减少重复编写代码的工作量,提高代码的可维护性和可读性。

在 ibatis 中,别名定义语法可以应用于表名、列名、SQL 语句等多个方面,为开发人员提供了便利的编程方式。

本文主要围绕 ibatis 别名的定义语法展开讨论,帮助读者更好地理解和应用这一语法规则。

一、ibatis 别名的定义方式在 ibatis 中,别名的定义方式有两种:使用 <typeAlias> 标签和<resultMap> 标签。

1. 使用 <typeAlias> 标签定义别名<typeAlias> 标签可以用来定义 Java 类别名、简单类型别名、哈希表和数组别名。

其基本语法如下:```<typeAlias alias="AliasName" type=.example.javaClass"/>```其中,alias 表示定义的别名,type 表示所关联的 Java 类的全限定名。

通过这种方式,可以在 SQL 文件或 XML 文件中使用 AliasName 来代替.example.javaClass。

2. 使用 <resultMap> 标签定义别名<resultMap> 标签用来映射查询结果集中的列到对象的属性,也可以用来定义列的别名。

其基本语法如下:```<resultMap id="aliasMap" class=.example.Entity"><result property="property1" column="column1" /><result property="property2" column="column2" /></resultMap>```其中,id 表示定义的别名,class 表示所关联的 Java 类的全限定名,property 表示 Java 对象的属性名,column 表示查询结果集中的列名。

ibatis annotations in 条件

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 iterate用法

ibatis iterate用法

ibatis iterate用法iBatis Iterate 用法iBatis 是一种轻量级的持久化框架,它提供了许多便捷的方法来操作数据库。

其中,iterate方法是在进行批量查询时非常实用的功能。

本文将详细介绍iterate的用法,并提供示例代码。

什么是iterate方法?iterate方法是 iBatis 中用于批量查询的一种方式,它可以高效地返回一个包含查询结果的迭代器。

与传统的查询列表不同,使用iterate方法可以节省内存并提高查询性能。

用法示例下面是一些常见的iterate方法的用法示例:1. 基本用法SqlSession session = ();try {Iterator<Object> it = ("statementId", parameter);while (()) {Object obj = ();// 处理查询结果}} finally {();}2. 结果映射<select id="statementId" parameterType="parameterTy pe" resultMap="resultMap">SELECT * FROM table</select><!-- resultMap 配置 --><resultMap id="resultMap" type="resultType"><!-- 字段映射 --></resultMap>3. 根据条件查询Map<String, Object> parameter = new HashMap<>(); ("fieldName", value);Iterator<Object> it = ("statementId", parameter);while (()) {Object obj = ();// 处理查询结果}4. 使用 RowBoundsint offset = 0;int limit = 10;RowBounds rowBounds = new RowBounds(offset, limit);Iterator<Object> it = ("statementId", parameter, rowBoun ds);while (()) {Object obj = ();// 处理查询结果}5. 动态 SQL<select id="statementId" parameterType="parameterTy pe" resultMap="resultMap">SELECT * FROM table<where><!-- 动态条件 --></where></select>总结iterate方法是 iBatis 中用于批量查询的一种高效方式,它可以帮助我们节省内存并提高查询性能。

ibatis动态注入

ibatis动态注入

转:IBATIS动态SQL直接使用JDBC一个非常普遍的问题就是动态SQL。

使用参数值、参数本身和数据列都是动态SQL,通常是非常困难的。

典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接。

对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子:<select id="getUserList" resultMap="user">select * from user<isGreaterThan prepend="and" property="id" compareValue="0">where user_id = #userId#</isGreaterThan>order by createTime desc</select>上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。

如果参数“id”大于0,将创建下面的语句:select * from user where user_id = ? order by createTime desc或者,如果“id”参数小于等于0,将创建下面的语句:select * from user order by createTime desc以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:<sql id="queryCondition"><dynamic prepend="WHERE"><isGreaterThan prepend="and" property="id" compareValue="0">where user_id = #userId#</isGreaterThan></dynamic></sql><select id="getUserList" resultMap="user">select * from user<!-- 引入动态的查询条件--><include refid="queryCondition"/>order by createTime desc</select>这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。

ibatis在debug时打印完整的SQL语句

ibatis在debug时打印完整的SQL语句

ibatis在debug时打印完整的SQL语句这些年做的项⽬中,对持久层的选型更多的是基于ibatis,⽽且⾃⼰涂鸦的系统开发框架数据层操作也是居于ibatis实现的,不为别的,就因为ibatis使⽤的是纯jdbc操作。

时下流⾏凡是都“原始回归”,“如果能把ibatis进⾏更好地理解和扩展,也不乏为⼀个优秀的杜撰框架”,基于这样的想法,好长时间⾥,我⼀直是钟情于ibatis的源码学习,⾃然从中也学到了很多有⽤的东西,设计模式、算法分析、构建思想和⼀些优秀的API实体类⼯具等。

好,先来⼏句赞美ibatis的浮夸。

ibatis 是⼀个 O/R Mapping 解决⽅案, ibatis 最⼤的特点就是⼩巧,上⼿很快。

如果你不需要太多复杂的功能, ibatis 是能满⾜你的要求⼜⾜够灵活的最简单的解决⽅案。

ibatis 以SQL开发的⼯作量和数据库移植性上的让步,为系统设计提供了更⼤的⾃由空间。

ibatis 底层采⽤纯JDBC操作,要求操作⼈员直接编写sql进⾏操作,光从这点看,ibatis本⾝就⼤⼤地提⾼数据层操作的透明度。

好啦,改⼲正事了,这⾥我主要解决的就是⼀个常见的问题,即使⽤ibatis时需要在控制台或⽇志⽂件中打印其当前执⾏的完整sql,⽽不是常见的参数问号?语句。

(这⾥主要基于ibatis2.0以上版本)。

步骤:1.⽹上下⼀个源码⽂件(没有可找我,我发⼀份给你,我的QQ群:91377268)2. 最终API执⾏流程,这⾥以insert为例。

具体顺序如下图:3. 最终根源找到,即修改com.ibatis.sqlmap.engine.execution.SqlExecutor即可。

在代码66⾏处有如下⽅法public int executeUpdate(StatementScope statementScope, Connection conn, String sql, Object[] parameters) throws SQLException {;}insert最终执⾏的就是这个⽅法,恩,就是它了,改吧4. 在类体中引⼊⽇志打印⼯具private static final Log log = LogFactory.getLog(SqlExecutor.class);5. 添加debug下执⾏sql打印信息在ps.execute(); 执⾏前添加如下:代码if (log.isDebugEnabled()) {int count = ps.getParameterMetaData().getParameterCount();for (int i = 0; i < count; i++) {sql = sql.replaceFirst("\\?", parameters[i].getClass().getName().equals("ng.String") ? "'"+parameters[i].toString()+"'" : parameters[i].toString());}log.debug("===当前执⾏SQL为===" + sql + ".");}还是贴⼀下完整的⽅法吧,省得有⼈抱怨我,O(∩_∩)O哈哈~代码public int executeUpdate(StatementScope statementScope, Connection conn, String sql, Object[] parameters) throws SQLException {ErrorContext errorContext = statementScope.getErrorContext();errorContext.setActivity("executing update");errorContext.setObjectId(sql);PreparedStatement ps = null;setupResultObjectFactory(statementScope);int rows = 0;try {errorContext.setMoreInfo("Check the SQL Statement (preparation failed).");ps = prepareStatement(statementScope.getSession(), conn, sql);setStatementTimeout(statementScope.getStatement(), ps);errorContext.setMoreInfo("Check the parameters (set parameters failed).");statementScope.getParameterMap().setParameters(statementScope, ps, parameters);errorContext.setMoreInfo("Check the statement (update failed).");//打印调试信息 startif (log.isDebugEnabled()) {int count = ps.getParameterMetaData().getParameterCount();for (int i = 0; i < count; i++) {sql = sql.replaceFirst("\\?", parameters[i].getClass().getName().equals("ng.String") ? "'"+parameters[i].toString()+"'" : parameters[i].toString());}log.debug("===当前执⾏SQL为===" + sql + ".");}//打印调试信息 endps.execute();rows = ps.getUpdateCount();} finally {closeStatement(statementScope.getSession(), ps);}return rows;}Ok,主要的⼯作就是这样,下⾯开启commons-logging\log4j的debug模式测试⼀下吧。

ibatis in查询例子

ibatis in查询例子

ibatis in查询例子1. 简介ibatis是一种基于Java的持久层框架,以其灵活易用的特点受到广泛关注和应用。

其中,in查询是ibatis中常用的一种查询方式,用于查询满足指定条件的多个结果。

2. in查询语法在ibatis中,in查询可以通过在SQL语句中使用in关键字完成。

in查询的语法如下:```SELECT * FROM table_name WHERE column_name IN (value1, value2, value3, ...);```其中,value1、value2、value3等表示要查询的值,可以是数字、字符串或其他类型的数据。

3. in查询的使用场景in查询适用于需要查询多个值的情况,可以简化SQL语句的编写,提高查询效率。

常见的应用场景包括:- 查询某个字段的多个值,如查询多个用户的信息;- 根据多个条件查询数据,如查询某个时间段内的订单信息;- 对某个字段进行范围查询,如查询某个价格区间内的商品信息。

4. 示例一:查询多个用户的信息假设有一个用户表user,其中有一个字段为id,现在需要查询id 为1、2、3的用户信息。

可以使用in查询来实现:```SELECT * FROM user WHERE id IN (1, 2, 3);```该查询语句将返回id为1、2、3的用户信息。

5. 示例二:根据多个条件查询订单信息假设有一个订单表order,其中有两个字段为order_id和order_status,现在需要查询订单状态为1、2、3的订单信息。

可以使用in查询来实现:```SELECT * FROM order WHERE order_status IN (1, 2, 3);```该查询语句将返回订单状态为1、2、3的订单信息。

6. 示例三:对某个字段进行范围查询假设有一个商品表product,其中有一个字段为price,现在需要查询价格在100到200之间的商品信息。

iBatisSQL各种标签用法

iBatisSQL各种标签用法

iBatisSQL各种标签⽤法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" compareValue="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="int"> <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>原⽂:--------------------------------------------------------------------------------------------------------直接使⽤JDBC⼀个⾮常普遍的问题就是动态SQL。

ibatis foreach写法

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 中 sql方法

mybatis 中 sql方法MyBatis是一种流行的Java持久化框架,它将 SQL 语句与 Java 对象映射起来,从而实现了数据访问的自动化。

在 MyBatis 中,我们可以使用多种 SQL 方法来执行数据操作。

以下是 MyBatis 中常用的 SQL 方法:1. selectselect 方法用于查询数据,可以返回单个对象或对象列表。

select 方法支持多个参数,如查询条件、排序方式、分页等。

例如: <select id='selectUserById' resultType='User'>select * from user where id = #{id}</select>2. insertinsert 方法用于插入数据,可以插入单个对象或对象列表。

insert 方法支持多个参数,如插入对象属性、返回主键值等。

例如: <insert id='insertUser' parameterType='User'>insert into user (name, age) values (#{name}, #{age})</insert>3. updateupdate 方法用于更新数据,可以更新单个对象或对象列表。

update 方法支持多个参数,如更新条件、更新内容等。

例如:<update id='updateUser' parameterType='User'>update user set name = #{name}, age = #{age} where id = #{id}</update>4. deletedelete 方法用于删除数据,可以删除单个对象或对象列表。

delete 方法支持多个参数,如删除条件等。

例如:<delete id='deleteUserById'>delete from user where id = #{id}</delete>除了以上常用的 SQL 方法之外,MyBatis 还支持多表关联查询、动态 SQL、存储过程调用等功能,可以帮助我们更便捷地进行复杂的数据操作。

ibatis delete示例

ibatis delete示例

ibatis delete示例iBATIS(现在被称为MyBatis)是一个流行的持久层框架,用于在Java中管理数据库访问。

在iBATIS(MyBatis)中,删除数据是通过SQL语句来实现的。

下面是一个简单的iBATIS(MyBatis)删除示例:假设我们有一个名为User的实体类,对应数据库中的用户表。

我们想要删除一个名为"John"的用户,可以使用如下的iBATIS (MyBatis)示例代码:首先,我们需要在XML映射文件中定义删除操作的SQL语句,比如在UserMapper.xml文件中:xml.<!-UserMapper.xml -->。

<delete id="deleteUser" parameterType="int">。

DELETE FROM user.WHERE username = #{username}。

</delete>。

然后,在Java代码中,我们可以调用这个删除操作,比如在UserDao接口中:java.// UserDao.java.public interface UserDao {。

void deleteUser(String username);}。

最后,在实际的业务逻辑中调用UserDao接口的deleteUser方法来执行删除操作,比如在Service层的代码中:java.// UserService.java.public class UserService {。

private UserDao userDao; // 假设已经注入了UserDao实例。

public void deleteUser(String username) {。

userDao.deleteUser(username);}。

}。

在这个示例中,我们通过定义XML映射文件和Java接口来实现了iBATIS(MyBatis)中的删除操作。

mybatis的sql语句中,表达式的编写方式

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中常用的表达式编写方式,根据业务需求和个人喜好选择合适的方式即可。

IBatis.net输出SQL语句(七)

IBatis.net输出SQL语句(七)

输出SQL语句(七) 输出⽣成的SQL语句到控制台,能够⽅便调试。

如果要想输出的SQL语句到控制台,那么只需要做如下配置即可:<configSections><!-- 输出执⾏的SQL语句到控制台 --><sectionGroup name="iBATIS"><section name="logging" type="mon.Logging.ConfigurationSectionHandler, mon"/></sectionGroup></configSections><iBATIS><logging><logFactoryAdapter type="mon.Logging.Impl.TraceLoggerFA, mon"><arg key="showLogName" value="true"/><arg key="showDataTime" value="true"/><arg key="level" value="ALL"/><arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:SSS"/></logFactoryAdapter></logging></iBATIS> 那么显⽰结果如下: 另外,利⽤log4net,能够很轻易地把SQL语句⽣成到⽂件上。

只需做如下配置:<configSections><!-- 输出执⾏的SQL语句 --><sectionGroup name="iBATIS"><section name="logging" type="mon.Logging.ConfigurationSectionHandler, mon"/> </sectionGroup><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/></configSections><iBATIS><logging><logFactoryAdapter type="mon.Logging.Impl.Log4NetLoggerFA, mon.Logging.Log4Net"> <arg key="configType" value="inline"/></logFactoryAdapter></logging></iBATIS><log4net><!-- 定义输出的附加信息,⼤⼩,输出到的⽂件等等 --><appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><param name="File" value="f:\log.txt"/><param name="AppendToFile" value="true"/><param name="MaxSizeRollBackups" value="2"/><param name="MaximumFileSize" value="100KB"/><param name="RollingStyle" value="Size"/><param name="StaticLogFileName" value="true"/><layout type="yout.PatternLayout"><param name="Header" value="[Header]\r\n"/><param name="Footer" value="[Footer]\r\n"/><param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/></layout></appender><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="yout.PatternLayout"><param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n"/></layout></appender><!-- 设置错误的级别以及附加信息 --><root><level value="DEBUG"/><appender-ref ref="RollingLogFileAppender"/><appender-ref ref="ConsoleAppender"/></root><!-- 只是打印错误信息的级别 --><logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel"><level value="DEBUG"/></logger><logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory"> <level value="DEBUG"/></logger><logger name="zyLoadList"><level value="DEBUG"/></logger><logger name="IBatisNet.DataAccess.DaoSession"><level value="DEBUG"/></logger><logger name="IBatisNet.DataMapper.SqlMapSession"><level value="DEBUG"/></logger><logger name="mon.Transaction.TransactionScope"><level value="DEBUG"/></logger><logger name="IBatisNet.DataAccess.Configuration.DaoProxy"><level value="DEBUG"/></logger></log4net> 在F盘⽣成⽂件如下:。

Ibatis sql语句公共部分写法

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。

IBATIS常用的16种SQL语句写法

IBATIS常用的16种SQL语句写法

accessTimestamp &lt;= #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写法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}`占位符来传递参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12.group by actionId
13.</select>
(4)输入参数中含有数组
Xml代码
1.<insertid="updateStatusBatch"parameterClass="hashMap">
2.update
3.Question
4.set
5.status= #status#
6.<dynamicprepend="where questionId in">
(11)将SQL GROUP BY分组中的字段拼接
Xml代码
1.<sqlid=”selectGroupBy>
2.SELECT
3.a.answererCategoryId, a.answererId, a.answererName,
4.a.questionCategoryId, a.score, a.answeredNum,
2.resultClass="hashMap">
3.select
4.moduleId, actionId
5.from
6.StatMemberAction
7.<dynamicprepend="where moduleId in">
8.<iterateopen="("close=")"conjunction=",">
2.delete from
3.MemberAccessLog
4.where
5.accessTimestamp &lt;= #value#
6.</delete>
2.将特殊字符放在xml的CDATA区内:
Xml代码
1.<deleteid="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore"parameterClass="long">
7.<isNotNullproperty="actionIds">
8.<iterateproperty="actionIds"open="("close=")"conjunction=",">
9.#actionIds[]#
10.</iterate>
11.</isNotNull>
12.</dynamic>
(7)分页查询(pagedQuery)
Java代码
1.<select id="com.fashionfree.stat.accesslog.selectMemberAccessLogBy"
2.parameterClass="hashMap"resultMap="MemberAccessLogMap">
pagedQuery方法首先去查找名为com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count的mapped statement来进行sql查询,从而得到com.fashionfree.stat.accesslog.selectMemberAccessLogBy查询的记录个数,
11.(
12.#accessLogId#, #memberId#,
13.#clientIP#, #httpMethod#,
14.#actionId#, #requestURL#,
15.#accessTimestamp#, #extend1#,
16.#extend2#, #extend3#
17.)
18.</insert>
21.<sql id="whereSql">
22.accessTimestamp &lt;= #accessTimestamp#
23.</sql>
24.<sql id="countSql">
25.select
26.count(*)
27.from
28.MemberAccessLog
29.</sql>
30.<sql id="pageSql">
13.</insert>
说明:actionIds为传入的数组的名字;
使用dynamic标签避免数组为空时导致sql语句语法出错;
使用isNotNull标签避免数组为null时ibatis解析出错
(5)传递参数只含有一个数组
Xml代码
1.<selectid="com.fashionfree.stat.accesslog.model.StatMemberAction.selectActionIdsOfModule"
38.</sql>
说明:本例中,代码应为:
HashMap hashMap = new HashMap();
hashMap.put(“accessTimestamp”, someValue);
pagedQuery(“com.fashionfree.stat.accesslog.selectMemberAccessLogBy”, hashMap);
7.</sql>
8.<sqlid="whereSqlBefore">
9.where samplingTimestamp &lt;= #samplingTimestamp#
10.</sql>
11.<selectid="com.fashionfree.accesslog.selectOnlineMemberNumsBeforeSamplingTimestamp"parameterClass="hashmap"resultClass="OnlineMemberNum">
9.#[]#
10.</iterate>
11.</dynamic>
12.order by
13.moduleId
14.</select>
说明:注意select的标签中没有parameterClass一项
另:这里也可以把数组放进一个hashMap中,但增加额外开销,不建议使用
(6)让ibatis把参数直接解析成字符串
12.<includerefid="selectBasicSql"/>
13.<includerefid="whereSqlBefore"/>
14.</select>
注意:sql标签只能用于被引用,不能当作mapped statement。如上例中有名为selectBasicSql的sql元素,试图使用其作为sql语句执行是错误的:
再进行所需的paged sql查询(com.fashionfree.stat.accesslog.selectMemberAccessLogBy),具体过程参见utils类中的相关代码
(8)sql语句中含有大于号>、小于号<
1.将大于号、小于号写为:&gt; &lt;如:
Xml代码
1.<deleteid="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore"parameterClass="long">
5.from
6.MemberAccessLog
7.where
8.accessTimestamp &gt;= #start#
9.and accessTimestamp &lt; #end#
10.and actionId in $actionIdString$
11.</select>
说明:使用这种方法存在sql注入的风险,不推荐使用
3.<include refid="selectAllSql"/>
4.<include refid="whereSql"/>
5.<include refid="pageSql"/>
6.</select>
7.<select id="com.fashionfree.stat.accesslog.selectMemberAccessLogBy.Count"
6.accessTimestamp= #value#
7.</delete>
(2)输入参数为一个对象
Xml代码
1.<insertid="com.fashionfreAccessLog.insert"
2.parameterClass="com.fashionfree.stat.accesslog.model.MemberAccessLog>
(1)输入参数为单个值
Xml代码
1.<deleteid="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore"
2.parameterClass="long">
3.delete from
相关文档
最新文档