概述 核心概述 包类的自动扫描(AutoScan) 依赖注入(IoC) 方法拦截(AOP) 记录类属性状态 (PropertyState) 事件服务(Event) 模块(Module) 国际化(I18N) Lang 配置体系概述 配置体系目录结构及配置 示例一:解析XML配置 示例二:解析Properties配置 配置体系模块更多操作 日志概述 日志模块配置 使用示例 JDBC持久化概述及模块配置 数据源(DataSource) 数据实体(Entity) 自动生成实体类(方式一) 自动生成实体类(方式二) 事务(Transaction) 会话(Session) 数据实体操作 结果集(ResultSet) 查询(Query) 存储器(Repository) 高级特性—多表查询及自定义结果集数据处理 高级特性—存储过程调用与结果集数据处理 高级特性—数据库锁操作 插件概述 插件工厂 自定义插件工厂 插件结构 插件的实现及使用 服务概述 服务端(Server)示例 客户端(Client)示例 客户端和服务端对象的使用 验证概述 默认验证器及参数说明 默认国际化资源文件内容 验证框架使用示例 自定义验证器 缓存概述 缓存模块配置 缓存模块使用示例 WebMVC概述 模块初始化及配置说明 控制器(Controller) 控制器参数(Parameter) 环境上下文对象(WebContext) 文件上传(Upload) 视图(View) 验证(Validation) 缓存(Cache) 拦截器(Intercept) Cookies操作 国际化(I18N) 约定模式(Convention Mode) 高级特性—控制器请求处理器 高级特性—异常错误处理器

概述

YMP在线手册

浏览13637
更新时间2022-04-11

本节主要介绍YMP框架v2版本中新增的特性,辅助开发人员像写Java代码一样编写SQL语句,在一定程度上替代传统字符串拼接的模式,再配合数据实体的字段常量一起使用,这样做的好处就是降低字符串拼接过程中出错的机率,一些特定问题编译期间就能发现,因为Java代码就是SQL语句!

基础参数对象
  • Fields:字段名称集合对象,用于辅助拼接数据表字段名称,支持前缀、别名等;

    示例代码:

    // 创建Fields对象
    Fields _fields = Fields.create("username", "pwd", "age");
    // 带前缀和别名
    _fields.add("u", "sex", "s");
    // 带前缀
    _fields = Fields.create().add("u", "id").add(_fields);
    // 标记集合中的字段为排除的
    _fields.excluded(true);
    // 判断是否存在排除标记
    _fields.isExcluded();
    // 输出
    System.out.println(_fields.fields());

    执行结果:

    [u.id, username, pwd, age, u.sex s]
  • Params:参数集合对象,主要用于存储替换SQL语句中?号占位符;

    示例代码:

    // 创建Params对象,任何类型参数
    Params _params = Params.create("p1", 2, false, 0.1).add("param");
    // 
    _params = Params.create().add("paramN").add(_params);
    // 输出
    System.out.println(_params.params());

    执行结果:

    [paramN, p1, 2, false, 0.1, param]
  • Pages:分页参数对象;

    示例代码:

    // 查询每1页, 默认每页20条记录
    Page.create(1);
    // 查询第1页, 每页10条记录
    Page.create(1).pageSize(10);
    // 查询第1页, 每页10条记录, 不统计总记录数
    Page.create(1).pageSize(10).count(false);
  • Cond:条件参数对象,用于生成SQL条件和存储条件参数;

    示例代码:

    生成如下SQL条件:

    • (username like ? and age >= ?) or (sex = ? and age < ?)
    Cond _cond = Cond.create()
        .bracketBegin().like("username").param("%ymp%").and().gtEq("age").param(20).bracketEnd()
        .or()
        .bracketBegin().eq("sex").param("F").and().lt("age").param(18).bracketEnd();
    
    System.out.println("SQL: " + _cond.toString());
    System.out.println("参数: " + _cond.params().params());

    执行结果:

    SQL: ( username LIKE ? AND age >= ? )  OR  ( sex = ? AND age < ? ) 
    参数: [%ymp%, 20, F, 18]
  • OrderBy:排序对象,用于生成SQL条件中的Order By语句;

    示例代码:

    OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday");
    //
    System.out.println(_orderBy.toSQL());

    执行结果:

    ORDER BY age, u.birthday DESC
  • GroupBy:分组对象,用于生成SQL条件中的Group By语句;

    示例代码:

    GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept"))
        .having(Cond.create().lt("age").param(18));
    
    System.out.println("SQL: " + _groupBy.toString());
    System.out.println("参数: " + _groupBy.having().params().params());

    执行结果:

    SQL: GROUP BY u.sex, dept HAVING age < ?
    参数: [18]
  • Where:Where语句对象,用于生成SQL语句中的Where子句;

    示例代码:

    Cond _cond = Cond.create()
            .like("username").param("%ymp%")
            .and().gtEq("age").param(20);
    
    OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday");
    
    GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept"));
    
    Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("username");
    
    _where.orderBy().orderBy(_orderBy);
    //
    System.out.println("SQL: " + _where.toString());
    System.out.println("参数: " + _where.getParams().params());

    执行结果:(为方便阅读,此处美化了SQL的输出格式:P)

    SQL: WHERE
             username LIKE ?
         AND age >= ?
         GROUP BY
             u.sex,
             dept
         ORDER BY
             username DESC,
             age,
             u.birthday DESC
    参数: [%ymp%, 20]
  • Join:连接语句对象,用于生成SQL语句中的Join子句,支持left、right和inner连接;

    示例代码:

    Join _join = Join.inner("user_ext").alias("ue")
        .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id"));
    
    System.out.println(_join);

    执行结果:

    INNER JOIN user_ext ue ON ue.uid = u.id
  • Union:联合语句对象,用于将多个Select查询结果合并;

    示例代码:

    Select _select = Select.create("user").where(Where.create(Cond.create().eq("dept").param("IT")))
            .union(Union.create(
                    Select.create("user").where(Where.create(Cond.create().lt("age").param(18)))));
    //
    System.out.println("SQL: " + _select.toString());
    System.out.println("参数: " + _select.getParams().params());

    执行结果:

    SQL: SELECT  *  FROM user WHERE dept = ?  UNION SELECT  *  FROM user WHERE age < ?   
    参数: [IT, 18]
