1.MyBatis-Plus代码生成器(3.5.1版本)
2.关于mybatis-plus中Service和Mapper的分析
3.MyBatis-Plus 中的 IService 和 BaseMapper
4.求教JAVA大神 service到底是做什么的 帮我解释一下这个项目是怎么做的先做什么 在做什么
MyBatis-Plus代码生成器(3.5.1版本)
MyBatis-Plus(简称 MP)是Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性:pom配置,依赖准备好后,福建福源码头创建Java类,在main()方法中:配置连接mysql数据库信息+调用自动生成API并设置各类参数,根据自定义策略,执行自动生成代码操作。这里新建一个MpGenerator.java,提供主方法main()。
templateConfig我禁用了MP提供的模板,设置成了自己定义的。先看下MP自带的模板。
包路径,一共支持三种引擎,Velocity对应vm后缀;Beetl对应btl后缀;Freemarker对应ftl后缀
MP自带的给源码加授权模板service,controller等太简单,只是一个文件并没有提供增删改查功能,可以自己配置一个模板替换到自带的。就需要在templateConfig中配置一下。(自带的模板就不贴代码了,有兴趣的自己看一下)
拿controller举例,贴一下我自己配置的。
其实就是把增删改查的外壳设置好,把参数配置成动态的。$ 里面这些参数是哪里来的呢?接下来分析一下
由于我用的是Velocity,看一下它的引擎源码
一共4个方法,看名字大概分析一下,大概率是writer这个方法是主要功能,接下来断点看一下。
模板中配置的动态参数,都是从objectMap取的。
table数据格式,微信蔬菜源码可以看到生成的entity,mapper,service,controller名称,fields取的数据库中字段信息。
是否为主键,字段类型,名称等等。可以根据这些参数来配置我们需要的模板样式。
如果objectMap中的参数不满足我们的要求,可以自己写一个引擎继承VelocityTemplateEngine重写他的writer方法。
我把主键的信息单独取出来了,避免每次循环调用。
自定义配置模板文件,根据MP提供的功能,可以生成entity,mapper,电脑配置单源码mapperXML,service,serviceImpl,controller。我们可能还需要用到BO,VO等,这时候就需要自定义配置模板了。
模板的定义跟上面说的一样。
简单记录一下自己使用过程的学习,大家有啥想法互相学习。
各个参数详细说明: mybatis-plus代码生成器及配置 - BlogMemory - 博客园
关于mybatis-plus中Service和Mapper的分析
在后端开发中,mybatis-plus是广泛使用的框架之一。该框架内部包含两个核心的数据库操作接口:Iservice和BaseMapper。在日常开发中,我们通常会发现这两者在功能上高度相似,仅在方法命名上有细微差别。对于这样的k-means源码设计,我产生了浓厚的兴趣,决定深入研究。
通过对比两个接口的源码,我们首先发现了一个奇妙的继承结构。Service接口(如ServiceImpl)实际上同时继承了BaseMapper接口和Iservice接口。乍一看,这似乎有些冗余,因为我们通常会为Service类单独创建一个Mapper类,并继承BaseMapper。然而,这样的设计实际上为Service带来了更多功能,尤其是批处理功能的加入。
具体而言,Service接口通过继承BaseMapper接口,实现了基础的CRUD操作,但又进一步扩展了接口功能,提供了更多便利的批处理方法。这与BaseMapper接口相比,增加了业务逻辑处理的灵活性和效率。
为了更深入地理解Service和BaseMapper的区别,我参考了mybatis-plus官方文档的描述。文档详细解释了这两种接口的功能特性,强调了Service在提供数据库操作的同时,更侧重于业务逻辑的实现,而复杂的SQL查询任务则交由BaseMapper对应的XML文件来完成。
总的来说,mybatis-plus中的Service和BaseMapper的设计虽然在表面上看似相似,但实际上它们各有侧重,共同为开发者提供了强大的数据库操作和业务逻辑处理能力。Service接口通过继承BaseMapper接口,不仅实现了基本的CRUD功能,还提供了更高效、便捷的批处理功能,使得开发过程更加流畅。而BaseMapper则专注于SQL语句的编写,为复杂查询提供了有力的支持。
MyBatis-Plus 中的 IService 和 BaseMapper
MyBatis-Plus 作为优化数据库访问效率的 ORM 框架,提供了 BaseMapper 和 IService 两个核心接口。接下来,让我们深入探讨它们的使用及场景。
BaseMapper 是通用的 Mapper 接口,继承自 MyBatis-Plus 的 Mapper 接口,并扩展了常用数据库操作方法。它允许开发者通过继承并指定实体类,直接使用通用方法进行 CRUD 操作,无需手动编写 SQL 语句。BaseMapper 的泛型 T 为任意实体对象,Serializable 为任意类型主键,MyBatis-Plus 不推荐使用复合主键,每张表应有唯一 id 主键。对象 Wrapper 为条件构造器。
IService 接口是通用的 Service 接口,进一步封装了 CRUD 方法,包括 get 查询单行、remove 删除、list 查询集合、page 分页等操作。采用前缀命名方式区分 Mapper 层,避免混淆。泛型 T 为任意实体对象,建议如果存在自定义通用 Service 方法,创建 IBaseService 继承 MyBatis-Plus 提供的基类。对象 Wrapper 为条件构造器。
ServiceImpl 是 IService 的默认实现类,针对业务逻辑层的实现,通过调用 BaseMapper 进行数据库操作。传入参数 M 和 T。
BaseMapper、IService、ServiceImpl 的类关系可以从源码中看出,也可简化为直接操作数据库,省略 UserMapper 接口。
在实际开发中,BaseMapper 和 IService 提供了方便快捷的接口,简化了业务逻辑和数据访问层的代码。ServiceImpl 作为实现类,将业务逻辑与数据操作分离,提高了代码的可维护性和扩展性。
尽管存在争议和讨论,MyBatis-Plus 的 BaseMapper、IService、ServiceImpl 仍然是高效、灵活的工具,用于构建高效、易于维护的数据库访问层。开发者可以根据具体需求选择合适的接口,实现高效的数据访问和业务逻辑处理。
求教JAVA大神 service到底是做什么的 帮我解释一下这个项目是怎么做的先做什么 在做什么
service是提供给外部使用的接口,
比如一般我们自己写个练习的工程,dao是接口,daoImpl 是实现接口的方法,里面会有详细的方法,调用数据库的源码。但是实际应用中为了安全,dao和实现类的代码是不能让外部直接查看到,就加了一个外部调用的接口,接口里边调用实现类的方法,
dao->daoImpl->service->serviceImpl->action.