mybatis有没有annotation的动态SQL语句?
最近做系统需要用到mybatis
由于过去用了太多的xml配置框架,这次想摒弃以前那些配置太多的缺点,使用annotation的方法。
使用mybatisGenerator的工具,生成annotation的mapper
参见代码
@Insert({ "insert into contactinfo (idcontactinfo, contact_idcontact, ", "firstname, secondname, ", "address, state, ", "country, city, email, ", "telephone, mobile)", "values (#{idcontactinfo,jdbcType=INTEGER}, #{contactIdcontact,jdbcType=INTEGER}, ", "#{firstname,jdbcType=VARCHAR}, #{secondname,jdbcType=VARCHAR}, ", "#{address,jdbcType=VARCHAR}, #{state,jdbcType=VARCHAR}, ", "#{country,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, ", "#{telephone,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR})" }) int insert(ContactInfo record);
参见代码
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </select>
如果我在代码中控制就变成
参加代码
ContactExample example = new ContactExample(); ContactExample.Criteria cri = example.createCriteria(); System.out.println(contact.getUsername() + ":" + contact.getPassword()); if (null != contact.getUsername() || !"".equals(contact.getUsername())) { cri.andUsernameLike(contact.getUsername() + "%"); } if (null != contact.getPassword() || !"".equals(contact.getPassword())) { cri.andPasswordEqualTo(contact.getPassword()); } ContactMapper vcontactMapper = sqlSession .getMapper(ContactMapper.class); List<Contact> returnList = vcontactMapper.selectByExample(example); return returnList;
所以,想到这里来问问大家,有没有更好的方法呢?
谢谢大家了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
您好,请问下,你这个框架,对于多表关联查询支持如何?
注解可以写,用<script>的关键字就好了,配置比代码还多,何苦呢,做怎么灵活,浪费时间,浪费精力,99%的变动都不会发生。
回复
多表关联需要手工写SQL, 当然多表关联写的动态SQL代码自动生成DTO仍然是能够正常工作的。
回复
最新版本的动态SQL语句可以直接写在Java代码中,并能够像配置文件一样加载更新的SQL。
mybatis比较简单,不用学什么新东西。
要是写在注解里 还不如用jdbctemplate之类的 直接写在java里
如果你用mybatis,那么请使用xml的方式吧,因为后期新人维护都熟悉,还有就是因为官方都不推荐注解方式
注解就一定好吗?如果把配置都放到注解,会导致配置多余分离和分散化,给维护带来不便。现在很多框架都是滥用注解,把什么配置都往注解里扔。
注解的原意就是元数据,是个特殊的数据,用来描述你所标注的东西的。比如,描述一个属性活方法有哪些特殊的数据,而不是把方法里面需要用到的数据和配置放到注解里。最后引用一段来自wikipedia的解释。
mybatis注解功能上本来就不如配置文件吧,而且后期维护性上,配置文件更好些,而且复杂查询配置文件更方便。
注解不是可以省去很多配置的烦恼吗,减少配置文件的管理。 难道我又错了。。。现在大家还是倾向于看得见的xml配置吗? 求指教~!
回复
有的地方用注解方便,有的地方用xml方便,哪个方便就用哪种方案,你这样想也太教条了点吧
给你关键字去搜吧,@SelectProvider @InsertProvider..省略update和delete
为什么要用注解呢,xml配置很好啊,代码和sql语句分离,容易维护
mybatis支持同时注解和xmlsql,如果annotation的不行就直接写xml
回复
博客上的东西意义在哪?能百度能google的还需要你么,书上写的很明白吧,不看书就看博客就行了?培训机构出来的吧,真搞笑
回复
自己垃圾自己就闭嘴吧,真恶心
回复
嘴炮一流。满篇就是架构师、多学几门语言。好像学几门语言就了不起一样。有开发经验的人要喷也不会这么喷啊,看别人搞java的就YY别人只知道java不懂php、python,然后就喷人见识低,哈哈哈角度真是奇特。哦对了,你到底是不是大公司出来的啊?还是纯属自己YY大公司??不是的话我就走了啊。
回复
呵呵请问您会么,go是什么语言还得百度吧,您呀别搞笑了,以后呀别动不动就说这个框架不行,理解不了别人为什么用,只是因为你太菜,谢谢,别回了,朽木不可雕。连虚心学习的心态都没有,你活的真是生不如死呀。
呵呵,jap写个复杂的sql看看?而且如果mybatis的XML太长,多半是因为引入了自动化代码生成工具.自己喷一个框架的时候根本不考虑该框架的适用场景,显得自己很浅薄.
以前看到一个mybatis项目,一个mapper xml有1900多行,混杂了各种<if test=""></if>判断逻辑和各种奇葩的mapper映射,同样的mapper换成jpa或者spring-jpa-data或是hibernate,代码量可以缩到300行左右。
有时候我很搞不懂这么好多人无脑推崇mybatis是因为对自己驾驭不了jpa、hibernate的恨呢还是单纯为了所谓逼格而强迫自己去接受这一奇葩mybatis框架。
把大堆逻辑写进xml里然后还美其名曰的称是好维护,,,,,估计是我这辈子见过好笑的笑话啦。