MyBatis加强工具pndao-帮你自动写SQL

pndao是票牛技术团队在使用的MyBatis加强工具,它能够根据一些方法约定,自动生成SQL。它在实际生产中减小了80%以上的重复SQL编写工做。html

原由

做为Java后端开发,写DAO是个平常的不能再平常的工做。java

这方面有不少工具,有重量级的Hibernate,轻量级的DbUtils、Spring JDBC等。其中MyBatis以接口声明来生成DAO,实现了接口与实现分离,并约定POJO来做为实体类,同时提供一些便捷的脚本扩展,是一套规范性和灵活性并存的方案,已经成为不少团队的首选。我用过好久MyBatis(iBatis),其实它从最开始到如今已经有不小的进步,可是仍然会被大量的复制字段、SQL拼写错误、记不得一些繁琐的语法困扰。git

相信不少人都基于MyBatis写过daogen,MyBatis也提供了官方的插件MyBatis Generator,可是这些工具都是一次性生成DAO以及SQL,后期维护成本依然比较高,每次增减字段都须要手动改,若是有手写的SQL还要手动DIFF,也比较麻烦。后端

有一些新的框架,例如jFinal,其实已经集成了经常使用SQL生成这样的功能,可是通常会绑定本身的框架,使用成本比较高,迁移也很困难。mybatis

目前使用的这个版本的daogen支持MyBatis,而且能生成经常使用SQL,而且每次编译都会从新生成SQL,不只省去一次性编码,也解决了维护的问题。通过一年的使用,基本上经常使用功能都已经可以覆盖。都是吃本身狗粮出来的,专为解决问题而生,没有半点花架子。框架

原理

pndao的原理并不复杂,是基于MyBatis的方法命名约定来生成SQL,而且写入MyBatis须要的XML。工具

写以前会判断是否已经存在XML或者注解,若是已经存在则略过此方法,因此不管是注解仍是XML方式配置SQL都是兼容的。编码

有一点不一样的是,这个是基于jsr269的编译期注解处理来实现的,因此其实整个方案跟MyBatis并无强绑定,基于这种思路还能够作出其余不少有用的东西来。.net

如下是一个常见的DAO功能:插件

public class UserDaoTest extends AbstractTest{

	public static final int USER_ID = 1;

	@Autowired
	private UserDao userDao;

	@Test
	public void testInsertUser() throws Exception {
		User user = initUser();
		assertThat(userDao.insert(user)).isEqualTo(1);
	}

	@Test
	public void testFindUserById() throws Exception {
		User user = userDao.findById(USER_ID);
		assertThat(user).isNotNull();
	}

	@Test
	public void testUpdateUserName() throws Exception {
		assertThat(userDao.updateForUserName("用户13700000001",USER_ID)).isEqualTo(1);
	}
}

基于pndao,全部须要开发的DAO只有这些:

@DaoGen
public interface UserDao {

	int updateForUserName(@Param("userName") String userName, @Param("id") int id);

	int insert(User t);

	User findById(int id);

}

结合建表语句生成插件pngen,大部分场景只需编写一个模型类便可完成DAO层工做。

更多的东西能够看项目,地址:http://git.oschina.net/piaoniu/pndao

相关文章
相关标签/搜索