今天得到项目经理一项任务,就是拼装sql,第一次见到,不是太懂,赶紧回来睡一觉再说,由于这次的项目orm使用的是ibatis框架,所以需要使用动态拼装sql,或者是ognl语言,这门语言不是专属于ibatis的,而是一门独立的语言,就像EL表达式一样。

首先(摘抄一段,私密马赛,其实可以手写的)使用动态查询时ibatis的一个强大的功能,又是你已经改变WHERE子句条件的基础上你的参数对象的状态,在这种情况下的ibatis提供了一组可以映射语句中标签,这种标签的使用提高了SQL语句的重用性和灵活性的动态SQL标签。

他的大致的逻辑就是使用一些额外的标签将sql语句动态的放在xml文件中,定义向该xml文件的sql语句注入参数条件的Bean(记inBean),和利用该xml文件(也就是执行完sql语句)所输出的数据结果存在的Bean(记outBean)。这就是大致的流程。接下来我们来操练一下。(其实就是望文生义令我汗颜)。

下面是一个select语句,功能:

1、如果传递一个非空ID,那么就返回与该ID相关的雇员记录。

2、如果ID为空,就返回所有雇员ID为null 的雇员记录。

首先创建雇员的数据库表EMPLOYEE:

CREATE TABLE EMPLOYEE(

  id               INT NOT NULL auto_increment,

  first_name   VARCHAR(20) default NULL,

  last_name    VARCHAR(20) default NULL,

  salary           INT                default NULL,

PRIMARY KEY(id)

);

此表有如下的记录:

id

first_name last_name salary 
1 Zara Ali 3000
2 Roma Ali 5000
3 Noha Ali 7000

Employee POJO 类:

要执行读取操作,让我们在Employee.java文件Employee类,如下所示:

public class Employee{

    private int id;

    private String first_name;

    private String last_name;

    private int salary; /* Define constructors for the Employee class. */

    public Employee() {

  }

    public Employee(String fname, String lname, int salary) {

      this.first_name = fname;

      this.last_name = lname;

      this.salary = salary;

    } /* Here are the method definitions */

    public int getId(){

    return id;

    }

    public String getFirstName() {

      return first_name;

    }

    public String getLastName() {

      return last_name;

    }

    public int getSalary() {

      return salary;

    }

} /* End of Employee */

Employee.xml 文件:

要定义使用iBATIS SQL映射语句,我们将增加在以下文件Employee.xml修改<select>标记和这个标签定义,我们将定义一个“id”,这将被用于IbatisReadDy.java文件上执行动态SQL的SELECT查询数据库

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Employee">

<select id="findByID" resultClass="Employee">

SELECT * FROM EMPLOYEE

<dynamic prepend="WHERE ">

<isNotNull property="id">

id = #id#

</isNotNull>

</dynamic>

</select>

</sqlMap>

IbatisReadDy.java 文件:

文件将应用程序级别的逻辑从Employee表读出的条件记录:

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.*;
import java.sql.SQLException;
import java.util.*; public class IbatisReadDy{
public static void main(String[] args)
throws IOException,SQLException{
Reader rd=Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc=SqlMapClientBuilder.buildSqlMapClient(rd); /* This would read all records from the Employee table.*/
System.out.println("Going to read records.....");
Employee rec = new Employee();
rec.setId(1); List <Employee> ems = (List<Employee>)
smc.queryForList("Employee.findByID", rec);
Employee em = null;
for (Employee e : ems) {
System.out.print(" " + e.getId());
System.out.print(" " + e.getFirstName());
System.out.print(" " + e.getLastName());
System.out.print(" " + e.getSalary());
em = e;
System.out.println("");
}
System.out.println("Records Read Successfully ");
}
} 编辑运行结果:
Going to read records.....
1 Zara Ali 5000
Record Reads Successfully

ok~其他的标签<isEmpty></isEmpty>,<iterate></iterate>,<isEqual></isEqual>等,还有各个标签的属性,自己百度,找不到百度的,谷歌百度。谢谢大家!

