beetlsql也是一个功能强大的dao工具,很久之前看到了,就想替换一下mybatis,试试想要的功能。
基本上,mybatis就是那一堆xml文件写得比较蛋疼,当然也可以不写xml,但是为了sql语句方便管理,就都写在xml文件了,主要还是喜欢动态拼接的功能,省事,灵活。
首先就是配置文件的改动:以前用的是org.mybatis.spring.SqlSessionFactoryBean,现在用的是org.beetl.sql.ext.spring4.SqlManagerFactoryBean,以前的配置文件中写得比较少,要再指定一个mybatis用的mapper配置文件。因为项目里还用了druid做连接池,很多东西都不用改。当然druid这个根据连接字符串自动识别驱动,也是比较方便,不用再指定驱动。
按照以前的写法,基本就是封装一个公用的dao,然后就直接操作这个dao了,用了beetlsql,直接用SQLManager就可以实现以前的功能了。说说sql语句,也就是markdown文件中的替换,用@where() 替换<where>标签,用@if(isNotEmpty(age)){ and age = #age# @} 替换 <if test="age!=null">标签,其他的东西暂时用的不多,以前使用${name} 这种拼接字符串的形式,可以改为#text(name)#,text还有其他用法,这个工程暂时没用到。还有foreach 替换为 @for,特殊的情况,比如要写a in (?,?,?,?) 可以用join来实现,a in ( #join(ids)#)。
如果要用到缓存呢?关键就是用到SimpleCacheInterceptor,把想要加缓存的命名空间都加入初始化参数,比如这里的menuinfo,roleinfo。配置文件修改如下:
<bean id="sqlManagerFactory" class="org.beetl.sql.ext.spring4.SqlManagerFactoryBean">
<property name="cs">
<bean class="org.beetl.sql.ext.spring4.BeetlSqlDataSource">
<property name="masterSource" ref="dataSource"></property>
</bean>
</property>
<property name="dbStyle">
<bean class="org.beetl.sql.core.db.MySqlStyle">
</bean>
</property>
<property name="sqlLoader">
<bean class="org.beetl.sql.core.ClasspathLoader">
<property name="sqlRoot" value="/sql"></property>
</bean>
</property>
<property name="nc">
<bean class="org.beetl.sql.core.DefaultNameConversion">
</bean>
</property>
<property name="interceptors">
<list>
<bean class="org.beetl.sql.ext.DebugInterceptor"></bean>
<bean class="org.beetl.sql.ext.SimpleCacheInterceptor">
<constructor-arg>
<list>
<value>menuinfo</value>
<value>roleinfo</value>
</list>
</constructor-arg>
</bean>
</list>
</property>
</bean>
查询、计数、添加、删除、修改的使用:
// 添加
sqlManager.insert(MenuInfo.class, instance);
// 修改
index.put("xxx", xx);
sqlManager.updateTemplateById(MenuInfo.class, index);
// 批量修改
sqlManager.updateBatchTemplateById(MenuInfo.class, indexs);
// 删除
sqlManager.deleteById(MenuInfo.class, menuid);
// 条件查询
return sqlManager.select("menuinfo.selectMenuInfos", MenuInfo.class, index);
// 计算条数
return sqlManager.intValue("menuinfo.selectMenuInfosCount", index);
查询数据、查询条数还有其他更简便的做法,暂时没深入研究,就用这种土办法吧。根据id修改、删除,如果id字段的名称是id,不用在Pojo类中加入注解,这里因为不是自增主键,所以用了@AssignID,自增的可以用@AutoID。这样就可以不用写修改删除语句了,偷懒了→_→。
未来还要再看看其他数据库分页的使用,数据量大的分页、oracle的分页等。mysql的分页挺简单的,就是要加个配置项,从0开始,OFFSET_START_ZERO = true。
码云地址https://gitee.com/sskicgah/demoframe/tree/beetlsql/
整体来说,改造起来很快就完成了,也没遇到什么大的问题,就这样,完。