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

pndao是一款由票牛技术团队开发的MyBatis增强工具,通过方法命名约定自动生成SQL,大幅减少重复编码工作。适用于Java后端开发,兼容XML和注解配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


起因


作为Java后端开发,写DAO是个日常的不能再日常的工作。


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


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


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


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


原理


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


写之前会判断是否已经存在XML或者注解,如果已经存在则略过此方法,所以无论是注解还是XML方式配置SQL都是兼容的。


有一点不同的是,这个是基于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://git.oschina.net/piaoniu/pndao。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值