Select:查询语句对象
示例代码:

    Cond _cond = Cond.create()
            .like("u", "username").param("%ymp%")
            .and().gtEq("u", "age").param(20);
    //
    GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("u", "dept"));
    //
    Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("u", "username");
    //
    Join _join = Join.inner("user_ext").alias("ue")
            .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id"));
    //
    Select _select = Select.create(User.class, "u")
            .field("u", "username").field("ue", "money")
            .where(_where)
            .join(_join)
            .distinct();
    //
    System.out.println("SQL: " + _select.toString());
    System.out.println("参数: " + _select.getParams().params());

执行结果:(为方便阅读,此处美化了SQL的输出格式:P)

    SQL: SELECT DISTINCT
                u.username,
                ue.money
            FROM
                USER u
            INNER JOIN user_ext ue ON ue.uid = u.id
            WHERE
                u.username LIKE ?
            AND u.age >= ?
            GROUP BY
                u.sex,
                u.dept
            ORDER BY
                u.username DESC 
    参数: [%ymp%, 20]
Insert:插入语句对象
示例代码:

    Insert _insert = Insert.create(User.class)
            .field(User.FIELDS.ID).param("123456")
            .field(User.FIELDS.AGE).param(18)
            .field(User.FIELDS.USER_NAME).param("suninformation");
    //
    System.out.println("SQL: " + _insert.toString());
    System.out.println("参数: " + _insert.params().params());

执行结果:

    SQL: INSERT INTO user (id, age, username) VALUES (?, ?, ?)
    参数: [123456, 18, suninformation]
Update:更新语句对象
示例代码:

    Update _update = Update.create(User.class)
            .field(User.FIELDS.PWD).param("xxxx")
            .field(User.FIELDS.AGE).param(20)
            .where(Where.create(
                    Cond.create().eq(User.FIELDS.ID).param("123456")));
    //
    System.out.println("SQL: " + _update.toString());
    System.out.println("参数: " + _update.getParams().params());

执行结果:

    SQL: UPDATE user SET pwd = ?, age = ? WHERE id = ? 
    参数: [xxxx, 20, 123456]
Delete:删除语句对象
示例代码:

    Delete _delete = Delete.create(User.class)
            .where(Where.create(
                    Cond.create().eq(User.FIELDS.ID).param("123456")));
    //
    System.out.println("SQL: " + _delete.toString());
    System.out.println("参数: " + _delete.getParams().params());

执行结果:

    SQL: DELETE  FROM user WHERE id = ? 
    参数: [123456]
SQL:自定义SQL语句

同时也用于ISession会话接口参数封装;

示例代码:

// 自定义SQL语句
SQL _sql = SQL.create("select * from user where age > ? and username like ?").param(18).param("%ymp%");
// 执行
session.find(_sql, IResultSetHandler.ARRAY);

// 或封装语句对象
SQL.create(_select);
SQL.create(_insert);
SQL.create(_update);
SQL.create(_delete);
BatchSQL:批量SQL语句对象

主要用于ISession会话对批量操作的参数封装;

示例代码:

// 定义批操作
BatchSQL _sqls = BatchSQL.create("INSERT INTO user (id, age, username) VALUES (?, ?, ?)")
        .addParameter(Params.create("xxxx", 18, "user0"))
        .addParameter(Params.create("xxx1", 20, "user1"))
        .addParameter(Params.create("xxxN", 20, "userN"))
        .addSQL("DELETE  FROM user WHERE age > 30")
        .addSQL("DELETE  FROM user WHERE age < 18");
// 执行
session.executeForUpdate(_sqls);
EntitySQL:实体参数封装对象

主要用于ISession会话的参数封装;

示例代码:

session.find(EntitySQL.create(User.class)
            .field(Fields.create(User.FIELDS.ID, User.FIELDS.USER_NAME)
                    .excluded(true)));

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

64.9万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.2万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.6万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.3万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.1万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载