mybatis有没有annotation的动态SQL语句?

发布于 2021-12-09 01:29:29 字数 2216 浏览 835 评论 18

最近做系统需要用到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);



现在问题来了,我需要实现如下一样的动态SQL拼接,功能主要应用在多条件查询的地方
参见代码
<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>



我也去网上搜索了半天,就是没有关于annotation的用法
如果我在代码中控制就变成
参加代码
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(18

顾忌 2021-12-09 11:44:59

您好,请问下,你这个框架,对于多表关联查询支持如何?

拍不死你 2021-12-09 11:44:59

注解可以写,用<script>的关键字就好了,配置比代码还多,何苦呢,做怎么灵活,浪费时间,浪费精力,99%的变动都不会发生。

虐人心 2021-12-09 11:44:58

回复
多表关联需要手工写SQL, 当然多表关联写的动态SQL代码自动生成DTO仍然是能够正常工作的。

囚你心 2021-12-09 11:44:54

回复
最新版本的动态SQL语句可以直接写在Java代码中,并能够像配置文件一样加载更新的SQL。

顾挽 2021-12-09 11:44:47

mybatis比较简单,不用学什么新东西。

要是写在注解里 还不如用jdbctemplate之类的 直接写在java里

夜血缘 2021-12-09 11:44:40

如果你用mybatis,那么请使用xml的方式吧,因为后期新人维护都熟悉,还有就是因为官方都不推荐注解方式

不乱于心 2021-12-09 11:44:40

注解就一定好吗?如果把配置都放到注解,会导致配置多余分离和分散化,给维护带来不便。现在很多框架都是滥用注解,把什么配置都往注解里扔。

注解的原意就是元数据,是个特殊的数据,用来描述你所标注的东西的。比如,描述一个属性活方法有哪些特殊的数据,而不是把方法里面需要用到的数据和配置放到注解里。最后引用一段来自wikipedia的解释。

An annotation is metadata (e.g. a comment, explanation, presentational markup) attached to text, image, or other data.[1] Often, annotations refer to a specific part of the original data.

不乱于心 2021-12-09 11:44:40

mybatis注解功能上本来就不如配置文件吧,而且后期维护性上,配置文件更好些,而且复杂查询配置文件更方便。

心欲静而疯不止 2021-12-09 11:44:39

注解不是可以省去很多配置的烦恼吗,减少配置文件的管理。 难道我又错了。。。现在大家还是倾向于看得见的xml配置吗? 求指教~!

谁的新欢旧爱 2021-12-09 11:44:38

回复
有的地方用注解方便,有的地方用xml方便,哪个方便就用哪种方案,你这样想也太教条了点吧

可是我不能没有你 2021-12-09 11:44:37

给你关键字去搜吧,@SelectProvider @InsertProvider..省略update和delete

为什么要用注解呢,xml配置很好啊,代码和sql语句分离,容易维护

月亮是我掰弯的 2021-12-09 11:44:34

mybatis支持同时注解和xmlsql,如果annotation的不行就直接写xml

酒几许 2021-12-09 11:44:11

回复
博客上的东西意义在哪?能百度能google的还需要你么,书上写的很明白吧,不看书就看博客就行了?培训机构出来的吧,真搞笑

沙与沫 2021-12-09 11:43:45

回复
自己垃圾自己就闭嘴吧,真恶心

北笙凉宸 2021-12-09 11:43:38

回复
嘴炮一流。满篇就是架构师、多学几门语言。好像学几门语言就了不起一样。有开发经验的人要喷也不会这么喷啊,看别人搞java的就YY别人只知道java不懂php、python,然后就喷人见识低,哈哈哈角度真是奇特。哦对了,你到底是不是大公司出来的啊?还是纯属自己YY大公司??不是的话我就走了啊。

心舞飞扬 2021-12-09 11:43:00

回复
呵呵请问您会么,go是什么语言还得百度吧,您呀别搞笑了,以后呀别动不动就说这个框架不行,理解不了别人为什么用,只是因为你太菜,谢谢,别回了,朽木不可雕。连虚心学习的心态都没有,你活的真是生不如死呀。

凌乱心跳 2021-12-09 11:41:24

呵呵,jap写个复杂的sql看看?而且如果mybatis的XML太长,多半是因为引入了自动化代码生成工具.自己喷一个框架的时候根本不考虑该框架的适用场景,显得自己很浅薄.

顾挽 2021-12-09 07:22:24

以前看到一个mybatis项目,一个mapper xml有1900多行,混杂了各种<if test=""></if>判断逻辑和各种奇葩的mapper映射,同样的mapper换成jpa或者spring-jpa-data或是hibernate,代码量可以缩到300行左右。

有时候我很搞不懂这么好多人无脑推崇mybatis是因为对自己驾驭不了jpa、hibernate的恨呢还是单纯为了所谓逼格而强迫自己去接受这一奇葩mybatis框架。

把大堆逻辑写进xml里然后还美其名曰的称是好维护,,,,,估计是我这辈子见过好笑的笑话啦。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文