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","李四%"));
}
更新集合:
- 获取需要更新的集合
- 设置需要更新的条件
- 直接把集合放进更新语句
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));;
}