# 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);
什么时候要判断空?
后端从数据库拿数据给前端一定要判断为空, 必须!!! 必须!!! 必须!!!
前端拿来的数据也要适当判定一下,(有可能会出现,假数据传到后端)比如一些没事瞎搞事的人!