Ibatis动态拼装sql,常用标签总结及举栗子。的更多相关文章

  1. poi导出excel,表头数据动态拼装

    /* * 第一步:拼装表头和数据 */ // 放多个sheet的集合 List<Map<String,Object>> datas = new ArrayList<Map ...

  2. 动态SQL常用标签

    动态 SQL 目的:为了摆脱在不同条件拼接 SQL 语句的痛苦 在不同条件在生成不同的SQL语句 本质上仍然是SQL语句,不过是多了逻辑代码去拼接SQL,只要保证SQL的正确性按照格式去排列组合 可以 ...

  3. editplus 替换换行 excel 表格 拼装sql语句技巧

    这样的数据 放到sql中的in 语句中的时候格式需要换行  加上‘,’这样的内容. 操作内容: 用editplus 进行操作.Ctrl+H    查找的地方输入 \n  ,替换的地方填写 ','   ...

  4. Sql语句构造类,多字段新增或修改时,拼装sql语句比较方便

    using System; using System.Collections.Generic; using System.Text; namespace MSCL { #region 使用示例 /* ...

  5. Mybatis order by语句使用<Choose><When>动态拼装无效的原因及解决方法

    在使用 <choose> <when test=""> </when> <otherwise> </otherwise> ...

  6. 一段拼装sql的小代码

    /** * 单表查询 * * className:实体类的名字 * vals:查询的属性 * pNames:条件的名字 * pVals:条件的值 */ @Override public List< ...

  7. Mybatis(一)Porxy动态代理和sql解析替换

    JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 Driver ...

  8. 简化动态MERGE的SQL计算

    MSSQL.ORACLE等数据库支持MERGE语句更新表.但表结构未知时,因为缺乏集合类数据.用存储过程获得表结构再动态拼出SQL很麻烦,代码会有几十行之多:相同原因,用Java等高级语言实现也不简单 ...

  9. MyBatis - 常用标签与动态Sql

    MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...

随机推荐

  1. 标准W3C盒子模型和IE盒子模型CSS布局经典盒子模型(转)

    盒子模型是css中一个重要的概念,理解了盒子模型才能更好的排版.其实盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型.他们对盒子模型的解释各不相同,先来看看我们熟知的标准盒子模型: 从上 ...

  2. onInterceptTouchEvent / onTouchEvent响应事件的详析

    onInterceptTouchEvent(),onTouchEvent() 默认返回false 注:事件分发机制是由 dispatchTouchEvent() 开始分发的 onInterceptTo ...

  3. Python_Day7_面向对象学习

    1.面向对象编程介绍 2.为什么要用面向对象进行开发? 3.面向对象的特性:封装.继承.多态 4.类.方法. 面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告 ...

  4. block,inline和inlinke-block细节对比

    block,inline和inlinke-block细节对比 display:block block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度 ...

  5. for(String s:v)

    s是遍历后赋值的变量,v是要遍历的list.可以通过以下语句进行测试: List<String> v=new ArrayList(); v.add("one"); v. ...

  6. SpringMVC文件上传注意事项

    简介 我在使用 idea 上传文件时遇到一些问题,费了好些时间,最后还是的队友来帮忙. 问题出现在没有熟练使用 IDE,采用 SpringMVC 上传文件主要注意几个事项. 1. 配置 bean 在 ...

  7. canvas动画

    1.动画主要是requestAnimationFrame方法,现在我们来一步步实现一个在画布内滚动的实例. html代码: <canvas id="canvas" width ...

  8. DEV控件中GridView中的复选框与CheckBox实现联动的全选功能

    最初的界面图如图1-1(全选框ID: cb_checkall  DEV控件名称:gcCon ): 要实现的功能如下图(1-2  1-3  1-4)及代码所示: 图1-2 图1-3 图1-4 O(∩_∩ ...

  9. Linux上如何执行java程序

    想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件 具体操作如下: 1.Windows上使用eclipse编译java工程,编译完成后导出 ...

  10. Putty 配图