软件工程师和算法工程师速来!正在直播:如何使用英特尔oneAPI工具实现PyTorch 优化>>>
最近做系统需要用到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;
所以,想到这里来问问大家,有没有更好的方法呢?
谢谢大家了。
以前看到一个mybatis项目,一个mapper xml有1900多行,混杂了各种<if test=""></if>判断逻辑和各种奇葩的mapper映射,同样的mapper换成jpa或者spring-jpa-data或是hibernate,代码量可以缩到300行左右。
有时候我很搞不懂这么好多人无脑推崇mybatis是因为对自己驾驭不了jpa、hibernate的恨呢还是单纯为了所谓逼格而强迫自己去接受这一奇葩mybatis框架。
把大堆逻辑写进xml里然后还美其名曰的称是好维护,,,,,估计是我这辈子见过好笑的笑话啦。
给你关键字去搜吧,@SelectProvider @InsertProvider..省略update和delete
为什么要用注解呢,xml配置很好啊,代码和sql语句分离,容易维护
注解就一定好吗?如果把配置都放到注解,会导致配置多余分离和分散化,给维护带来不便。现在很多框架都是滥用注解,把什么配置都往注解里扔。
注解的原意就是元数据,是个特殊的数据,用来描述你所标注的东西的。比如,描述一个属性活方法有哪些特殊的数据,而不是把方法里面需要用到的数据和配置放到注解里。最后引用一段来自wikipedia的解释。
mybatis比较简单,不用学什么新东西。
要是写在注解里 还不如用jdbctemplate之类的 直接写在java里
注解可以写,用<script>的关键字就好了,配置比代码还多,何苦呢,做怎么灵活,浪费时间,浪费精力,99%的变动都不会发生。