MyBatis增強工具pndao-幫你自動寫SQL
pndao是我們團隊在使用的MyBatis增強工具,它可以根據一些方法約定,自動生成SQL。它在實際生產中減少了80%以上的重復SQL編寫工作。
起因
作為Java后端開發,寫DAO是個日常的不能再日常的工作。MyBatis“非常Java”的接口聲明式DAO符合很多團隊的選型標準。我用過很久MyBatis(iBatis),其實它從最開始到現在已經有不小的進步,但是仍然會被大量的復制字段、SQL拼寫錯誤、記不得一些繁瑣的語法困擾。
之前我也寫過一版daogen,大概是根據Table的schema,一次性生成DAO以及SQL。不過維護成本依然比較高,每次增減字段都需要手動改。
有一些新的框架,例如jFinal,其實已經集成了常用SQL生成這樣的功能,但是一般會綁定自己的框架,使用成本高,遷移更加遷不動。
目前使用的這個版本的daogen是@恩澤同學開發的,支持MyBatis,并且能生成常用SQL,經過一年的使用,基本上常用功能都已經能夠覆蓋。都是吃自己狗糧出來的,專為解決問題而生,沒有半點花架子。
原理
pndao的原理并不復雜,是基于MyBatis的方法命名約定來生成SQL,并且寫入MyBatis需要的XML。
寫之前會判斷是否已經存在XML或者注解,如果已經存在則略過此方法。有一點不同的是,這個是基于jsr269的編譯期注解處理來實現的,所以其實整個方案跟MyBatis并沒有強綁定,基于這種思路還可以做出其他很多有用的東西來。
以下是一個常見的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://piaoniu.io/pndaokai-yuan-liao/
本文由用戶 deuso 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!