在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
#end2)、接口类的方法名和#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。欢迎各位斧正!!!