在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的接口类
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。欢迎各位斧正!!!