精华内容
下载资源
问答
  • @Mapper注解的使用

    万次阅读 多人点赞 2018-07-16 13:36:38
    @Mapper注解的的作用 1:为了把mapper这个DAO交給Spring管理 http://412887952-qq-com.iteye.com/blog/2392672 2:为了不再写mapper映射文件 https://blog.csdn.net/weixin_39666581/article/details/103899495 3:...

    @Mapper注解的的作用

    1:为了把mapper这个DAO交給Spring管理 http://412887952-qq-com.iteye.com/blog/2392672

    2:为了不再写mapper映射文件 https://blog.csdn.net/weixin_39666581/article/details/103899495

    3:为了给mapper接口 自动根据一个添加@Mapper注解的接口生成一个实现类 http://www.tianshouzhi.com/api/tutorials/mapstruct/292

     

    domain类是我们用于与数据库映射的实体类,通常在将实体数据序列化发送到客户端时,我们不会吧domain类去序列化,而是将domain类转成一个model,将model序列化作为响应给浏览器的数据。例如,有一个章节类(Chapter):

    @Entity@Table(name = "chapters")
    public class Chapter {
     @Id
     @Column(name = "id", unique = true, nullable = false)
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id;
     @Column(name = "name", nullable = false) 
    @ColumnComment("章节名") 
    private String name;
     @Column(name = "book_id", nullable = false) private Long bookId; @Column(name = "parent_id") 
    @ColumnComment("父章节的id,标示从属于哪个章节。如果为null,则表示改章节就是book(顶结点)") 
    private Long parentId; @Column(name = "description", nullable = true)
     private String description; @Column(name = "sort_num") 
    private Integer sortNum; // 省略 get/set}

    章节通常是嵌套形成树状结构,当我们需要返回一个树形结构的数据到页面时,就需要构建一个model,如下:

    public class ChapterModel { 
    private Long id; 
    private Long bookId;
     private Long parentId; 
    private String groupName; 
    private Integer sortNum; 
    private String description; 
    private List<ChapterModel> items; // 树结构的体现
     private int level; 
    private boolean expanded; 
    private boolean isArticle; 
    private boolean ifCanClick; 
    private String parentName; // 省略 get/set}

    那么问题来了,当我们每次需要处理一个Chapter对象时,都需要创建一个model,将chapter里的数据对应塞进model里,抽成方法就是:entityToModel,而@Mapper就是这个作用,它只需要你去创建一个接口或抽象类(ChapterMapper),然后定义这个entityToModel方法(并不需要去实现),因为它会自动创建继承类(ChapterMapperImpl),并实现这个方法(entityToModel)。事实上,实现方法的内部同样是调用简单set/get,但这为我们省了不少时间。下面继续。

    首先,在pom文件中引入依赖:

    <dependency> 
    <groupId>org.mapstruct</groupId> 
    <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Beta2</version></dependency><dependency> <groupId>org.mapstruct</groupId>
     <artifactId>mapstruct-processor</artifactId>
     <version>1.2.0.Beta2</version>
    </dependency>

    创建接口:

    @Mapper(componentModel = "spring", uses = {})
    public interface ChapterMapper { 
    public ChapterModel entityToModel(Chapter chapter);
    }

    重新生成class文件,执行命令: mvn clean compile(我用的是maven)

    可以看到在项目target目录下,生成了一个generated-sources目录,下面可以找到ChapterMapperImpl:

    Paste_Image.png

    查看里面的代码,发现entityToModel方法已经被实现了:

    细心一点,其实我们可以发现,生成的方法并不够“智能”,返回的model中只有五个属性被赋值了(而这五个属性恰好就是Chapter类的六个属性中的五个),因为mapstruct是根据属性的名字来匹配的,entity中的name属性,在model里找不到同名的属性,所以就忽略了。那么,如果我们要设置呢?让name赋值给model中的groupName?另外还有一种更复杂的需求,我们希望根据Chapter的parentId属性查找父级目录Chapter,再将父级目录的name赋值给model的parentName属性,又该怎么处理呢?

    只需要给方法加一个注解,并相应配置,再添加一个方法(changeToParentName)即可:

    @Autowired 
    private ChapterService chapterService; 
    @Mappings({ @Mapping(source = "chapter.name", target = "groupName"), @Mapping(source = "chapter.parentId", target = "parentName"), }) 
    public abstract ChapterModel entityToModel(Chapter chapter); 
    public String changeToParentName(Long parentId) { 
    if (parentId != null) {
     return chapterService.getNameById(parentId);
     } 
    return null;
     }

    可以看到,因为要添加一个自定义实现方法changeToParentName,所以我们把<b>接口改成了抽象类</b>

    稍微揣摩一下@Mappings({})里的配置属性和值,就不难发现改造映射规则的配置方式。

    1. source 属性的 chapter.name 中的 chapter就是方法的参数名,name当然就是属性名了。target属性,就是需要映射的model的属性名;
    1. changeToParentName这个方法名不是固定的,但是参数值和返回的数据类型却是固定的。

    接下来,我们再次用命令重新清理一下class文件。

    mvn clean compile

    展开全文
  • SSM是sping+springMVC+mybatis集成的...存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库...

    SSM是sping+springMVC+mybatis集成的框架。

    MVC即model view controller。

    model层=entity层。存放我们的实体类,与数据库中的属性值基本保持一致。

    service层。存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。

    mapper层=dao层,现在用mybatis逆向工程生成的mapper层,其实就是dao层。对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,而service层是针对我们controller,也就是针对我们使用者。service的impl是把mapper和service进行整合的文件。

    (多说一句,数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中。)

    controller层。控制器,导入service层,因为service中的方法是我们使用到的,controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。

    说的很白话,希望大家可以理解。有什么不懂得问题,可以评论。

    纯手打,谢谢。

     

     

    ==================2019.1.20补充================

    在实际开发中的Service层可能被处理为实体Service层,而不是接口,业务逻辑直接写在Service(Class,不是Interface)层中,Controller直接调用Service,Service调用Mapper。

    当然了,Service之间也是可以互相调用!

    展开全文
  • mybatis.mapper-locations 配置多个mapper路径

    万次阅读 多人点赞 2019-03-19 18:53:22
    springboot或者spring项目经常会引用其它项目,把其它项目的Jar包加进来,因为每个项目的包路径不一样,mapper.xml的路径也不一样,这个时候就需要引入多个路径。 项目A,mapper.xml 路径在 resources/mappers/push ...

    springboot或者spring项目经常会引用其它项目,把其它项目的Jar包加进来,因为每个项目的包路径不一样,mapper.xml的路径也不一样,这个时候就需要引入多个路径。

    项目A,mapper.xml 路径在 resources/mappers/push 下面

    项目B,mapper.xml 路径再 resources/mappers/下面

    项目A引用了项目B,把项目B的jar包加入到pom文件中了

    那么项目A的application.properties配置文件中配置mapper.xml路径如下:

    mybatis.mapper-locations=classpath:mappers/push/*.xml,classpath*:/mappers/*.xml

    注意点:在classpath后面的 * 必不可少,缺少型号的话后面的通配符不起作用。

                    **表示可以表示任意多级目录。

     

    展开全文
  • Dozer BeanMapper 对象转换

    万次阅读 2020-09-09 13:08:47
    <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.2.0</version>...Mapper mapper = DozerBean...
            <dependency>
                <groupId>com.github.dozermapper</groupId>
                <artifactId>dozer-core</artifactId>
                <version>6.2.0</version>
            </dependency>
    
    Mapper mapper = DozerBeanMapperBuilder.buildDefault();
    
     TTankVo map = mapper.map(tank, TTankVo.class);//第一个参数是源对象,第二个参数是目标对象
    
    展开全文
  • SpringBoot整合mybatis通用Mapper+自定义通用Mapper方法

    万次阅读 多人点赞 2019-04-04 00:43:18
    最近公司在用的通用mapper,自己感兴趣,然后就来搭建了一个springboot项目试验通用mapper 这个项目是国内的大神写的一个mybatis插件,里面有很多的增删改查方法 官方解释的是通用mapper支持3.2.4以及以上的版本 ...
  • Idea配置Mapper接口跳到mapper.xml

    千次阅读 多人点赞 2020-07-27 14:50:28
    打开mapper接口层: 是没有办法直接到mapper.xml层的 所以得借助插件 操作步奏: 2. 3.安装插件 4.重启idea配置生效 从启之后
  • ModelMapper

    千次阅读 2019-03-21 17:36:25
    在项目中很多时候需要把Model和DTO两个模型类来回转换,保证Model对外是隐私的,同时类似密码之类的属性也能很好...ModelMapper这个工具的入口类就是ModelMapper,因此转换就需要从这个类入口.简单看下API addConvert...
  • 问题:想问下老师mapper接口上需要@mapper注解吗,如果在项目中加了它的作用是什么 伪代码: @Mapper UserMapper extends BaseMapper{ } 回答: 如果是springboot,在启动类中使用@MapperScan("mapper接口所在...
  • devicemapper

    千次阅读 2018-07-12 10:35:23
    1. Device mapper和thinprovison1) Devicemapper简介Devicemapper是内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,它包含三个重要的对象概念,...
  • mybatis-plus配置找不到Mapper接口路径的坑

    万次阅读 多人点赞 2019-06-28 23:39:29
    mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件。 特此记录一下,问题如下: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ...
  • SpringBoot继承TkMapper通用Mapper

    千次阅读 2017-12-21 10:40:40
    MyBatis通用Mapper提供了基本的CRUD的api , 省略了写大量基础代码甚至高级代码的时间 , 方便快捷 , 提升工作效率 . 可以参考通用Mapper文档 SpringBoot集成通用Mapper , 首先也是添加依赖 org.mybatis ...
  • Mybatis通用Mapper

    万次阅读 多人点赞 2014-11-25 09:07:01
    不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表基础操作不方便的想法,使用它你能简单的使用单表的增删改查,包含动态的增删改查. 程序使用拦截器实现具体的执行Sql,完全使用原生的Mybatis进行操作. ...
  • private Mapper mapper; 表示什么意思 @Override public CxbbabaUserInfoModel getUserInfoByUserId(Long userId){ Criterion criterion = and(CxbbabaUserinfoEntity.UserID.eq(userId)); CxbbabaUserinfoEntity...
  • Mapper系列三:自定义Mapper接口

    千次阅读 2019-04-30 13:35:55
    自定义 Mapper接口。根据开发的实际需要对 Mapper接口进行定制 1、创建自定义 Mapper接口。注意:自定义的Mapper接口不能和EmployeeMapper放在同一个包下。 /** * 自定义接口根据需要选择要继承的接口 */ public ...
  • tk mapper 通用mapper的bug

    千次阅读 2018-03-14 12:42:42
    tk.mybatis.spring.mapper.MapperScannerConfigurer"&gt; &lt;property name="basePackage" value="com.isea533.mybatis.mapper"/&gt; &lt;property name="...
  • Mapper接口

    千次阅读 2018-08-04 15:23:44
    mapper接口,面向接口编程的思想还是很重要的。也是本次博文最重要的部分 》Person 实体类 public class Person { private int pid; private String pname; private int age; private String address; 》...
  • mybatis Mapper.xml和Mapper.java

    千次阅读 2018-05-13 00:49:54
    通过Mapper.xml和Mapper.java来实现mybatis 关键:Mapper.xml + Mapper.java +Sqlsession.getMapper()1.Mapper.java 相当于dao (数据访问层) 创建Mapper.java。同样通过ID找User。具体实现如下2.Mapper.xml ...
  • MyBatis 通用 Mapper

    千次阅读 2019-08-25 21:43:59
    MyBatis 通用 Mapper
  • 通用Mapper进行分页查询

    万次阅读 2020-02-02 14:25:51
    通用Mapper进行分页查询 什么也不说,直接上代码解释。 1.1引入分页助手依赖和通用Mapper依赖 <dependency> <!--通用Mapper依赖--> <groupId>tk.mybatis</groupId> <artifactId>...
  • MyBatis 为什么需要通用 Mapper ?

    万次阅读 多人点赞 2018-10-14 14:56:57
    在早期项目文档中有过类似主题的内容,但是最近我自己看文档的时候发现一个问题,文档虽然很详细,但是并不适合初次接触的人。为了方便第一次听说,第一次尝试的开发人员了解通用 Mapper,补充此文档。
  • idea快速从mapper.java跳转到mapper.xml文件的插件 跳转示例如下, 这样可以快速找到对应的方法,提高开发效率。 需要用到对应的插件包,但是idea自带的插件库Plugins里已经是收费版了,本人暂时收藏了两个idea...
  • MyBatis的Mapper接口以及Example的实例函数及详解

    万次阅读 多人点赞 2017-03-24 16:10:15
    一、mapper接口中的方法解析mapper接口中的函数及方法 方法 功能说明 int countByExample(UserExample example) thorws SQLException 按条件计数 int deleteByPrimaryKey(Integer id) thorws SQLException 按...
  • mapper文件提示:No data sources are configured to run this sql

    万次阅读 多人点赞 2018-03-20 14:38:31
    idea的mapper.xml文件提示: “No data sources are configured to run this sql and provide advanced code assistance.Disable this inspection via problem menu” 意思是:没有配置数据源运行此 sql 并...
  • MyBatis 通用 Mapper 实现原理

    万次阅读 多人点赞 2017-11-09 20:42:55
    MyBatis 通用 Mapper 实现原理 文章出自 GitChat http://gitbook.cn/books/59ed3c942f5a1d7161bad162/index.html 本文会先介绍通用 Mapper 的简单原理,然后使用最简单的代码来实现这个过程。基本原理通用 Mapper...
  • tk.mybatis.mapper 通用mapper的使用

    千次阅读 2019-06-24 18:41:37
    1、引入通用mapper的包 <!--通用Mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.4</version> <...
  • Mapper.java 与 Mapper.xml 如何对应

    千次阅读 2018-01-25 22:21:41
    Mapper.java 与 Mapper.xml 如何对应 问题描述: 某项目中检索 HbPkgEntityMapper.java 对应的 .xml 时有两个同名不同包的.xml 而Mapper.xml文件中 namespace 均为该 mapper.java 的路径,无法确认此时调用的...
  • 写了一个mapper接口 package com.nyist.mapper; import com.nyist.entity.User; import tk.mybatis.mapper.common.Mapper; public interface UserMapper extends Mapper<User> { } 在Service中注入该接口--...
  • 我们在使用mybatis时,会用到Mapper接口映射Mapper.xml,具体怎么映射的我们不知道。只知道要这么用,下面我们开始分析mybatis代码。 在分析具体代码时,我们有必要先看一下jdk动态代理。 简单点说:jdk动态代理,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,664
精华内容 33,465
关键字:

mapper