• 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_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>等,还有各个标签的属性,自己百度,找不到百度的,谷歌百度。谢谢大家!
    
    
    
  • 相关阅读:
    nginx启动时指定配置文件
    idea修改忽视文件产生得bug
    SpringBoot整合RabbitMQ出现org.springframework.amqp.AmqpException: No method found for class
    解决git速度太慢的问题,亲测有效
    HttpRequestException encountered解决方法
    mybatis大于等于小于等于的写法
    Could not initialize class sun.awt.X11GraphicsEnvironment异常处理
    CF377C Captains Mode
    AT1251 たのしいたのしい家庭菜園
    CF1057C Tanya and Colored Candies
  • 原文地址:https://www.cnblogs.com/lollipops/p/5886745.html
Copyright © 2020-2023  润新知