JFinal的ORM支持(二)

来源:互联网 发布:天池大数据竞赛官网 编辑:程序博客网 时间:2024/04/30 02:03
这次我们来学习一下JFinal访问数据库的支持,首先创建一个数据库表:
CREATE DATABASE TEST
CREATE TABLE user(
    id int primary key,
    name varchar(20) ,
    sex varchar(5),
    ago int
);
insert into user values(1,'liuwei','man',22);
insert into user values(2,'gaoyanjun','woman',20);
insert into user values(3,'yuanmengzhou','woman',20);
insert into user values(4,'wangdan','woman',22);
1、首先我们先来学习一下Model类的使用。
    一开始看到Model 我就先入为主的认为是类似JavaBean的承载数据的实体类,但深入了解之后发现不是的,我发现它比实体类更加的灵活,但又没有JDBC的代码冗余度那么高。(本来以为只需要用Java工程就够了,但发现配置ConfigClass只能通过web.xml)可以返回数据的我总结有三种:返回单独字段的值,返回一条记录的Map键值对
    a)第一步配置JFinalConfig:

        @Override
         public void configPlugin(Plugins me) {
              //添加一个C3p0数据源插件
              C3p0Plugin cp = new C3p0Plugin("jdbc:mysql://127.1.1.1/test","root", "");
              me.add(cp);
              //创建ActiveRecordPlugin插件并添加到项目
              ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
              me.add(arp);
              //将表名和Model类做映射
              arp.addMapping("user", User.class);
         }
        b)使用Model
        创建Model
       
package cn.edu.sdnu.liuwei.jfinal.model;
       import java.util.Map;
       import com.jfinal.plugin.activerecord.Model;
        public class User extends Model<User>{
         private static final long serialVersionUID = 1L;
         //饿汉式单例模式--注意,这个dao是用于访问数据库的,而非承载数据。
         private static final User dao = new User();
         public static User getDao(){
          return dao;
         }
   }
        然后重新回顾一下web层的使用:
        ①创建Controller类,添加测试方法
                   public class DaoController extends Controller {
                         public void getData(){
                          int id = getParaToInt("id");
                          String name = User.getDao().findById(id).getStr("name");
                          renderText(name);
                        }
                    }
        ②在Config中配置路由
            me.add("/dao",DaoController.class);
        ③部署并运行,提示:我们这是在测试其中一种获取数据库数据的方法,返回单个字段的形式
            访问http://localhost:8080/LearnJFinal/dao/getData?id=2
        
             成功返回,没有报错
             ④我们来看一下剩下两种访问方法:
              在DaoController类中添加getData2方法:
                public void getData2(){
                      int id = getParaToInt("id");
                      Map<String, Object> res = User.getDao().getAttr(id);
                      renderText("" + res);
                 }
                //User类中代码实现:
                //测试通过的第二种方法
                 public Map<String,Object> getAttr(int id){
                          //getAttrs()方法是protected的,外界不可调用,只能封装于Model类中。
                          return dao.findById(id).getAttrs();
                 }
                
            
                然后部署访问
精彩了,如果我们使用renderJson(String )方法呢:
⑤我们尝试第三种:通过SQL
public List<User> getList(){
  return find("select * from user");
 }
访问之后,成功返回所有数据:

如果我们要做WebService 返回Json数据怎么办呢?
我们可以尝试这种方式:
a、使用Gson框架:摘自笔者编写的Gson工具类
/**
  * 将以键值对的方式存在Map中的数据转换为Json
  * @param map
  * @return 如果转换成功,返回Json,转换失败,返回空
  */
 public static String mapToJson(Map<String,Object> map){
  Type type = new TypeToken<Map<String,Object>>(){}.getType();
  String json = null;
  try {
   json = gson.toJson(map, type);
  } catch (Exception e) {}
  return json;
 }
b、修改User的toString方法:
@Override
 public String toString() {
  //我们尝试重写toString方法
  return GsonUtil.mapToJson(getAttrs());
 }
List的toString()方法正好符合Json格式,天助我,嘎嘎
c、编写Controller:
public void getData3(){
// renderText(""+User.getDao().getList());
  List<User> list = User.getDao().getList();
  renderText(""+list);
 }
d、部署代码,访问:
[
    {
        "id": 1,
        "sex": "man",
        "name": "liuwei",
        "ago": 22
    },
    {
        "id": 2,
        "sex": "woman",
        "name": "gaoyanjun",
        "ago": 20
    },
    {
        "id": 3,
        "sex": "woman",
        "name": "yuanmengzhou",
        "ago": 20
    },
    {
        "id": 4,
        "sex": "woman",
        "name": "wangdan",
        "ago": 22
    }
]
通过校验。

2、好,我们再看看增删改:
 ①增:
public void save() {
  boolean bool = new User().set("id", getParaToInt("id"))
    .set("name", getPara("name")).set("sex", getPara("sex"))
    .set("ago", getPara("ago")).save();
  renderText("" + bool);
 }
②删:
public void delete(){
  User.getDao().deleteById(2);
 }

③改:
public void update(){
  User.getDao().findById(1).set("ago", 222).update();
  renderText(""+User.getDao().findById(1));
 }









0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 赛鸽比赛回来拉稀怎么办 鸽子拉竹节水便怎么办 新买的鸽子拉稀怎么办 信鸽羽毛上长了虫子怎么办 羊肉煮熟了太硬怎么办 切菜不小心切到手指怎么办 打荷盘子端错了怎么办 学厨师不会翻锅怎么办? 在饭店上班不给工资怎么办 炒菜的左手拿不起锅怎么办?? 厨师想尽快上手炒菜怎么办? 空调吹的肩膀痛怎么办 学厨师翻锅不会怎么办 肋软骨隆鼻太硬怎么办 百度云下载速度慢怎么办 买的种子没出怎么办 铃木小r烧整流器怎么办 厨师在厨房太热怎么办 被家长投诉体罚孩子怎么办 空腹彩超喝水了怎么办 鱼把厕.所堵了怎么办 螃蟹爬进厕所里怎么办 抄作业被老师发现怎么办 鱼把厕所堵了怎么办 刚憋尿上完厕所之后腹部很疼怎么办 小孩被老师投诉了家长怎么办 家长投诉被老师知道了怎么办 孩子上课不敢回答问题怎么办 孩子犯了错家长怎么办 错了不该错的题怎么办 不该错的题错了怎么办 小学生不爱写课堂作业怎么办 手被老师打肿了怎么办 老师反应孩子学习退步了怎么办 学护理的打屁股针怎么办 教师被投诉打学生怎么办 遇到内向的学生教师应该怎么办 教师遇到顽劣的学生怎么办 家长质疑老师的能力怎么办 和领导有冲突该怎么办 孩子叫也不听特别叛逆怎么办