ibatis实战:16个关键SQL操作示例

需积分: 12 1 下载量 79 浏览量 更新于2024-09-16 1 收藏 30KB DOCX 举报
"ibatis16个常用sql语句" Ibatis,作为一个轻量级的持久层框架,允许开发者将SQL语句直接写在XML配置文件中,与Java代码分离,提高了开发效率和可维护性。这里我们将详细探讨16个在实际应用中常见的Ibatis SQL语句。 1. 删除操作(Delete) 当输入参数为单个值时,如`accessTimestamp`,可以使用以下方式编写XML映射文件: ```xml <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" parameterClass="long"> delete from MemberAccessLog where accessTimestamp=#value# </delete> ``` 这里`#value#`是占位符,用于传递参数值到SQL语句中。 2. 插入操作(Insert) 如果输入参数是一个对象,例如`MemberAccessLog`模型,可以这样编写XML: ```xml <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 ) values ( #accessLogId#, #memberId#, #clientIP#, #httpMethod#, #actionId#, #requestURL#, #accessTimestamp#, #extend1#, #extend2#, #extend3# ) </insert> ``` 在这里,`#属性名#`用于表示对象属性值。 3. 查询操作(Select) 当输入参数是一个`HashMap`时,例如获取`actionId`和对应的访问次数,可以这样编写: ```xml <select id="com.fashionfree.stat.accesslog.selectActionIdAndActionNumber" parameterClass="hashMap" resultMap="getActionIdAndActionNumber"> select actionId, count(*) as count from MemberAccessLog where memberId = #memberId# and accessTimestamp > #start# and accessTimestamp <= #end# group by actionId </select> ``` 这里的`#memberId#`, `#start#`, 和 `#end#`分别对应HashMap中的键值。 4. 包含数组的查询(In) 当输入参数中包含数组,例如筛选`actionId`在某个数组内的记录,可以使用`<in>`标签: ```xml <!-- 示例代码省略 --> <in clause="IN" property="actionIds" open="(" close=")" separator=","> actionId </in> ``` 这里的`actionIds`是参数对象中的数组属性,`open`、`close`和`separator`分别定义了括号和分隔符。 5. 更新操作(Update) 更新操作类似于插入,但主要是修改已存在的数据,例如: ```xml <update id="updateUser" parameterClass="com.example.User"> UPDATE Users SET name = #name#, email = #email# WHERE id = #id# </update> ``` 6. 条件查询(If) 可以根据条件动态生成SQL,例如: ```xml <if test="username != null"> AND username = #{username} </if> ``` 7. 选择性插入(SelectKey) 用于在插入时生成主键值,例如: ```xml <selectKey keyProperty="id" resultType="int" order="BEFORE"> SELECT LAST_INSERT_ID() </selectKey> ``` 8. 联合查询(Union) 使用`<union>`标签可以合并多个查询结果: ```xml <select id="getUsers" resultClass="com.example.User"> <union> SELECT * FROM Users UNION SELECT * FROM OtherUsers </union> </select> ``` 9. 子查询(Subquery) 可以在SQL中嵌套查询,例如: ```xml <select id="getUsersWithMaxScore" resultClass="com.example.User"> SELECT * FROM Users WHERE score = (SELECT MAX(score) FROM Users) </select> ``` 10. 批量操作(Batch) 使用`<foreach>`标签进行批处理: ```xml <insert id="batchInsert"> INSERT INTO Users (name, email) <foreach item="item" index="index" collection="list" separator=";"> VALUES (${item.name}, ${item.email}) </foreach> </insert> ``` 11. 结果映射(ResultMap) 定义复杂的结果映射关系,包括一对一、一对多、多对一等: ```xml <resultMap id="userMap" type="com.example.User"> <id property="id" column="user_id"/> <result property="name" column="username"/> <result property="email" column="user_email"/> <association property="address" javaType="com.example.Address"> <id property="id" column="address_id"/> <result property="city" column="city"/> </association> </resultMap> ``` 12. 缓存(Cache) Ibatis支持缓存机制,提高查询性能: ```xml <cache eviction="LRU" flushInterval="60000" size="512"/> ``` 13. 动态SQL(Dynamic) 根据条件动态生成SQL语句,如`<where>`, `<if>`, `<choose>`, `<when>`, `<otherwise>`等。 14. 类型处理器(TypeHandler) 自定义类型转换,处理Java类型与数据库类型的转换问题。 15. 事务管理(Transaction) Ibatis提供了事务管理,可以控制事务的开启、提交、回滚等操作。 16. 配置全局属性(Settings) 可以在配置文件中设置全局属性,如设置日志、延迟加载等。 以上是Ibatis中16个常见的SQL语句及其应用场景,它们覆盖了CRUD操作及更复杂的查询需求,为开发者提供了强大的数据库交互能力。通过灵活运用这些语句,可以构建出高效、易维护的数据访问层。