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

相關文章
相關標籤/搜索