经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
基于Mybatis-Plus的CRUD的实现
来源:jb51  时间:2019/11/11 8:33:01  对本文有异议

使用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如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  3. <mapper namespace="cn.example.demo.mapper.SoldierMapper">
  4.  
  5. <!-- 通用查询映射结果 -->
  6. <resultMap id="BaseResultMap" type="cn.example.demo.bean.Soldier">
  7. <id column="soldier_id" property="soldierId" />
  8. <result column="soldier_name" property="soldierName" />
  9. <result column="join_army_time" property="joinArmyTime" />
  10. </resultMap>
  11.  
  12. <!-- 通用查询结果列 -->
  13. <sql id="Base_Column_List">
  14. soldier_id, soldier_name, join_army_time
  15. </sql>
  16.  
  17. </mapper>
  18.  

下面的Mapper接口也是自动生成的,里面什么都不用写:

  1. /**
  2. * <p>
  3. * Mapper 接口
  4. * </p>
  5. *
  6. * @author gene
  7. * @since 2019-09-11
  8. */
  9. public interface SoldierMapper extends BaseMapper<Soldier> {
  10. }

项目集成mybatis-plus之后,在大多数CRUD情景下,可以跳过mapper层,直接到业务层接口写接口方法,然后在业务实现类里调用BaseMapper接口内的方法即可.

业务接口(要自己动手写了):

  1. package cn.example.demo.service;
  2.  
  3. import java.util.List;
  4.  
  5. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.IService;
  9.  
  10. import cn.example.demo.bean.Soldier;
  11.  
  12. /**
  13. * <p>
  14. * 服务类
  15. * </p>
  16. *
  17. * @author gene
  18. * @since 2019-09-11
  19. */
  20. public interface SoldierService extends IService<Soldier> {
  21. /**
  22. * 增加
  23. *
  24. * @param soldier
  25. * @return
  26. */
  27. int insert(Soldier soldier);
  28.  
  29. /**
  30. * 查询全部
  31. *
  32. * @return
  33. */
  34. List<Soldier> selectAll(Wrapper<Soldier> queryWrapper);
  35.  
  36. /**
  37. * 据ID而查
  38. *
  39. * @param soldier
  40. * @return
  41. */
  42. Soldier selectById(Integer soldierId);
  43.  
  44. /**
  45. * 更改1行
  46. *
  47. * @param soldier
  48. * @return
  49. */
  50. int updateOne(Soldier soldier);
  51.  
  52. /**
  53. * 删除一行
  54. *
  55. * @param soldier
  56. * @return
  57. */
  58. int deleteOne(Soldier soldier);
  59. }
  60.  

实现类:

  1. package cn.example.demo.service.impl;
  2.  
  3. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8.  
  9. import cn.example.demo.bean.Soldier;
  10. import cn.example.demo.mapper.SoldierMapper;
  11. import cn.example.demo.service.SoldierService;
  12.  
  13. import java.util.List;
  14.  
  15. import org.springframework.stereotype.Service;
  16.  
  17. /**
  18. * <p>
  19. * 服务实现类
  20. * </p>
  21. *
  22. * @author gene
  23. * @since 2019-09-11
  24. */
  25. @Service
  26. public class SoldierServiceImpl extends ServiceImpl<SoldierMapper, Soldier> implements SoldierService {
  27.  
  28. @Override
  29. public int insert(Soldier soldier) {
  30. return baseMapper.insert(soldier);
  31. }
  32.  
  33. @Override
  34. public List<Soldier> selectAll(Wrapper<Soldier> queryWrapper) {
  35. return baseMapper.selectList(queryWrapper);
  36. }
  37.  
  38. @Override
  39. public Soldier selectById(Integer soldierId) {
  40. return baseMapper.selectById(soldierId);
  41. }
  42.  
  43. @Override
  44. public int updateOne(Soldier soldier) {
  45. return baseMapper.updateById(soldier);
  46. }
  47.  
  48. @Override
  49. public int deleteOne(Soldier soldier) {
  50. return baseMapper.deleteById(soldier);
  51. }
  52. }

测试方法,贴一个"增":

  1. @Autowired
  2. private SoldierService ss;
  3.  
  4.  
  5. @Test
  6. public void insertTest() {
  7. LocalDateTime now = LocalDateTime.now();
  8.  
  9. Soldier soldier = new Soldier("yaobuqi", now);
  10.  
  11. int affect = ss.insert(soldier);
  12.  
  13. System.err.println("affect- " + affect);
  14. }

收工.

最后是测试期间遇到的异常:

  • 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: Error attempting to get column 'join_army_time' from result set. Cause: java.sql.SQLFeatureNotSupportedException; null; nested exception is java.sql.SQLFeatureNotSupportedException

简而言之:使用mybatis-plus逆向工程会将数据库中的date类型转换为LocalDateTime,访问接口的时候报错:java.sql.SQLFeatureNotSupportedException.

这是因为druid跟mybatis3.5.1兼容性问题,mybatis-plus-generator 3.1.2引用了mybatis3.5.1版本,而druid-boot-1.1.18尚未与之兼容,应将mybatis-plus版本降至3.1.0或以下即可.

如果上面的法子无效,那就更换druid数据源为hikaricp数据源:

  1. <dependency>
  2. <groupId>com.zaxxer</groupId>
  3. <artifactId>HikariCP</artifactId>
  4. <version>3.3.1</version>
  5. </dependency>

还有一种方法是,把实体类成员的LocalDateTime类型换为Date类型.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号