Mybatis条件动态添加插件,用于书写少量代码(一句话代码,类似pagehelper的PageHelper.startPage(currentPage, branchSize)),以完成一些查询条件的添加。
你有一个查询所有学生的接口。这时有个需求是查询"有效"的学生,或是查询年龄为18岁以上的学生,又或是查询所有男生等等,这时,你要么将接口重构或重载,动态传入sql,或者分别为不同需求,在dao中书写不同接口。前者每次需要写不同sql,后者就不知道要写多少个接口。因此你可以使用Mybatis-SqlAdder,为查询语句动态添加条件,如下:
-
SqlAdder.addSqlCond("s_enable=0");studentMapper.selectAllList(); -
SqlAdder.addSqlCond("s_age>18");studentMapper.selectAllList(); -
SqlAdder.addSqlCond("s_gender=1");studentMapper.selectAllList();
- 在mybatis配置文件中,添加类似如下:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath*:com/**/mapper/**/*.xml" /> <property name="plugins"> <array> <bean id="sqlAdder" class="cn.localhost01.SqlAdder"> <!-- [正则]拦截的sql语句,下列是拦截"select......" --> <property name="sql_Intercept" value="^\s*select[\s\S]*$" /> <!-- [正则]不拦截的sql语句,下列是不拦截"select count......" --> <property name="sql_Not_Intercept" value="^\s*select\s+count\s*\(\s*(?:\*|\w+)\s*\)\s+[\s\S]+$" /> <!-- 是否打印sql --> <property name="is_print_sql" value="false" /> </bean> </array> </property> </bean>
- 代码使用示例:
SqlAdder.add("where car_enable=1");studentMapper.selectAllList();
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> <scope>compile</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>