Nutz的CRUD写法总结

# Nutz的CRUD写法总结

已知:Student实体类(id,name,age,score) 默认private私有

​ Teacher(id,name,age,score)

统一id都是Long(bigint) ;其他字段都是String(varchar) ;关于时间都是Timestamp(timestamp)

新增

json

public Object createStudent(@Param("..") Student s){
	Student stu = new Student();
    //从实体类获取的私有变量一定要set获取
    stu.setId(s.id);
    ......
    List<Student> list = dao.insert(stu);
    return ajaxOk(list);//成功返回的是这条sql
}

参数形式

public Object createStudent(@Param("id") Long id,
							......
                           ){
	Student stu = new Student();
    //直接传参
    stu.setId(id);
    ......
    List<Student> list = dao.insert(stu);
    return ajaxOk(list);//成功返回的是这条sql
}

简单写法

public Object createStudent(@Param("..") Student s){
    //直接insert此表所有
    return ajaxOk(dao.insert(stu););//成功返回的是这条sql
}

删除

根据对象删除

public Object deleteStudent(Student s){
    //先获取当前id(主键唯一)
    //fetch能查询单条记录
    Student stu = dao.fetch(Student.class,Cnd.where("id","=",s.id));
    dao.delete(stu);
    return ajaxOk("删除ok");
}

根据名称删除

public Object deleteStudent(Student s){
    dao.delete(Student.class,"zs");//实体声明了@Name
    return ajaxOk("删除ok");
}

根据id删除

public Object deleteStudent(Student s){
    dao.delete(Student.class,1);//实体声明了@Id
    return ajaxOk("删除ok");
}

根据列表删除(多半是自定义sql)

public Object deleteStudent(Student s){
    Sql sql = Sqls.create("自定义sql");
    //获取sql的回调类型(entities)
    sql.setCallback(Sqls.callback.entities());
    //需要拼接条件采用
    sql.setCondition(Cnd.where());
    //得到的实体,放到sql实体中
    sql.setEntity(dao.getEntity(Record.class));
    //dao层获取这条sql
    dao.execute(sql);
    //以list集合方式保存多条sql数据
    List<Record> lst = sql.getList(Record.class); 
    
    dao.clear(list);
    return ajaxOk("删除ok");
}

更新

更新一条

public Object updateStudent(Student s){
    //先获取当前id(主键唯一)
    Student stu = dao.fetch(Student.class,Cnd.where("id","=",s.id));
    stu.setId(s.id);
    ......
    dao.update(stu);
    return ajaxOk("修改ok");
}

新增和更新同时调用

public Object updateStudent(Student s){
    //先获取当前id(主键唯一)
    Student stu = dao.fetch(Student.class,Cnd.where("id","=",s.id));
    stu.setId(s.id);
    ......
    dao.insertOrUpdate(stu);
    return ajaxOk("创建或修改ok");
}

简便写法

public Object createStudent(@Param("..") Student s){
    //直接update此表所有字段
    return ajaxOk(dao.update(stu););//成功返回的是这条sql
}

查询

查询所有字段

public Object findStudent(){
    //可以在null处直接拼写sql
    //如果拼sql,null代替为Cnd.where()
    List<Student> list = dao.query(Student.class,null);
    return ajaxOk(list);
}

自定义查询

public Object findStudent(){
    //二选一写法
    1.Sql sql = Sqls.create("自定义sql");//自定义sql必须在引号内
    2.Sql sql = dao.sqls().create("自定义sql注释");//自定义sql在resources/sqls/xxx.sql文件中根据注释查找(/*  */)
    //获取sql的回调类型(entities)
    sql.setCallback(Sqls.callback.entities());
    //需要拼接条件采用
    sql.setCondition(Cnd.where());
    //得到的实体,放到sql实体中
    sql.setEntity(dao.getEntity(Record.class));
    //dao层获取这条sql
    dao.execute(sql);
    //以list集合方式保存多条sql数据
    List<Record> lst = sql.getList(Record.class); 
    
    dao.query(list);
    return ajaxOk(list);
}

//连表查询

public Object findStudent(){
	//能在java解决的,就不要给数据库压力
    List<Student> student = dao.query(Student.class,null);
    List<Teacher> list1 = dao.query(Teacher.class,null);
    return ajaxOk(NutMap.NEW().setv("student", student).setv("teacher", teacher));
}

sql回调类型

请添加图片描述

自定义的sql语句

放到resources资源包中,创建sqls文件夹中放入.sql文件

/* 自定义sql 注释 */ 靠注释映射到对应的方法中dao.create(“自定义sql”);

每句sql结尾必须拼接$condition ,否则项目中无法实现拼接

Nutz框架启动时会自动搜索出Resources/sqls/xxx.sql 所有sql文件的所有语句(会根据注解自动映射到sql语句中)

注解

跨域请求的注解
@Filters(@By(type=CrossOriginFilter.class))

@At //等同于requestMapping

@Ok //成功返回

@Fail //失败返回

@Filters //不定义参数,不会应用任何过滤器

@Filters(@By(type=CheckSession.class, args={"stu", "/index.jsp"}))

自定义过滤器,不存在则跳转到XXX

@Param("…") //值 “…” 有特殊含义,表示当前的这个对象,需要对应整个的 HTTP 参数表

@Param(“id’”) //表示对应的参数值

模糊查询

//模糊查询的字段一定要判断为空,因为是从数据库取数据

Sql sql = Sqls.create("自定义sql");//也可以其他任何查表方式
Cnd where = Cnd.NEW();
if (Strings.isNotBlank(o.housingId)) {
    where.and("id", "like", "%" + id + "%");
}
if (Strings.isNotBlank(o.xingming)) {
    where.and("name", "like", "%" + name + "%");
}
if (Strings.isNotBlank(o.phone)) {
    where.and("score", "like", "%" + score + "%");
}
if (Strings.isNotBlank(o.liveCode)) {
    where.and("age", "like", "%" + age + "%");
}
sql.setCallback(Sqls.callback.records());
sql.setCondition(where);
sql.setPager(createPager(page, limit));
dao.execute(sql);
List<Record> lst = sql.getList(Record.class);
int count = (int) Daos.queryCount(dao, sql);
return ajaxTable(lst, count);

什么时候要判断空?

后端从数据库拿数据给前端一定要判断为空, 必须!!! 必须!!! 必须!!!

前端拿来的数据也要适当判定一下,(有可能会出现,假数据传到后端)比如一些没事瞎搞事的人!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

压一锄头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值