基础封装
封装单个对象查询
// 1.获取dao
Dao dao = new NutDao(dataSource); // 伪代码
Sql sql = Sqls.create("select * from tb_user").setParam("name", "小明"); // 伪代码
// 2.使用nutz自带的reocrd对象
sql.setCallback(Sqls.callback.record())
// 3.实体设置
sql.setEntity(dao.getEntity(Record.class)); // 可自定义实体
// 4.执行sql
dao.execute(sql);
// 5.接收对象
Record record = sql.getObject(Record.class); // 此处是接收单个对象
封装结合对象查询
sql.setCallback(Sqls.callback.records())
sql.setEntity(dao.getEntity(Record.class))); // 可自定义实体
dao.execute(sql);
List<Record> records = sql.getList(Record.class);
封装数字查询
sql.setCallback(Sqls.callback.integer());
dao.execute(sql);
int count = sql.getInt();
封装DDL
sql.setCallback(Sqls.callback.integer());
dao.execute(sql);
int rows = sql.getUpdateCount();
condition
花式用法
首先创建sql
对象(注意此处的占位符是$
)
select * from tb_xxx $condition
Cnd.exps(); // 将一个条件表达式封装为条件表达式组
Cnd.where(); // 将一个表达式封装成一个Cnd实例
// 通过以上两个方法组合搭配形成嵌套, 如:
Cnd cnd = Cnd.where("name", "=", "张三")
.and("age", "between", new Object[]{19, 29})
.and(
Cnd.NEW().where()
.andIn("city", "上海", "广东")
.orIn("hobby", "篮球", "网球")
)
.and(
Cnd
// 生成条件组(后可继续拼接)
.exps("gender", "=", "女")
// 动态条件
.andEX("height", "like", "180")
.andEX("phone", "=", "")
)
// 静态条件,直接拼入sql,不做任何转义
.and(new Static("isnull(is_delete)"));
生成后的sql
WHERE name='张三'
AND age BETWEEN 19 AND 29
AND (city IN ('上海','广东') OR hobby IN ('篮球','网球'))
AND (gender='女' AND height LIKE '180')
AND isnull(is_delete)
like
左右模糊
// Cnd.NEW().where().andLike();
SimpleCriteria cri = Cnd.cri();
cri.where().andLike("name", "李四", false);
// 建议传ignoreCase = false, 否则会被拼接成 LOWER(XXX) LIKE LOWER('%XXX%')
cri.where().andLike("idcard", "330");
// 右侧模糊查询
cri.where().andLike("hobby", "运动", "", "%", false);
生成后的sql
WHERE name LIKE '%李四%' AND LOWER(idcard) LIKE LOWER('%330%') AND hobby LIKE '运动%'
实体动态更新
由于nutz.dao
默认update
操作是全字段更新, 如果只更新实体类不为空的需要设置字段过滤器
dao.update(
new User().setIsDel(1),
FieldFilter.create(User.class,true),
Cnd.where("is_del","=",0)
);