基于Mybatis-Plus的CRUD的实现
使用mybatis-plus自动生成了5个模块(xml/bean/mapper/service/controller)的代码,这里练习一下mybatis-plus框架下的CRUD.
还是原先的那个springboot项目.
mybatis-plus也是mybatis的增强版,它并未改变mybatis原有功能,只是在传统mybatis原有基础上又新增了一些功能,用以提高开发效率.
比如,在mybatis-plus框架下,项目mapper层接口可通过继承BaseMapper,获取基本的CRUD功能,而无需编写mapper.xml语句.
AutoGenerator自动生成的mapper.xml如下所示:
soldier_id,soldier_name,join_army_time
下面的Mapper接口也是自动生成的,里面什么都不用写:
/** **Mapper接口 *
* *@authorgene *@since2019-09-11 */ publicinterfaceSoldierMapperextendsBaseMapper{ }
项目集成mybatis-plus之后,在大多数CRUD情景下,可以跳过mapper层,直接到业务层接口写接口方法,然后在业务实现类里调用BaseMapper接口内的方法即可.
业务接口(要自己动手写了):
packagecn.example.demo.service; importjava.util.List; importcom.baomidou.mybatisplus.core.conditions.Wrapper; importcom.baomidou.mybatisplus.core.metadata.IPage; importcom.baomidou.mybatisplus.extension.plugins.pagination.Page; importcom.baomidou.mybatisplus.extension.service.IService; importcn.example.demo.bean.Soldier; /** **服务类 *
* *@authorgene *@since2019-09-11 */ publicinterfaceSoldierServiceextendsIService{ /** *增加 * *@paramsoldier *@return */ intinsert(Soldiersoldier); /** *查询全部 * *@return */ List selectAll(Wrapper queryWrapper); /** *据ID而查 * *@paramsoldier *@return */ SoldierselectById(IntegersoldierId); /** *更改1行 * *@paramsoldier *@return */ intupdateOne(Soldiersoldier); /** *删除一行 * *@paramsoldier *@return */ intdeleteOne(Soldiersoldier); }
实现类:
packagecn.example.demo.service.impl; importcom.baomidou.mybatisplus.core.conditions.Wrapper; importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper; importcom.baomidou.mybatisplus.core.metadata.IPage; importcom.baomidou.mybatisplus.extension.plugins.pagination.Page; importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl; importcn.example.demo.bean.Soldier; importcn.example.demo.mapper.SoldierMapper; importcn.example.demo.service.SoldierService; importjava.util.List; importorg.springframework.stereotype.Service; /** **服务实现类 *
* *@authorgene *@since2019-09-11 */ @Service publicclassSoldierServiceImplextendsServiceImplimplementsSoldierService{ @Override publicintinsert(Soldiersoldier){ returnbaseMapper.insert(soldier); } @Override publicList selectAll(Wrapper queryWrapper){ returnbaseMapper.selectList(queryWrapper); } @Override publicSoldierselectById(IntegersoldierId){ returnbaseMapper.selectById(soldierId); } @Override publicintupdateOne(Soldiersoldier){ returnbaseMapper.updateById(soldier); } @Override publicintdeleteOne(Soldiersoldier){ returnbaseMapper.deleteById(soldier); } }
测试方法,贴一个"增":
@Autowired privateSoldierServicess; @Test publicvoidinsertTest(){ LocalDateTimenow=LocalDateTime.now(); Soldiersoldier=newSoldier("yaobuqi",now); intaffect=ss.insert(soldier); System.err.println("affect-"+affect); }
收工.
最后是测试期间遇到的异常:
- java.lang.NoSuchMethodError:org.apache.ibatis.session.Configuration.getDefaultScriptingLanguageInstance()Lorg/apache/ibatis/scripting/LanguageDriver
- 升级mybatis-spring-boot-starter版本至2.1.0
- 升级mybatis-generator-core版本至1.3.7
- dao.InvalidDataAccessApiUsageException:Errorattemptingtogetcolumn'join_army_time'fromresultset.Cause:java.sql.SQLFeatureNotSupportedException;null;nestedexceptionisjava.sql.SQLFeatureNotSupportedException
简而言之:使用mybatis-plus逆向工程会将数据库中的date类型转换为LocalDateTime,访问接口的时候报错:java.sql.SQLFeatureNotSupportedException.
这是因为druid跟mybatis3.5.1兼容性问题,mybatis-plus-generator3.1.2引用了mybatis3.5.1版本,而druid-boot-1.1.18尚未与之兼容,应将mybatis-plus版本降至3.1.0或以下即可.
如果上面的法子无效,那就更换druid数据源为hikaricp数据源:
com.zaxxer HikariCP 3.3.1
还有一种方法是,把实体类成员的LocalDateTime类型换为Date类型.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。