JFinal

登录 注册

简单集成Jfinal访问SQL的方法。

在Jfinal的某个版本中开始支持sql的动态管理,对于sql集中管理提供了很大的方便。平时我们在获取和使用sql一般使用高级用法,因为它可以生成复杂sql。比如通过这样方式可以获取和使用sql:

Kv cond = Kv.by("age ", 16).set("sex ", "female");
SqlPara sp = Db.getSqlPara("user.find", Kv.by("cond", cond));
Db.find(sp);

 但是如果某个业务(service层调用sql比较多)比较复杂,就需要写很多类似这样的sql调用方法,对于sql管理不是足够方便。如果将所有需要访问的sql的代码集中管理起来是不是简单一些,

类似于这样,通过一句代码即可访问sql:

@Mapper(path="user")
public interface UserDao {

    @Query    
    List<Record> find(int age,String sex);
    
}


所以本人对Jfinal访问sql作了简单的集成,该集成和jfinal一样的简洁。

想要使用这个插件怎么办?

1、首先Jfinal版本得在3.5及3.5以上

2、下载引入这个插件 git clone https://gitee.com/LuZhoupc/jfinal-mapper.git

3、引入org.reflections反射类库

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.11</version>
</dependency>

4、在启动类config中的afterJfinalStart添加new Mappers("com.dao","com.rs"),第一个参数是含有Mapper注解的路径,第二个是使用Mapper的路径。

public void afterJFinalStart() {
   new Mappers("com.rs.dao","com.rs");
}

5、可以创建一个dao包,里面放置访问sql的接口类

1.PNG

6、创建访问sql的接口类规范,类似于mybatis访问sql的接口类

@Mapper(path="sample")
public interface SampleDao {

    @Query //查询
    List<Sample> findSampleList();

    @Paginate //分页
    Page<Sample> findSampleListByPage(int pageNumber,int pageSize); //pageNumber,pageSize必须需要,参数顺序无所谓

    @Query //查询
    List<Record> findSampleListByNumber(String number);
    
    @Update //更新,删除,新增
    int updater(int id,String number);

}

其中:

   1)、接口Mapper注解中的path和#namespace名称一致(如果#namespace名称和接口类名称一致可以不写path),如下

#namespace("sample")
  #sql("findSampleList")
    select * from mo_sample
  #end
 #end

   2)、接口类的方法名和#sql名称一致,如上。

   3)、接口方法参数和#para()中的名称一致。

   4)、@Mapper表示这是Jfinal访问sql映射类;@Query表示查询,@Update表示这是新增,删除,更新;@Paginate表示这是分页用的;

   5)、如果项目中需要连接多数据库,比如某个接口类的访问的是oracle数据库A,可以这样设置@Mapper(path="...",db="oracle")),"oracle"是在config配置数据库的别名;

ActiveRecordPlugin arp = new ActiveRecordPlugin("oracle", druidPlugin);
arp.setShowSql(true);

       如果是某些sql使用了oracle数据库A,可以在@Query@Update,@Paginate配置db,使sql使用更粒度。

7、接口类创建完了就是使用了,比如我们在某个service里面使用这个接口类,只需要这样引用使用即可:

public class SampleService {

    @Dao    
    SampleDao dao;  //这样即可使用
    
    //SampleDao dao = Mappers.get(SampleDao.class);//或者这样使用,我是参考jfinal的做法的。

    public List<Sample> findSampleList(){
        return dao.findSampleList(); //这样是不是简洁多了。
    }
}

8、完了 ,是不是对sql调用和管理比较简洁,访问sql无需再写Kv,getSqlPara语句,我没干啥事,就是做了细小简单的封装。在这里感谢Jfinal。欢迎各位斧正!!!

 

评论