Mybatis:在sqlBuilder中动态的生成sql语句

最近项目当中使用到MyBatis 动态语句生成的功能,我使用的是sqlBuilder,话不多说,直接上代码,StockMarketProvider.java:

public String selectByStockIdSql(){
        BEGIN();
        SELECT("*");
        FROM(TABLE_NAME);
        WHERE("stock_id = #{0}");
        return SQL();
    }

    public String updateByStockIdSql(){
        BEGIN();
        UPDATE(TABLE_NAME);
        SET("jkp=#{jkp}");
        SET("zsp=#{zsp}");
        SET("zgj=#{zgj}");
        SET("zdj=#{zdj}");
        SET("ztj=#{ztj}");
        SET("dtj=#{dtj}");
        SET("hsl=#{hsl}");
        SET("zf=#{zf}");
        SET("syl=#{syl}");
        SET("sjl=#{sjl}");
        SET("cjl=#{cjl}");
        SET("cje=#{cje}");
        SET("zsz=#{zsz}");
        SET("ltsz=#{ltsz}");
        SET("mr1=#{mr1}");
        SET("mr2=#{mr2}");
        SET("mr3=#{mr3}");
        SET("mr4=#{mr4}");
        SET("mr5=#{mr5}");
        SET("mc1=#{mc1}");
        SET("mc2=#{mc2}");
        SET("mc3=#{mc3}");
        SET("mc4=#{mc4}");
        SET("mc5=#{mc5}");
        SET("mr1_num=#{mr1Num}");
        SET("mr2_num=#{mr2Num}");
        SET("mr3_num=#{mr3Num}");
        SET("mr4_num=#{mr4Num}");
        SET("mr5_num=#{mr5Num}");
        SET("mc1_num=#{mc1Num}");
        SET("mc2_num=#{mc2Num}");
        SET("mc3_num=#{mc3Num}");
        SET("mc4_num=#{mc4Num}");
        SET("mc5_num=#{mc5Num}");
        SET("status=#{status}");
        SET("dqj=#{dqj}");
        SET("bhz=#{bhz}");
        SET("bhl=#{bhl}");
        WHERE("stock_id=#{stockId}");
        return SQL();
    }
    //SELECT * FROM market AS a WHERE a.stock_id IN (SELECT id FROM stock AS b WHERE b.`type`=1)
    //AND a.`status`=0 ORDER BY bhl DESC LIMIT 10;
    public String selectByOrderAtLimitSql(Map<String,Object> params){
        String orderby = (String)params.get("orderby");//使用Params注解,当中的名称作为key        BEGIN();
        SELECT("*");
        FROM(TABLE_NAME+" AS a");
        WHERE("a.stock_id IN (SELECT id FROM stock AS b WHERE b.type=1) and a.status=0");
        String order="DESC";
        if("bhl".equals(orderby)){
            order="DESC";
          ORDER_BY("bhl");
        }else if("hsl".equals(orderby)){
            order="ASC";
            ORDER_BY("hsl");
        }else if("zf".equals(orderby)){
            order="DESC";
            ORDER_BY("zf");
        }
        return SQL()+" "+order+" limit #{limit}";
    }

    public String selectDiefuListSql(){
        BEGIN();
        SELECT("*");
        FROM(TABLE_NAME+" AS a");
        WHERE("a.stock_id IN (SELECT id FROM stock AS b WHERE b.type=1) AND a.status=0 AND a.bhl<0 ");
        ORDER_BY("a.bhl");
        return SQL()+" limit #{0}";//我还没有查到怎样使用limit所以干脆直接加到后面了
    }

对应的StockMarketMapper.java 文件:

package com.oliver.mapper.inter;

import java.util.List;

import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;

import com.oliver.db.sql.StockMarketProvider;
import com.oliver.models.StockMarket;

public interface IStockMarketMapper {

    @InsertProvider(type=StockMarketProvider.class,method="insertStockMarketSql")
    @SelectKey(keyProperty="id",keyColumn="id", before = false, resultType = int.class, statement = { "SELECT LAST_INSERT_ID() AS ID" })
    public void insertStockMarket(StockMarket stockMarket);

