Ibatis动态拼装sql,常用标签总结及举栗子。

今天得到项目经理一项任务,就是拼装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_namelast_namesalary 
1ZaraAli3000
2RomaAli5000
3NohaAli7000

 

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>等,还有各个标签的属性,自己百度,找不到百度的,谷歌百度。谢谢大家!
 
  

 

 

转载于:https://www.cnblogs.com/lollipops/p/5886745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值