精华内容
下载资源
问答
  • 2021-08-30 10:35:24

    多表关联查询多表关联在xml中写sql,where条件可用queryWrapper实现dao中插入分页对象和查询条件(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper),xml中使用${ew.customSqlSegment}代替where
    1.sql

    SELECT w.works_id worksId, w.user_id userId, w.user_id_type userIdType, w.title, w.content, 
    	w.media_type mediaType, w.media_ids mediaIds, w.first_image_id firstImageId, w.works_tag 
    	worksTag, w.lon_map lonMap, w.lat_map latMap, w.location, w.district_id districtId, w.like_num likeNum, 
    	w.favorite_num favoriteNum, w.comment_num commentNum, m.image_id imageId, p.nick_name nickName, w.create_time createTime 
    FROM fmzy_biz.works w 
    	LEFT JOIN fmzy_main.user_image m on w.user_id = m.user_id 
    	LEFT JOIN fmzy_main.user_person p on w.user_id = p.user_id 
    WHERE 
    	m.image_type = 'U_TX' 
    AND p.test_flag = 0 AND w.show_flag = 1 
    AND ( p.nick_name LIKE '%1%' OR w.title LIKE '%1%' OR w.content LIKE '%1%' ) 
    ORDER BY w.works_id DESC LIMIT 0,20
    

    2.java

     QueryWrapper<WorksInfoVO> queryWrapper = new QueryWrapper<WorksInfoVO>()
                    .eq("m.image_type", "U_TX")
                    .eq("p.test_flag", 0)
                    .eq("w.show_flag", 1)
                    .in(!CollectionUtils.isEmpty(districtIds), "w.district_id", districtIds)
                    .eq(StringUtils.isNotBlank(mediaType), "w.media_type", mediaType)
                    .eq(StringUtils.isNotBlank(worksTag), " w.works_tag", worksTag)
                    .eq(StringUtils.isNotBlank(userIdType), "w.user_id_type", userIdType)
                    .and(qw->qw.like(StringUtils.isNotBlank(content),"p.nick_name",content)
                            .or()
                            .like(StringUtils.isNotBlank(content),"w.title",content)
                            .or()
                            .like(StringUtils.isNotBlank(content),"w.content",content)).orderByDesc("w.works_id");
            Page<WorksInfoVO> page = new Page<>(pageNo, pageSize);
            IPage<WorksInfoVO> ipage = baseMapper.getFindWorksPage(page,queryWrapper);
    

    3.dao

        IPage<WorksInfoVO> getFindWorksPage(Page<WorksInfoVO> page, @Param(Constants.WRAPPER) QueryWrapper<WorksInfoVO> queryWrapper);
    

    4.xml

     <select id="getFindWorksPage" resultType="bw.fmzy.svc.web.main.vo.WorksInfoVO">
            SELECT w.works_id       worksId,
                   w.user_id        userId,
                   w.user_id_type   userIdType,
                   w.title,
                   w.content,
                   w.media_type     mediaType,
                   w.media_ids      mediaIds,
                   w.first_image_id firstImageId,
                   w.works_tag      worksTag,
                   w.lon_map        lonMap,
                   w.lat_map        latMap,
                   w.location,
                   w.district_id    districtId,
                   w.like_num       likeNum,
                   w.favorite_num   favoriteNum,
                   w.comment_num    commentNum,
                   m.image_id       imageId,
                   p.nick_name      nickName,
                   w.create_time    createTime
            FROM fmzy_biz.works w
                     LEFT JOIN fmzy_main.user_image m on w.user_id = m.user_id
                     LEFT JOIN fmzy_main.user_person p on w.user_id = p.user_id
                ${ew.customSqlSegment}
        </select>
    
    更多相关内容
  • SpringBoot项目中实现开放一个接口,接受上位机传递的tryCode(托盘编号),进而在关联的两个插入数据。 效果 接口传递参数 接口返回数据 实现 在SpringBoot项目中的Controller @Description("扫码生成...

    场景

    SpringBoot项目中实现开放一个接口,接受上位机传递的tryCode(托盘编号),进而在关联的两个表中插入数据。

    效果

    接口传递参数

    接口返回数据

    实现

    在SpringBoot项目中的Controller

     @Description("扫码生成单件质检单")
        @RequestMapping(value="/generatingSingleJianQualityTestOrder",method =RequestMethod.POST)
        @ResponseBody
        @ApiOperation(value="生成单件质检单", notes="上位机扫码,生成单件质检单")
        @ApiImplicitParam(name = "trayCode", value = "托盘编码", required = true, dataType = "String")
        public  Json generatingSingleJianQualityTestOrder(String trayCode) {
            return this.wmsMasterCleanFinishService.generatingSingleJianQualityTestOrder(trayCode);
        }

    注:

     @ApiOperation(value="生成单件质检单", notes="上位机扫码,生成单件质检单")
     @ApiImplicitParam(name = "trayCode", value = "托盘编码", required = true, dataType = "String")

    这两个注解是swagger接口说明的注解,如果没有使用则直接忽略。

    SpringBoot+Swagger2实现可视化API文档流程:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/93616618

    接受传递过来的trayCode参数,传递到service层。

    其中Json是封装的Json数据类。

    Json代码

    package com.ws.api.sys.vo;
    
    import lombok.Data;
    
    import java.io.Serializable;
    
    @Data
    public class Json implements Serializable {
        //默认未失败状态
        private static Json instance;
        private String msg = "接口访问失败";
        private String title = "失败提示";
        private boolean status = false;
        private int code = 300;
        private Object data = null;
    
        public synchronized static Json getInst() {
            if(instance==null){
                instance = new Json();
            }
            return instance;
        }
    
        public Json() {
            super();
        }
    
        public Json success(Object data){
            this.title = "成功提示";
            this.msg = "接口访问成功";
            this.status = true;
            this.code = 200;
            this.data = data;
            return this;
        }
    
        public Json success(){
            this.title = "成功提示";
            this.msg = "接口访问成功";
            this.status = true;
            this.code = 200;
            this.data = null;
            return this;
        }
    
        public Json fail(Object data){
            this.title = "失败提示";
            this.msg = "接口访问失败";
            this.status = false;
            this.code = 300;
            this.data = data;
            return this;
        }
    
        public Json fail(){
            this.title = "失败提示";
            this.msg = "接口访问失败";
            this.status = false;
            this.code = 300;
            this.data = null;
            return this;
        }
    }

     

    Service层代码

     public  Json generatingSingleJianQualityTestOrder(String trayCode);

    ServiceImpl代码

    @Transactional
        @Override
        public Json generatingSingleJianQualityTestOrder(String trayCode)
        {
            Json json=Json.getInst();
            try{
            WmsQualitytesOrder wmsQualitytesOrder = new WmsQualitytesOrder();
            //质检单号
            String orderCode = this.iWmsQualitytesOrderService.generatePickNo(new Date());
            wmsQualitytesOrder.setOrderCode(orderCode);
            //创建时间
            wmsQualitytesOrder.setGmtCreat(new Date());
            //状态为 未质检
            wmsQualitytesOrder.setStatus(0);
            //发起机台固定为清洁车间机台cj002
            wmsQualitytesOrder.setInitiaWorkshop("cj002");
            //质检类型为单件质检
            wmsQualitytesOrder.setQualifiedType("1");
            int result = this.wmsQualitytesOrderMapper.insert(wmsQualitytesOrder);
            if (result > 0){
                WmsQualitytestListOrder wmsQualitytestListOrder = new WmsQualitytestListOrder();
                //设置主表ID
                wmsQualitytestListOrder.setQualitytestId(wmsQualitytesOrder.getId());
                //设置物料名称
                BusTrayMateriel busTrayMateriel = new BusTrayMateriel();
                QueryWrapper<BusTrayMateriel> busTrayMaterielQueryWrapper = new QueryWrapper<>();
                busTrayMaterielQueryWrapper.eq("tray_number", trayCode);
                List<BusTrayMateriel> busTrayMaterielList = new ArrayList<BusTrayMateriel>();
                busTrayMaterielList = busTrayMaterielMapper.selectList(busTrayMaterielQueryWrapper);
                busTrayMateriel=busTrayMaterielList.get(0);
                wmsQualitytestListOrder.setMaterielName(busTrayMateriel.getMaterielName());
                //设置物料ID
                wmsQualitytestListOrder.setMaterielId(busTrayMateriel.getId());
                //设置物料编号
                wmsQualitytestListOrder.setMaterielNumber(busTrayMateriel.getMaterielNumber());
                //设置物料类别名称
                BusMaterielInfo busMaterielInfo = new BusMaterielInfo();
                QueryWrapper<BusMaterielInfo> busTrayMaterielInfoQueryWrapper = new QueryWrapper<>();
                busTrayMaterielInfoQueryWrapper.eq("materiel_number", busTrayMateriel.getMaterielNumber());
                busMaterielInfo = busMaterielInfoMapper.selectOne(busTrayMaterielInfoQueryWrapper);
                Long materialType = busMaterielInfo.getMaterielType();
                //码表
                SysCode sysCode = new SysCode();
                QueryWrapper<SysCode> sysCodeQueryWrapper = new QueryWrapper<>();
                sysCodeQueryWrapper.eq("code_type", "materiel_type");
                sysCodeQueryWrapper.eq("code_value", materialType);
                sysCode = codeMapper.selectOne(sysCodeQueryWrapper);
                wmsQualitytestListOrder.setMaterielTypeName(sysCode.getCodeName());
                //设置物料类别
                wmsQualitytestListOrder.setMaterielType(materialType.intValue());
                //设置数量
                wmsQualitytestListOrder.setNum(busTrayMaterielList.size());
                //设置物料规格
                wmsQualitytestListOrder.setMaterielSpec(busMaterielInfo.getMaterielSpec());
                //设置单位
                wmsQualitytestListOrder.setUntiy(busMaterielInfo.getUntiy());
                //设置批次?单件质检是否应该有批次号
    
                //设置供应商批次
                wmsQualitytestListOrder.setSupplierBatch(busTrayMateriel.getSupplierBatch());
                //设置质检类型
                wmsQualitytestListOrder.setQualifiedType("1");
                //设置质检名字
                wmsQualitytestListOrder.setQualifiedName("单件质检");
                //设置是否有批次
                wmsQualitytestListOrder.setBatchFlag(0);
                //设置发起机台
                wmsQualitytestListOrder.setInitiaWorkshop("清洁车间机台");
                //设置是否完成质检
                wmsQualitytestListOrder.setQualifiedFlag(0);
                //保存
                this.iWmsQualitytestListOrderService.save(wmsQualitytestListOrder);
                json.success();
                json.setMsg("生成质检单成功");
            }else{
                json.fail();
                json.setMsg("生成质检单主表异常,请联系管理员");
            }
            }catch (Exception e){
                json.fail();
                json.setMsg("生成质检单异常:"+e.toString());
            }
            return json;
        }

     

    展开全文
  • Mybatis Plus 没有多表支持是很多用户的遗憾,在issue中很多人都希望可以有多表关联的支持,于是MP4版本给大家安排了。MP4的多表关联是如何使用的呢,我们一起来看下。 1.1准备2个po @Data @TableName(value=...

    Mybatis Plus4 已经开始进行开发中了,MP4版本有哪些新特性呢,我来预告一波。

    1 多表关联

          Mybatis Plus 没有多表支持是很多用户的遗憾,在issue中很多人都希望可以有多表关联的支持,于是MP4版本给大家安排了。MP4的多表关联是如何使用的呢,我们一起来看下。

      1.1 准备2个po

    @Data
    @TableName(value="user")
    public class User {
    
       @TableId("user_id")
       private Integer userId;
    
       @TableField("name")
       private String name;
    
       @TableField("age")
       private Integer age;
    
       @TableField("sex")
       private String sex;
    
       //指定这个字段和School 的id字段关联,如果不是和id字段关联可以使用targetFields属性进行关联
       @TableField(value="school_id",target = School.class)
       private Integer schoolId;
    
       //指定关联关系,和目标类  如果是  onetoone 则不需要指定target
       @TableField(relation = Relation.ONE_TO_MANY,target = School.class)
       List<School> schools;
    }
    
    @Data
    @TableName(value="school",autoResultMap = true) //这里设置自动生成resultMap 不需要别的操作
    public class School {
        @TableId
        private Integer id;
    
        @TableField("school_name")
        private String schoolName;
    
        @TableField("remark")
        private String remark;
    }

      1.2 启用JOIN插件 

        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            interceptor.addInnerInterceptor(new JoinInterceptor());
            return interceptor;
        }

    1.3 使用LambdaJoinQueryWrapper 进行多表查询

     LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
            wrapper.eq(User::getSchoolId,1);
            wrapper.innerJoin(School.class).like(School::getSchoolName,"一");
            mapper.selectList(wrapper);

    2 函数支持

     2.1 po上添加接收函数返回的字段

    @TableField(exist = false,funField = true) //标记数据库不存在,并且是个函数字段
    private Long schoolCount;

      2.2 使用各类wrapper进行查询

      

    // QueryWrapper
    new QueryWrapper<User>().eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                    "schoolCount").groupBy("school_id")
    
    // LambdaQueryWrapper
    new LambdaQueryWrapper<User>().eq(User::getSchoolId,2)
                    .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId)
    
    // QueryChainWrapper
    QueryChainWrapper<User> wrapper = new QueryChainWrapper<User>(mapper);
    wrapper.eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                    "schoolCount").groupBy("school_id").one()
    // LambdaQueryChainWrapper
    LambdaQueryChainWrapper<User> wrapper = new LambdaQueryChainWrapper<User>(mapper);
    wrapper.eq(User::getSchoolId,2)              .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId).one()
    
    // BasicJoinQueryWrapper
     BasicJoinQueryWrapper<User> wrapper = new BasicJoinQueryWrapper<>(User.class);
    wrapper.eq(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"),2);
    wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
    wrapper.selectFun(DefaultFuncEnum.COUNT,new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolCount"));
    wrapper.groupBy(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
    
    // LambdaJoinQueryWrapper
    LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
    wrapper.eq(User::getSchoolId,2);
    wrapper.select(User::getSchoolId);
    wrapper.selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount);
    wrapper.groupBy(User::getSchoolId);

     3 mapper中直接支持的批量插入和批量更新

          原来的批量插入和更新是在service层的,现在BaseMapper提供了批量更新和插入的方法。

       

    /**
         * 批量插入
         *
         * @param collection 实体对象集合
         */
        int insertBatch(@Param(Constants.COLLECTION) Collection<T> collection);
    
    
    /**
         * 批量更新
         *
         * @param collection 实体对象集合
         * @return 受影响行数
         */
        int updateBatch(@Param(Constants.COLLECTION) Collection<T> collection);

    4 前端高级查询API

       后端在参数中配置一个QueryFilter,QueryFilter 提供一个asWrapper方法可以把前端的过滤条件包装为一个QueryWrapper

      

     @PostMapping("list")
        public List<User> filter(@RequestBody QueryFilter<User> filter){
    		//注意sex和age是安全字段,就算前端传了也不会拼接这2个字段的过滤条件。
            return mapper.selectList(filter.asWrapper(User.class,"sex","age"));
        }

     前端按照指定格式传参,即可实现后端不做多余编程前端自由控制过滤条件的效果。

    {
       "sorter":[{//排序支持ASC和DESC
           "property":"userId",
           "direction":"DESC"
       }],
       "querys":[{//过滤条件 where sex=男 and (name=张三 or name=李四 )
             "property":"name", // po字段名
             "operator":"=",//操作符 
             "value":"张三",//操作值
             "relation":"OR",//关联关系AND OR
             "group":"nameGroup"//相同的group 外层会加括号
       },
       {
             "property":"name",
             "operator":"=",
             "value":"李四",
             "relation":"OR",
             "group":"nameGroup"
       },{
             "property":"sex", //使用了默认的关联关系AND 以及默认操作符 =
             "value":"男"
       }]
    }

    操作符支持:支持 = > >= < <= like like_l like_r not_like is_null not_null in not_in between not_between 等常见操作 如果是in 等操作 value支持数组传参 

    Mybatis Plus4 临时仓库地址:mybatis-plus4: mybatis-plus 4.0 临时仓库 

    展开全文
  • 多表关联查询(使用注解)一、创建两张表二、编写实体类三、使用 @One 注解实现一对一关联四、使用 @Many 注解实现一对一关联五、Controller层六、测试 继续在 SpringBoot整合Mybatis-Plus 基础上修改项目 一、创建...

    继续在 SpringBoot整合Mybatis-Plus 基础上修改项目

    一、创建两张表

    用户表(User)、区域表(Area),其中用户表里通过 area_id 字段关联区域表的 id 主键
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、编写实体类

    User

    package org.spring.springboot.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    
    @Data
    public class User {
        //指定主键使用数据库ID自增策略
        @TableId(type = IdType.AUTO)
        private Integer id;
        private String userName;
        private String passWord;
        private Integer areaId;
        //由于 area_name 不是 User 数据库表里的字段,因此需要添加 @TableField 注解,并将 exist 属性设置为 false。
        @TableField(exist = false)
        private String areaName;
        //假设我们需要查询一个区域及其下面的所有用户,首先对 Area 实体类稍作修改,增加 users 集合属性
        @TableField(exist = false)
        private Area area;
    }
    

    Area

    package org.spring.springboot.entity;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    import java.util.List;
    
    @Data
    public class Area {
        //指定主键使用数据库ID自增策略
        @TableId(type = IdType.AUTO)
        private Integer id;
        private String areaName;
    
        @TableField(exist = false)
        private List<User> users;
    }
    

    三、使用 @One 注解实现一对一关联

    UserMapper

    package org.spring.springboot.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Select;
    import org.spring.springboot.entity.User;
    import org.springframework.stereotype.Repository;
    
    @Mapper
    @Repository
    public interface UserMapper extends BaseMapper<User> {
        @Select("select user.* ,area.area_name from user,area "+
                " where user.area_id = area.id and user.id = #{id}"
                )
        User getUserById(int id);
    
        @Select("SELECT * FROM user WHERE area_id = #{areaId}")
        User selectByAreaId(int areaId);
    }
    

    UserMapperOne

    package org.spring.springboot.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.apache.ibatis.annotations.*;
    import org.spring.springboot.entity.User;
    import org.springframework.stereotype.Repository;
    
    @Mapper
    @Repository
    public interface UserMapperOne extends BaseMapper<User> {
        //@Results 注解来映射查询结果集到实体类属性
        /*
        * 当我们需要通过查询到的一个字段值作为参数,去执行另外一个方法来查询关联的内容,而且两者是一对一关系时,可以使用 @One 注解来便捷的实现。
          selectById 方法是 BaseMapper 就提供的,所以我们不需要在 AreaMapper 中手动定义。
          @Result(column = "area_id", property = "areaId") 可以不写,也不会报错。但是会导致我们查询结果(User 实体)的 areaId 属性没有值(因为第二个 Result 将 area_id 值作为查询条件传入子查询)。
        */
        @Results({
                @Result(column = "area_id", property = "areaId"),
                @Result(column = "area_id", property = "area",
                        one = @One(select = "org.spring.springboot.mapper.AreaMapper.selectById"))
        })
        @Select("SELECT * FROM user WHERE id = #{id}")
        User getUserById(int id);
    }
    

    四、使用 @Many 注解实现一对一关联

    AreaMapper

    package org.spring.springboot.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.apache.ibatis.annotations.*;
    import org.spring.springboot.entity.Area;
    import org.springframework.stereotype.Repository;
    
    @Mapper
    @Repository
    public interface AreaMapper extends BaseMapper<Area> {
        /*
        @Many 的用法与 @One 类似,只不过如果使用 @One 查询到的结果是多行,会抛出 TooManyResultException 异常,这种时候应该使用的是 @Many 注解,实现一对多的查询。
        @Result(column = "id", property = "id") 可以不写,也不会报错。但是会导致我们查询结果(Area 实体)的 id 属性没有值(因为第二个 Result 将 id 值作为查询条件传入子查询)。
        */
        @Results({
                @Result(column = "id", property = "id"),
                @Result(column = "id", property = "users",
                        many = @Many(select = "org.spring.springboot.mapper.UserMapper.selectByAreaId"))
        })
        @Select("SELECT * FROM area WHERE id = #{id}")
        Area getAreaById(int id);
    }
    

    五、Controller层

    SelectController

    package org.spring.springboot.controller;
    
    import org.spring.springboot.entity.Area;
    import org.spring.springboot.entity.User;
    import org.spring.springboot.mapper.AreaMapper;
    import org.spring.springboot.mapper.UserMapper;
    import org.spring.springboot.mapper.UserMapperOne;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/api")
    public class SelectController {
        @Autowired
        UserMapper userMapper;
        @Autowired
        UserMapperOne userMapperOne;
        @Autowired
        AreaMapper areaMapper;
    
        @RequestMapping("/selectUser")
        public User test(){
            User user = userMapper.getUserById(1);
            return user;
        }
    
        @RequestMapping("/selectUserOne")
        public User testOne(){
            User user = userMapperOne.getUserById(1);
            return user;
        }
    
        @RequestMapping("/selectUserMany")
        public Area testMany(){
            Area area = areaMapper.getAreaById(1);
            return area;
        }
    }
    

    六、测试

    输入http://localhost:8086/api/selectUser
    在这里插入图片描述
    输入http://localhost:8086/api/selectUserOne
    在这里插入图片描述
    输入http://localhost:8086/api/selectUserMany
    在这里插入图片描述
    整体项目结构
    在这里插入图片描述

    参考文章
    SpringBoot - MyBatis-Plus使用详解7(Mapper的CRUD接口4:多表关联查询)

    展开全文
  • MyBatis Plus 的多表...多表关联、分页查询接口 http://localhost/common/getAllQuestionWithStudentByPage/1/10 多表关联、分页带参数查询接口 http://localhost/common/getAllQuestionWithStudentByPage/1/10/admin
  • 项目中,我们主关联表进行连表插入的时候,我们往主插入数据的ID可能是自动生成的,那么这个时候我们往关联表里插入数据时没有主的主键id!我们可以通过MySQL的函数LAST_INSERT_ID,进行获取!他对比...
  • 文档中主要说明:(1)多表联合查询步骤,快捷便利;(2)数据批量插入,以及相关的案例,节省运行资源。
  • 今天在写学校的实训项目时,遇到如下问题,一个实体类与另一个实体类是多多对的关系,且有个实体类中所存储的是另一个实体类的集合,所以在进行插入操作是,要同时向两张插入数据,现在已经得到解决办法。...
  • user中有dept_id外键,关联dept中的主键dept_id 需求:查询user中信息时,显示dept的deptName 操作: user实体中建立detp实体属性 返回给前台最终的数据如图: 实现类代码: /** * 查询人员...
  • 连带操作:首先先在Role插入一条数据,接着拿到rid,往Role-Acl插入一条数据 数据库设计: Role: Role-Acl: 代码实现: RoleMap: /** * @Description: 新增角色 */ @Insert("insert into ...
  • 表关联,不推荐新建pojo,可以传入3个对象,若其中有相同字段,则无法解决不同中重复字段,所以选用1个主对象和2个副中的字段
  • 两个 grade 和teacher表关联怎么插入数据,在xml中怎么设计 定义: public class Grade { private Integer c_id; private String c_name; private Teacher teacher; 省略get 、set方法...} ...
  • 1. 使用@select注解的方式。返回值如常用则创建VO,如不常用可直接使用map接收 @Select(...使用xml的方式 SELECT a.*,b.* FROM a LEFT JOIN b ON a.x=b.x //重点是这里会插入wrapper的搜索语句 ${ew.customSqlSegment}
  • MyBatisPlus自定义Sql(多表联查)

    千次阅读 2020-07-15 21:12:53
    MyBatisPlus自定以...在开发中我们存在多表及各式各样的复杂查询,对于这种问题MyBatisPlus也有相对应的解决办法: 比如像MyBatisPLus中自带的BaseMapper里就有很多CRUD的接口,包括Mapper层及Servi
  • @Autowired private UserMapper userMapper; //userMapper是之前写好的mapper接口 @Test //测试 public void insertTest(){ User user = new User(); user.setName("aa"); user.setAge(22);...
  • Mybatis多表操作

    千次阅读 2022-01-26 15:02:16
    mybatis的多表操作是最接近实际业务需求的操作,因此开一篇文章记录一下 一、一对一操作 使用mysql数据库 数据库环境 CREATE DATABASE db2; USE db2; CREATE TABLE person( id INT PRIMARY KEY AUTO_INCREMENT, ...
  • MyBatisPlus 一对对一、的解决方案

    万次阅读 热门讨论 2019-07-19 22:29:58
    但是在实际运用时对象之间的关系非常复杂,一对对一、。网上查询了大量质量都无法解决此问题。难道要把所有的用Mybatis的重写一次,重写一次Plus的方法还能不能用。实在没办只能查看官网...
  • Mybatis多表插入

    万次阅读 2018-01-19 11:47:55
    时候我们会碰到这样一个需求,当前我有(用户)和(角色),他们之间是的关系,所以我们通常会创建一个关联表(用户_角色),现在我们有固定的角色,只需要添加用户即可,给用户指定角色,那我们...
  • MyBatis Plus 主子表插入与查询数据

    万次阅读 2019-01-08 15:08:53
    描述 在mybatis plus官网代码基础上修改 Mybatis-Plus SpringMVC 演示 demo 文件结构 实体类 主:newsys_user 子:newuser_item ...import com.baomidou.mybatisplus.annotations.TableField; ...
  • mybatis-plus 多表批量

    2022-03-17 14:33:13
    } /** * 对一 根据外键删除 * * @param s * @param key * @param value * @param * @param * @return */ public > Boolean removesEq(List s, String key, Object value) { AtomicBoolean atomicBoolean = new...
  • 多表连查 多表删除 多表修改 多表连查 首先从实体类开始,数据库中没有的字段,但是我又要用到,应该这样做 这就表示数据库中没有这个字段,但是你要用。 在配置文件中用collection来进行分表查询 ...
  • //保存项目对象 this.save(project); //保存后项目对象的id值会更新为自增id (要在实体类中标注@TableId的... //保存关联信息 userProject.setProjectId(projectId); userProjectService.save(userProject); ...
  • 使用MybatisPlus执行插入操作 我们插入一条记录 @Test public void testInsert(){ User user = new User(); user.setName("钓鱼者"); user.setAge(3); user.setEmail("123456789@qq.com"); int result...
  • re_dele_attorney aa ON a.id = aa.dele_id WHERE a.id=#{Id} </select> 最后会导致两列名相同的“id”列值被覆盖: { “code”: 1, “msg”: “操作成功”, “data”: [ { “id”: “756172726246354944”, ...
  • mybatisplus关联异常

    2021-08-02 11:47:49
    出现情景: 重复批量插入 主要报错信息: ERROR c.x.e.handler.GlobalExceptionHandler - nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to ...
  • SpringBoot+MyBatis多表联合查询

    千次阅读 2021-11-16 19:39:38
    SpringBoot+MyBatis多表联合查询 写在前面 联合查询在实际工作中用的并不多,因为很多表的数据比较大,或者说未来比较大的表,都要谨慎使用联合查询 数据准备 建表语句 create table m_user ( id bigint not null ...
  • 这样我们就需要在显示页面时候关联查询数据字典 比如审核状态:待审核,已驳回,已完成,只能在数据库中存入UUID类型的值 具体sql如下 SELECT b.ID, b.BILL_WAY, sc1.CODE_VALUE AS "BILL_WAY_NAME" FROM BH...
  • 如果是分页查询,就按照主数据获得分页查询结果Page,再将除Records外的数据属性转移给新建的Page,遍历从Page中用getRecords获得的List,foreach按照步骤2和步骤3处理并保存至List,然后插入Page返回 ...
  • -- 数据库关联 --> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter <version>1.1.10 <groupId>mysql <artifactId>mysql-connector-java 自动配置 <groupId>org.spring...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 930
精华内容 372
关键字:

mybatisplus多表关联插入