    @SelectProvider(type=StockMarketProvider.class,method="selectByStockIdSql")
    @Results(value={
            @Result(id=true,property="id",column="id"),
            @Result(property="dqj",column="dqj"),
            @Result(property="bhz",column="bhz"),
            @Result(property="bhl",column="bhl"),
            @Result(property="jkp",column="jkp"),
            @Result(property="zsp",column="zsp"),
            @Result(property="zgj",column="zgj"),
            @Result(property="zdj",column="zdj"),
            @Result(property="ztj",column="ztj"),
            @Result(property="dtj",column="dtj"),
            @Result(property="hsl",column="hsl"),
            @Result(property="zf",column="zf"),
            @Result(property="syl",column="syl"),
            @Result(property="sjl",column="sjl"),
            @Result(property="cjl",column="cjl"),
            @Result(property="cje",column="cje"),
            @Result(property="zsz",column="zsz"),
            @Result(property="ltsz",column="ltsz"),
            @Result(property="mr1",column="mr1"),
            @Result(property="mr2",column="mr2"),
            @Result(property="mr3",column="mr3"),
            @Result(property="mr4",column="mr4"),
            @Result(property="mr5",column="mr5"),
            @Result(property="mc1",column="mc1"),
            @Result(property="mc2",column="mc2"),
            @Result(property="mc3",column="mc3"),
            @Result(property="mc4",column="mc4"),
            @Result(property="mc5",column="mc5"),
            @Result(property="mr1Num",column="mr1_num"),
            @Result(property="mr2Num",column="mr2_num"),
            @Result(property="mr3Num",column="mr3_num"),
            @Result(property="mr4Num",column="mr4_num"),
            @Result(property="mr5Num",column="mr5_num"),
            @Result(property="mc1Num",column="mc1_num"),
            @Result(property="mc2Num",column="mc2_num"),
            @Result(property="mc3Num",column="mc3_num"),
            @Result(property="mc4Num",column="mc4_num"),
            @Result(property="mc5Num",column="mc5_num"),
            @Result(property="status",column="status"),
            @Result(property="stockId",column="stock_id")
    })
    public StockMarket selectByStockId(int stockId);

    @UpdateProvider(type=StockMarketProvider.class,method="updateByStockIdSql")
    public void update(StockMarket stockMarket);

    @SelectProvider(type=StockMarketProvider.class,method="selectByOrderAtLimitSql")
    @Results(value={
            @Result(id=true,property="id",column="id"),
            @Result(property="dqj",column="dqj"),
            @Result(property="bhz",column="bhz"),
            @Result(property="bhl",column="bhl"),
            @Result(property="jkp",column="jkp"),
            @Result(property="zsp",column="zsp"),
            @Result(property="zgj",column="zgj"),
            @Result(property="zdj",column="zdj"),
            @Result(property="ztj",column="ztj"),
            @Result(property="dtj",column="dtj"),
            @Result(property="hsl",column="hsl"),
            @Result(property="zf",column="zf"),
            @Result(property="syl",column="syl"),
            @Result(property="sjl",column="sjl"),
            @Result(property="cjl",column="cjl"),
            @Result(property="cje",column="cje"),
            @Result(property="zsz",column="zsz"),
            @Result(property="ltsz",column="ltsz"),
            @Result(property="mr1",column="mr1"),
            @Result(property="mr2",column="mr2"),
            @Result(property="mr3",column="mr3"),
            @Result(property="mr4",column="mr4"),
            @Result(property="mr5",column="mr5"),
            @Result(property="mc1",column="mc1"),
            @Result(property="mc2",column="mc2"),
            @Result(property="mc3",column="mc3"),
            @Result(property="mc4",column="mc4"),
            @Result(property="mc5",column="mc5"),
            @Result(property="mr1Num",column="mr1_num"),
            @Result(property="mr2Num",column="mr2_num"),
            @Result(property="mr3Num",column="mr3_num"),
            @Result(property="mr4Num",column="mr4_num"),
            @Result(property="mr5Num",column="mr5_num"),
            @Result(property="mc1Num",column="mc1_num"),
            @Result(property="mc2Num",column="mc2_num"),
            @Result(property="mc3Num",column="mc3_num"),
            @Result(property="mc4Num",column="mc4_num"),
            @Result(property="mc5Num",column="mc5_num"),
            @Result(property="status",column="status"),
            @Result(property="stockId",column="stock_id")
    })
    public List<StockMarket> selectByOrderAtLimit(@Param("orderby")String orderBy, @Param("limit")int limit);

    @SelectProvider(type=StockMarketProvider.class,method="selectDiefuListSql")
       @Results(value={
               @Result(id=true,property="id",column="id"),
               @Result(property="dqj",column="dqj"),
               @Result(property="bhz",column="bhz"),
               @Result(property="bhl",column="bhl"),
               @Result(property="jkp",column="jkp"),
               @Result(property="zsp",column="zsp"),
               @Result(property="zgj",column="zgj"),
               @Result(property="zdj",column="zdj"),
               @Result(property="ztj",column="ztj"),
               @Result(property="dtj",column="dtj"),
               @Result(property="hsl",column="hsl"),
               @Result(property="zf",column="zf"),
               @Result(property="syl",column="syl"),
               @Result(property="sjl",column="sjl"),
               @Result(property="cjl",column="cjl"),
               @Result(property="cje",column="cje"),
               @Result(property="zsz",column="zsz"),
               @Result(property="ltsz",column="ltsz"),
               @Result(property="mr1",column="mr1"),
               @Result(property="mr2",column="mr2"),
               @Result(property="mr3",column="mr3"),
               @Result(property="mr4",column="mr4"),
               @Result(property="mr5",column="mr5"),
               @Result(property="mc1",column="mc1"),
               @Result(property="mc2",column="mc2"),
               @Result(property="mc3",column="mc3"),
               @Result(property="mc4",column="mc4"),
               @Result(property="mc5",column="mc5"),
               @Result(property="mr1Num",column="mr1_num"),
               @Result(property="mr2Num",column="mr2_num"),
               @Result(property="mr3Num",column="mr3_num"),
               @Result(property="mr4Num",column="mr4_num"),
               @Result(property="mr5Num",column="mr5_num"),
               @Result(property="mc1Num",column="mc1_num"),
               @Result(property="mc2Num",column="mc2_num"),
               @Result(property="mc3Num",column="mc3_num"),
               @Result(property="mc4Num",column="mc4_num"),
               @Result(property="mc5Num",column="mc5_num"),
               @Result(property="status",column="status"),
               @Result(property="stockId",column="stock_id")
       })
    public List<StockMarket> selectDiefuList(int limit);
}
时间: 2024-08-06 09:55:53

