【Nutz】Nutz的常规操作

Nutz的常规操作

//创建表
dao.create(Pet.class,flase);
//删除表
dao.drop(Pet.class);

创建表和删除表报空指针

此处假定已有User测试表,表内有3个字段:id,nam,age

1、查询

查询所有

@Test
public void test(){
    // 查询所有人
    List<User> users = dao.query(User.class,null);
    users.forEach(user -> System.out.println(user.getName()));
}

按条件查询

// 按条件查询
@Test
public void test2(){
    User user = dao.fetch(User.class, Cnd.where("name","Like","张%"));
    System.out.println(user);
}

2、插入

// 插入
@Test
public void test1(){
    User user = new User();
    for (int i = 0; i < 5; i++) {
        user.setName("李四" + i);
        user.setAge(1+i);
        dao.insert(user);
    }
}

3、更新

// 更新指定字段
@Test
public void test7(){
    User user = dao.fetch(User.class,3);
    user.setAge(88);
    // 更新指定字段
    dao.update(user,"^age$");
}
-------------------------------------------------------------------------------------
// 更新集合
@Test
public void test8(){
    List<User> users = dao.query(User.class,Cnd.where("id", ">", "6").and("id", "<","9"));
    users.forEach(user -> user.setAge(18));
    dao.update(users);
}
-------------------------------------------------------------------------------------
// 更新多条记录
@Test
public void test11(){
    //Chain.make需要改的数据,Cnd.where 条件
	dao.update(User.class, Chain.make("age","18"),Cnd.where("name","Like","李四%"));
}
-------------------------------------------------------------------------------------
//根据特定条件更新特定字段(  add("age","+12"),略过makeSpecial条件,执行add条件  )
@Test
public void test11(){
dao.update(User.class, Chain.makeSpecial("age","+1").add("age","+12"),Cnd.where("name","Like","李四%"));
}
-------------------------------------------------------------------------------------
//根据特定条件更新特定字段( Chain.makeSpecial("age","+1"),将当前字段加1)
public void test11(){
    dao.update(User.class, Chain.makeSpecial("age","+1"),Cnd.where("name","Like","李四%"));
}

更新集合:

  1. 获取需要更新的集合
  2. 设置需要更新的条件
  3. 直接把集合放进更新语句

4、删除

delete

// 删除
@Test
public void test3(){
    // 按照id删除
    dao.delete(User.class,4);
    // 按照名称删除 (实体类使用@Name的字段才可使用此方式)
    dao.delete(User.class,"李四4");
    // 删除集合
    List<User> users = dao.query(User.class,Cnd.where("id",">","6"));
    dao.delete(users);
}

5、clear

//清除所有记录
dao.clear(Person.class);
//按条件删除
dao.clear(Person.class,Cnd.where("id","=",12));

6、分页查询

// 分页查询
@Test
public void test4(){
    Pager pager = dao.createPager(2,3);
    List<User> users = dao.query(User.class,null,pager);
    pager.setRecordCount(dao.count(User.class));
    users.forEach(user -> System.out.println(user.getId() + ":" + user.getName()));
    System.out.println("------------");
    System.out.println(pager);
}
----------------------------------------------------------------------------------
5:问问
6:李四0
7:李四1
------------
size: 3, total: 9, page: 2/3
  • createPager(2,3) ; 第一个参数是当前页,第二个参数是页大小
  • 分页页数从1开始,如果页数为0,代表不分页

7、嵌套查询

// 嵌套查询
@Test
public void test6(){
    SqlExpressionGroup e1 = Cnd.exps("id",">","1").and("id","<","8");
    SqlExpressionGroup e2 = Cnd.exps("name","Like","李%").and("name","Like","%四%");

    Condition c = Cnd.where(e1).or(e2).desc("id");

    List<User> users = dao.query(User.class,c);
    users.forEach(user -> System.out.println(user.getId() + ":" + user.getName()));
}

复杂sql:

//复杂SQL
@Test
public void test5(){
    List<User> users = dao.query(User.class,Cnd.where("id",">","1").and("name","Like","李%").desc("id"));
    users.forEach(user -> System.out.println(user.getId() + ":"+ user.getName()) );
}

8、聚合函数

// 聚合函数
@Test
public void test9(){
    // 求最大
    Integer max = dao.func(User.class,"max","age");
    // 求最小
    Integer min = dao.func(User.class,"min","age");
    // 求总和
    Integer sum = dao.func(User.class,"sum","age");
    // 求总数
    Integer count = dao.func(User.class,"count","id");
    System.out.println(max + ":" + min + ":" + sum + ":" + count);
}

9、复杂SQL

// 复杂SQL
@Test
public void test5(){
    List<User> users = dao.query(User.class,Cnd.where("id",">","1").and("name","Like","李%").desc("id"));
    users.forEach(user -> System.out.println(user.getId() + ":"+ user.getName()) );
}

10、自定义SQL

// 自定义sql
@Test
public void test12(){
    // 硬编码sql语句
    Sql sql = Sqls.create("DELETE FROM user WHERE name = '李四4'");

    // 使用占位符书写方式
    Sql sql1 = Sqls.create("SELECT FROM $table WHERE name = @name");
    sql1.vars().set("table","user"); // 会将上表中$table 替换成user
    sql1.setParam("name","李四"); // 会将上表的@name 替换成李四

    // 执行
    dao.execute(sql);
    dao.execute(sql1);
}
10.1 Sql的逃逸字符

有时候的sql语句包含有特殊字符@$,示例:

Sql sql = Sqls.create("DELETE FROM user WHERE email = '1234@qq.com'");

这里因为有关键字@,所以SQL不能被正确解析,因为本意是1234@qq.com这个字符串,但是Nutz会认为是一个语句参数,这时候可以使用逃逸字符

Sql sql = Sqls.create("DELETE FROM user WHERE email = '1234@@qq.com'");
  • 输入@@表示一个@
  • 输入$ 表示一个 表示一个 表示一个
10.2 sql回调

当你执行自定义sql的时,使用SELECT语句是需要返回值的,使用回调即接收到sql的结果

示例:

// 自定义sql回调
@Test
public void test13(){
    Sql sql = Sqls.create("SELECT name FROM user where name Like '李%'");
    sql.setCallback(new SqlCallback() {
        @Override
        public Object invoke(Connection connection, ResultSet resultSet, Sql sql) throws SQLException {
            List<String> list = new LinkedList<>();
            while (resultSet.next())
                list.add(resultSet.getString("name"));
            return list;
        }
    });
    dao.execute(sql);
    System.out.println(sql.getList(String.class));;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值