JFinal的ORM支持(二)

这次我们来学习一下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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值