SQL操作说明

QueryProvider是Obatis数据库编程的核心类,封装了多数的SQL语句操作,路径为 com.Obatis.core.sql.QueryProvider,和数据库交互的删、改、查都需要以此为桥梁进入DB 工厂类进行解析。以下主要描述一些常规的用法,更多用法可参考源码中方法注释或者参照 Obatis Demo项目

SQL操作目前仅支持MySQL数据库,其他数据库后期视情况考虑兼容性问题。

  • 查询所有数据

    /**
    * 查询所有数据
    * @return
    */
    @Override
    public List<TestModel> list() {
    /**
    * 映射sql > select * from test;
    * QueryProvider 更多用法,请参考注释
    */ QueryProvider provider = new QueryProvider();
    return this.testDAO.list(provider); }
  • 根据条件查询

    /**
    * 根据条件查询
    * @param params
    * @return
    */
    @Override
    public List<TestInfo> listByParams(TestInfo params) {
    /**
    * 映射sql > select * from test where user_name = ? and type = ?;
    * QueryProvider 更多用法,请参考注释
    */
    QueryProvider provider = new QueryProvider();
    provider.equals(TestField.FIELD_USER_NAME, params.getUserName());
    provider.equals(TestField.FIELD_TYPE, params.getType());
    return this.testDAO.list(provider, TestInfo.class);
    }
  • 分页查询

    /**
    * 分页查询
    * @param param
    * @return
    */
    @Override
    public PageInfo<TestInfo> page(PageParam param) {
    /**
    * 映射sql > select type, user_name, birthday from test where user_name = ? and type = ? limit ?,?
    * QueryProvider 更多用法,请参考注释
    */ QueryProvider provider = new QueryProvider();
    provider.select(TestField.FIELD_TYPE, TestField.FIELD_USER_NAME, TestField.FIELD_BIRTHDAY);
    provider.setPage(param);
    provider.equals(TestField.FIELD_USER_NAME, "name");
    provider.equals(TestField.FIELD_TYPE, 1);
    return this.testDAO.page(provider, TestInfo.class);
    }
  • 更新操作

    /**
    * 更新操作
    */
    public void update() {
    /**
    * 映射sql > update test set user_name = ? where id = ?
    * QueryProvider 更多用法,请参考注释
    */ QueryProvider provider = new QueryProvider();
    provider.set(TestField.FIELD_USER_NAME, "xiaoming");
    provider.equals(TestField.FIELD_ID, "123456789");
    this.testDAO.update(provider); }
  • 删除操作

    /**
    * 删除
    * 展示根据 QueryProvider 封装类删除和根据ID删除两种方式
    */
    public void delete() {
    /**
    * 映射sql > delete test where user_name = ?
    * QueryProvider 更多用法,请参考注释
    */ QueryProvider provider = new QueryProvider();
    provider.equals(TestField.FIELD_USER_NAME, "xiaoming");
    this.testDAO.update(provider);

    /**
    * 提醒:删除还提供了根据ID进行删除的方法
    * 映射sql > delete test where id = ?
    */
    this.testDAO.deleteById(new BigInteger("123456789")); }
  • 连接查询和 or 条件查询

    /**
    * 连接查询和 or 条件查询
    */
    public void leftJoin() {

    /**
    * 映射sql > select t.user_name, t.type, c.salary, c.company_name from test t left join user_company_list c on t.id=c.user_id where t.type in (?,?,?) or t.user_name=?
    * 提醒:left join 如果被连接查询的表不出现 select()则默认不查询,而主表如果出现 select()则查询列举的字段,不出现则表示查询主表所有字段。如果不查询主表字段,则设置 selectNothing() 为true,详见注释说明。
    * QueryProvider 更多用法,请参考注释
    */

    QueryProvider provider = new QueryProvider();
    provider.select(TestField.FIELD_USER_NAME, TestField.FIELD_TYPE);
    Integer[] typeArray = {1,2,3};
    provider.in(TestField.FIELD_TYPE, typeArray);
    provider.orEquals(TestField.FIELD_USER_NAME, "xiaoming");

    QueryProvider workProvider = new QueryProvider();
    workProvider.setJoinTableName("user_company_list");
    workProvider.select("salary", "company_name");
    provider.setleftJoin(TestField.FIELD_ID, "user_id", workProvider);
    this.testDAO.list(provider, TestInfo.class);

    /**
    * 拓展说明:
    * 如果要设置类似 where a = ? and (b = ? or c = ?),则把括号内语句看成是一个QueryProvider,用 addProvider() 即可,而此QueryProvider不用设置表名,相见注释说明。
    * 如果连接查询要实现两个不同的 QueryProvider 字段运算,获取字段的方法为 getColumn()。 * 如果要用到字段运算,建议使用 com.Obatis.core.sql.QueryProviderExpHandle 表达式运算类。
    * QueryProvider 更多用法,请参考注释
    */
    }