jboot-admin:
1.数据库部分:
数据库5.7 以上不支持group by查询需在my.ini 文件中加入代码:
sql_mode =‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
没有my.ini 文件;创建my.ini文件
jfianl与数据库交互查询添加不支持having,在原查询语句上套一层子查询;
2.当返回值为类型是Record时,可以直接通过Record.字段名进行获取对应字段的值;
3.获取页面的返回值
4.向页面传递返回值
.setAttr(name, value);单个值传递后面可以追加.setAttr(name.value)
setAttrs(map);传递一个map集合带页面
页面取值:
#(value);
5.getBean 与 getModel 方法
getModel 用来接收页面表单域传递过来的 model 对象,表单域名称以”modelName.attrName”方式命名,getModel 使用的 attrName 必须与数据表字段名完全一样。getBean 方法用于支持传统 Java Bean,包括支持使用 jfnal 生成器生成了 getter、setter 方法的 Model,页面表单传参时使用与 setter 方法相一致的 attrName,而非数据表字段名。 getModel 与 getBean 区别在于前者使用数表字段名而后者使用与 setter 方法一致的属性名进行数据注入。建议优先使用 getBean 方法。
以下是一个简单的示例:
// 定义Model,在此为Blog
public class Blog extends JbootModel {
}
// 在页面表单中采用modelName.attrName形式为作为表单域的name
@RequestMapping("/blog")
public class BlogController extends JbootController {
public void save() {
// 页面的modelName正好是Blog类名的首字母小写
Blog blog = getModel(Blog.class);
//如果表单域的名称为 "otherName.title"可加上一个参数来获取
Blog blog = getModel(Blog.class, "otherName");
//如果表单域的名称为 "title" 和 "content"
Blog blog = getModel(Blog.class, "");
}
// 或者 也可以写如下代码,但是注意,只能写一个save方法
public void save(Blog blog) {
// do your something
}
}
上面代码中,表单域采用了”blog.title”、”blog.content”作为表单域的 name 属性,”blog”是类 文件名称”Blog”的首字母变小写,”title”是 blog 数据库表的 title 字段,如果希望表单域使用任 意的 modelName ,只需要在 getModel 时多添加一个参数来指定,例如: getModel(Blog.class, ”otherName”)。
6.serviceimp事物处理
Db + Record 模式
Db 类及其配套的 Record 类,提供了在 Model 类之外更为丰富的数据库操作功能。使用Db 与 Record 类时,无需对数据库表进行映射,Record 相当于一个通用的 Model。以下为 Db +Record 模式的一些常见用法:
// 创建name属性为James,age属性为25的record对象并添加到数据库
Record user = new Record().set(“name”, “James”).set(“age”, 25);
Db.save(“user”, user);
// 删除id值为25的user表中的记录
Db.deleteById(“user”, 25);
// 查询id值为25的Record将其name属性改为James并更新到数据库
user = Db.findById(“user”, 25).set(“name”, “James”);
Db.update(“user”, user);
// 获取user的name属性
String userName = user.getStr(“name”);
// 获取user的age属性
Integer userAge = user.getInt(“age”);
// 查询所有年龄大于18岁的user
Page userPage = Db.paginate(1, 10, “select *”, “from user where
age > ?”, 18);
或者,事务操作:
boolean succeed = Db.tx(new IAtom(){
public boolean run() throws SQLException {
int count = Db.update(“update account set cash = cash - ? where
id = ?”, 100, 123);
int count2 = Db.update(“update account set cash = cash + ? where
id = ?”, 100, 456);
return count == 1 && count2 == 1;
}
});
以上两次数据库更新操作在一个事务中执行,如果执行过程中发生异常或者 run()方法返回 false,则自动回滚事务