Mybatis:在sqlBuilder中动态的生成sql语句的相关文章

mysql+mybatis 在mybatis一个标签中,执行多条sql语句

然后在mybatis映射文件中的标签中,一般不能执行多条sql,如下: <insert id="addUser" parameterType="User" > insert into t_users (name,password,phone) values (#{name}, #{password},#{phone}); insert into t_dep (depname) values (#{depname}) </insert> MyS

自定义ORMapping—动态生成SQL语句

概述 之前在自定义ORMapping--关系表转换为实体或实体集合对象中提到过ORMapping的东西,在那片博客中也有ORMapping实现的一个简单思路,当时只实现了关系表转换为实体或实体集合这个功能,没有实现动态生成SQL这个部分,本片博客就是完善之前的那片博客,实现动态生成SQL语句这么一个功能. 实现思路 1.创建两个自定义特性,分别为表特性和字段特性,目的就是给相应的实体类的类名和属性名,打上相应的特性,从而创建类名和表名,属性和表字段名之间的对应关系 2.创建一个特性解析类,用来解

模拟Hibernate动态生成SQL语句

这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-

动态产生和删除相关组件并生成SQL语句

(********************************************************************************************************** * * * 窗体描述:产生SQL条件语句,系统模块 [计划管理-打卡] 打印大/小卡 *           能够根据维护进去的条件,生成过软类型: 缸内过软.缸外过软.连续皂洗.空白 * * 关键功能点:1.动态产生和删除子/父等相关组件按钮(注意移动组件位置) *        

把Excel中的数据转换成Sql语句

假如excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age ,在你的excel表格中增加一列,利用excel的公式自动生成sql语句,方法如下: 1.在你的excel表格中增加一列 2.在第一行的D列,就是D1中输入公式: =CONCATENATE("INSERT INTO PERSONS_SERIAL_NUMBER(PERSONS_NO, PERSONS_NAME,ID_NUMBER) VALUES('" & B1 &a

利用反射生成SQL语句

// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBuilder sbSql = new StringBuilder("update Students set "); // 先获得model 的Type类型 Type modeType = model.GetType(); // 通过Type类型得到它所有的公开属性 PropertyInfo[]

NO2:自动生成sql语句

SQL语句自动生成工具 大哉乾元 2016/2/26   作者原创转载请注明出处 前言 这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入占了较大的比例,为了提高sql语句的书写正确性和输入效率,做成了这个自动生成工具. 一:ADO.NET中执行sql文,对应的sql语句嵌入到vb.net的代码内,分析sql的语法格式个特点: 已检索语句为例分析: A:必须是已select开头 B:检索的字段名(一些系统函数:可选,例如max,sum

excel生成sql语句

很多时候,我们想把excel中数据导入到数据库中. 方法有很多种,比如直接拷贝然后黏贴进编辑状态的框中,这种情况有个弊端,就是excel中每列的数据必须和数据库中一一对应,这个很难,基本上不太可能,数据库中有很多的自动增长或者有默认值得数据,如果要调整成一一对应,调整excel的时间可谓花费不少时间. 下面推荐一种可以在excel中直接生成sql语句,复制进去执行就好了.思路是很清晰的,就是有个sql模板,excel中数据套进模板就可以了,下面看看excel中已经有这种强大的功能函数,直接调用就

使用注解生成sql语句

注解介绍: java SE5内置了三种,定义在java.lang中的注解: @Override,表示当前的方法定义将覆盖超类中的方法. @Deprecated,如果程序员使用了注解为它的元素,那么编译器会发出警告信息. @SuppressWarnings,关闭不当的编译器警告信息. 元注解 @Target 用来定义你的注解应用于什么地方,例如是一个方法或者一个域. CONSTRUCTOR :构造器的声明 FIELD : 域声明 METHOD :方法声明 PACKAGE : 包生明 TYPE :