精华内容
下载资源
问答
  • Mybatis 多对多关联表关联 如何插入关联表数据

    万次阅读 多人点赞 2017-03-20 17:00:23
    很多时候我们会碰到这样一个需求,当前我有(用户)表和(角色)表,他们之间是多对多的关系,所以我们通常会创建一个关联表(用户_角色)表,现在我们有固定的角色,只需要添加用户即可,给用户指定角色,那我们...

    很多时候我们会碰到这样一个需求,当前我有(用户)表和(角色)表,他们之间是多对多的关系,所以我们通常会创建一个关联表(用户_角色)表,现在我们有固定的角色,只需要添加用户即可,给用户指定角色,那我们怎么做呢,废话不多说了,下面给出思路:

            表 :user   /   role   /   user_role 

    对应JavaBean如下:

    用户表:

    public class User implements Serializable {
    
    	// Fields
    
    	private Integer id;
    	private String login;
    	private String name;
    	private String pass;
    	private String phone;
    	private String email;
    	private Integer isadmin;
    
           // get...set...
    }

    角色表:

    public class Role implements Serializable {
    
    	// Fields
    
    	private Integer roleId;
    	private String roleName;
    	private Date createdTime;
    	private Date updateTime;
    
    	//get...set...
    }

    用户_角色关联表(当然,它不创建也可以):

    public class UserRole implements Serializable {
    
    	// Fields
    
    	private Integer id;
    	private Integer userId;
    	private Integer roleId;
    
    	//get...set...
    }

    //**以下所有操作中,所有JavaBean使用别名(typeAlias)方式,不会的话自行百度

    需求,添加用户并为当前用户指定多个角色,主要Sql:

    1: 首先插入用户(实现插入用户并且返回插入用户的主键):

    <insert id="save" parameterType="User" useGeneratedKeys="true"
    		keyProperty="id">
    		insert into user(login,name,pass,phone,email,isadmin)
    		values(#{login},#{name},#{pass},#{phone},#{email},${isadmin})
    </insert>
    //useGeneratedKeys="true" 设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的主键字段中

    //keyProperty="id"  指定JavaBean的主键字段


    2:为用户匹配角色:

    方式一(适用于除了插入被关联表的ID,还要插入被关联表中的其他信息,例如:角色类型( 当前设计中此字段不存在,仅仅用于举例子)):

    <insert id="saveUserOrRole" parameterType="map">
    		insert into user_role(
    		user_id,role_id,role_type
    		)
    		select u.id,r.role_id,r.role_type from user u,role r where
    		u.id = ${userId} and
    		r.role_id in
    		<foreach collection="roleIds" item="rId" open="(" separator=","
    			close=")">
    			#{rId}
    		</foreach>
    </insert>


    方式二(适用于只需要插入被关联表的ID)

    insert into user_role(
    		user_id,role_id
    		) values
    		<foreach collection="roleIds" item="rId" separator=",">
    			(${userId},#{rId})
    		</foreach>

    //注意在执行完第一条插入用户sql后,在外部访问对象User的主键是已经存在的,类似hibernate持久化后对象已经拥有ID信息



    这里把测试代码给出(Junit4):

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath*:spring-*.xml")
    public class TestSSM {
    	@Resource
    	protected UserMapper userMapper;
    	
    	
    	@Test
    	public void testInsert() {
    		User user = new User();
    		user.setEmail("yhq1913@sina.com");
    		user.setLogin("ytzl");
    		user.setName("云图智联");
    		//密码加密
    		user.setPass(DigestUtil.hmacSign("ytzl", "yuntuzhilian"));
    		user.setPhone("15910721339");
    		user.setIsadmin(1);
    		userMapper.save(user);
    		Map<String, Object> saveParams = new HashMap<>();
    		saveParams.put("userId", user.getId());
    		//这里指定两个角色的ID进行测试
    		saveParams.put("roleIds", Arrays.asList("1", "2"));
    		userMapper.saveUserOrRole(saveParams);
    	}
    }


    //测试结果:数据成功插入。

    展开全文
  • MySQL关联表查询数据

    千次阅读 2019-04-02 21:47:53
    MySQL关联表查询数据 t1表如下: t2表如下: (inner) join只有左右表的数据匹配才会返回。 SELECT * FROM t1 INNER JOIN t2 ON t1.cid=t2.id 结果如下: left join返回联接左边表的所有行,即使在右边表中...

    数据库中有两张表
    t1表如下:
    在这里插入图片描述
    t2表如下:
    在这里插入图片描述
    (inner) join只有左右表的数据匹配才会返回。
    SELECT * FROM t1 INNER JOIN t2 ON t1.cid=t2.id
    结果如下:
    在这里插入图片描述
    left join返回联接左边表的所有行,即使在右边表中没有匹配的行。
    SELECT * FROM t1 LEFT JOIN t2 ON t1.cid=t2.id
    结果如下:
    在这里插入图片描述
    right join返回联接右边表的所有行,即使在左边表中没有匹配的行。
    SELECT * FROM t1 RIGHT JOIN t2 ON t1.cid=t2.id
    结果如下:
    在这里插入图片描述
    full join返回联接左右两边表的所有行,即使不匹配。
    SELECT * FROM t1 FULL JOIN t2 ON t1.cid=t2.id
    结果如下:
    在这里插入图片描述
    MySQL数据库不支持full join,可以左联+union+右联实现
    SELECT * FROM t1 LEFT JOIN t2 ON t1.cid = t2.id
    UNION
    SELECT * FROM t1 RIGHT JOIN t2 ON t1.cid = t2.id

    注意 select 。。。。。。on t1.cid=t2.id and t1.name=‘su’
       select 。。。。。。on t1.cid=t2.id where t1.name=‘su’
    这两条语句在内部联接和外部联接的运行结果有所不同,内部联接结果一样,而外部联接结果是不一样的
    SELECT * FROM t1 LEFT JOIN t2 on t1.cid=t2.id WHERE t1.name=‘su’
    在这里插入图片描述
    SELECT * FROM t1 LEFT JOIN t2 on t1.cid=t2.id AND t1.name=‘su’
    在这里插入图片描述

    展开全文
  • SpringBoot+MybatisPlus实现关联表查询

    千次阅读 2020-04-07 23:46:06
    最近写代码用到了mybatisPlus涉及到关联表查询。需求是这样的: 我有一个专业表major其中有个字段是所属院系dept_id,我需要通过这个dept_id关联院系表department的ID去获取院系的名称。例如:国际贸易。 实现效果:...

    1.说明

    最近写代码用到了mybatisPlus涉及到关联表查询。需求是这样的:
    我有一个专业表major其中有个字段是所属院系dept_id,我需要通过这个dept_id关联院系表department的ID去获取院系的名称。
    例如:经济管理学院

    实现效果:
    在这里插入图片描述

    2.实现步骤

    2.1 现有实体类

    • 院系实体
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("tb_department")
    @ApiModel(value="Department对象", description="院系")
    public class Department implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "院系ID")
        @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    
        @ApiModelProperty(value = "院系代码")
        private String deptNo;
    
        @ApiModelProperty(value = "院系名称")
        private String deptName;
    
        @ApiModelProperty(value = "院系位置")
        private String deptLocation;
    
        @ApiModelProperty(value = "备注")
        private String deptRemark;
    
        @ApiModelProperty(value = "创建时间")
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
    
        @ApiModelProperty(value = "更新时间")
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    
    
    }
    
    • 专业实体
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("tb_major")
    @ApiModel(value="Major对象", description="专业")
    public class Major implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "专业ID")
        @TableId(value = "id", type = IdType.AUTO)
        private Long id;
    
        @ApiModelProperty(value = "专业代码")
        private String majorNo;
    
        @ApiModelProperty(value = "专业名称")
        private String majorName;
    
        @ApiModelProperty(value = "所属学院")
        private Long deptId;
    
        @ApiModelProperty(value = "备注")
        private String majorRemark;
    
        @ApiModelProperty(value = "创建时间")
        @TableField(fill = FieldFill.INSERT)
        private Date createTime;
    
        @ApiModelProperty(value = "更新时间")
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;
    
    
    }
    
    

    2.2 创建vo对象

    • MajorVO 前端列表展示用
    @Data
    @ApiModel(value = "MajorVO", description = "展示用专业信息")
    public class MajorVO implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "专业ID")
        private Long id;
    
        @ApiModelProperty(value = "专业代码")
        private String majorNo;
    
        @ApiModelProperty(value = "专业名称")
        private String majorName;
    
        @ApiModelProperty(value = "所属院系ID")
        @TableField("dept_id")
        private Long deptId;
    
        @ApiModelProperty(value = "所属院系")
        private String deptName;
    
        @ApiModelProperty(value = "备注")
        private String majorRemark;
    
        @ApiModelProperty(value = "创建时间")
        private Date createTime;
    }
    

    2.3 修改MajorMapper

    public interface MajorMapper extends BaseMapper<Major> {
        /**
         *
         * @param page 前端传入
         * @return
         */
        @Select("SELECT m.*,d.`dept_name` FROM tb_major m,tb_department d WHERE m.dept_id=d.id")
        List<MajorVO> selectMajorList(Page page);
    
    }
    

    2.4 修改MajorService

    public interface MajorService extends IService<Major> {
        void pageQuery(Page<MajorVO> pageParam);
    
    }
    
    @Service
    public class MajorServiceImpl extends ServiceImpl<MajorMapper, Major> implements MajorService {
    
        @Override
        public void pageQuery(Page<MajorVO> page) {
             List<MajorVO> records = baseMapper.selectMajorList(page);
             page.setRecords(records);
             page.setTotal(records.size());
    
        }
    }
    

    2.5 修改controller

    @ApiOperation(value = "专业分页列表")
        @GetMapping("{page}/{limit}")
        public Result pageQuery(
                @ApiParam(name = "page", value = "当前页码", required = true)
                @PathVariable Long page,
                @ApiParam(name = "limit", value = "每页记录数", required = true)
                @PathVariable Long limit){
    
            Page<MajorVO> pageParam = new Page<>(page, limit);
            majorService.pageQuery(pageParam);
    
            return  Result.ok().data("total", pageParam.getTotal()).data("rows", pageParam.getRecords());
        }
    

    3.swagger测试

    在这里插入图片描述

    4.项目源码

    https://gitee.com/indexman/student-server

    展开全文
  • JPA 关联表添加关联条件,当我其中一个表的数据状态发送改变,不是业务上所需要的,这时实体查询还是会带出关联数据,所以我们需要处理这部分数据;第一种方式:删除中间表对应数据;第二种添加关联条件,按条件带出...

    JPA 关联表添加关联条件,当我其中一个表的数据状态发送改变,不是业务上所需要的,这时实体查询还是会带出关联数据,所以我们需要处理这部分数据;第一种方式:删除中间表对应数据;第二种添加关联条件,按条件带出有效数据

    • 代码示例
      • 用户实体
       @Entity
       @Table(name = "pmi_t_user")
       @org.hibernate.annotations.Table(appliesTo = "pmi_t_user",comment="用户信息表")
       @Component
       @ApiModel(value = "用户实体")
       public class User implements Serializable {
       
           private static final long serialVersionUID = -4618191047832700121L;
           /**
            * 主键id
            */
           @ApiModelProperty(value = "主键id")
           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private Long id;
       
       
           /**
            * 用户名
            */
           @ApiModelProperty(value = "用户名", required = true)
           @NotBlank(message = "用户名不能为空")
           @Column(name = "user_name", nullable = false,columnDefinition="varchar(100) COMMENT '用户名'")
           private String userName;
       
       
           /**
            * 关联角色 db_status 是数据库角色表字段
            * @WhereJoinTable(clause = "db_status = 1")
            */
           @ApiModelProperty(value = "关联角色")
           @ManyToMany(fetch = FetchType.EAGER,targetEntity = Role.class)
           @JsonIgnoreProperties(value = { "users" })
           @Where(clause = "db_status = 1")
           @JoinTable(name = "pmi_t_user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
           @org.hibernate.annotations.ForeignKey(name = "none")
           private Set<Role> roles;
       }
      
      • 角色
       @Entity
       @Table(name = "pmi_t_role")
       @org.hibernate.annotations.Table(appliesTo = "pmi_t_role",comment="角色")
       @ApiModel(value = "角色")
       public class Role implements Serializable {
       
           private static final long serialVersionUID = 2376963713493278377L;
           /**
            * 主键id
            */
           @ApiModelProperty(value = "主键id")
           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private Long id;
       
           /**
            * 角色名称
            */
           @ApiModelProperty(value = "角色名称")
           @NotNull(message = "角色名称不能为空")
           @Length(max = 20,min=1, message = "角色名称长度大于1小于20")
           @Column(name = "role_name", nullable = false,columnDefinition="varchar(20) COMMENT '角色名称'")
           private String roleName;
       
       
           /**
            * 数据状态 1:正常  -1:删除
            */
           @ApiModelProperty(value = "数据状态")
           @Column(name = "db_status", nullable = false,columnDefinition="tinyint(4) DEFAULT '1' COMMENT '数据状态 1:正常  -1:删除'")
           private int dbStatus;
       
       }
      
    • 查询效果:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • sql打印
      在这里插入图片描述
    展开全文
  • 主表,从表,关联表,父表,子表

    万次阅读 2016-03-03 16:38:58
    主表,从表,关联表,父表,子表 博客分类:  DataBase Design   一、前言  在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之...
  • Oracle中update关联表

    千次阅读 2017-07-10 15:10:16
    在oracel中修改关联表时,直接上实例: update O o set   (o.o1,o.o2,o.o3)=(  select d.d1,d.d2,d.d3 from D d where o.o4=d.d4  )  where exists(  select 1 from D d where o.o4=d.d4 ) 这是
  • DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?这里做了深入的解释: 1、 delete from t1 where 条件 2、delete t1 from t1 where 条件 3、 delete t1 from t1,t2 where 条件 4、delete t1,t2 from t1,...
  • zigbee关联表AssociatedDevList

    千次阅读 2016-02-19 09:40:34
    关联表的操作 AssociatedDevList 表为与此设备相关联的设备表,并不是 ZigBee 网络中的所有设备信息表。表中信息的 IEEE 地址是唯一的,每个设备加入它的父节点时会在表中添加一个记录,但是子节点断电离开...
  • MyBatis实现关联表查询

    千次阅读 2018-09-10 03:53:22
    MyBatis如何使用关联表查询: 1.创建表和数据(我们假设创建一张教师表和班级表,假设一个老师带一个班,那么老师和班级就是一对一的关系)便之间的关系如下: 2.定义实体类 Class实体类: Teacher实体类: 2....
  • informix关联表update数据

    千次阅读 2018-01-16 15:37:33
    informix关联表update数据: 1.关联两个表   Update A set A.type= (select B.type from B where B.ID= A.ID) where exists (select 1 from B where B.ID = A.ID);  注意:Informix中Update操作不支持表的...
  • Mybatis中关联表需要创建实体对象吗?

    千次阅读 2020-12-24 15:27:00
    1、比如在用户角色权限结构中,关联表只是存储关联关系,那么这种情况下是不需要创建实体类的,业务操作可以交给Java代码来做或者直接跨表操作。 2、如果关联表中还存储有一些状态数据或者是资源数据,那么就需要...
  • 关联与连接是针对属性表的操作... 关联表用于定义两个表间的关系虽然也基于公用字段,但并不把属性从一个表追加到另一个表,而是在需要时访问其关联的数据。  当对两表进行连接时,基于两个表的公用字段可以将属性从
  • mybatis插入数据关联表

    2017-03-27 07:59:28
    ![![![图片说明](https://img-ask.csdn.net/upload/201703/27/1490601660_641226.png)图片说明]... 我如何实现添加附加费数据的时候将附加费关联表的的数据同时添加 求大神告知 使用springmvc+mybatis
  • MySQL创建关联表的方法

    千次阅读 2016-11-28 12:05:32
    MySQL创建关联表是非常基础的知识,下面就为您举例说明MySQL创建关联表的方法,如果您对MySQL创建关联表方面感兴趣的话,不妨一看。 MySQL创建关联表可以理解为是两个表之间有个外键关系,但这两个表必须满足三个...
  • Spring Boot JPA中关联表的使用

    万次阅读 2020-03-04 09:14:56
    Spring Boot JPA中关联表的使用 本文中,我们会将会通过一个Book和Category的关联关系,来讲解如何在JPA中使用。 添加依赖 我们还是使用H2内存数据库来做测试: <dependency> <groupId>org....
  • 主表、从表、关联表、父表、子表

    千次阅读 2014-06-27 11:23:47
     在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用是非常有必要的。     ...
  • sql语句的创建关联表和简单的跨表查询简单介绍表的创建==创建数据库====创建一个用户并授权====指定使用某个数据库====老师表、班级表、学生表====给老师表创建一个唯一索引====添加外键,使表关联====往表内插入...
  • 3.关联表时出现null字段

    千次阅读 2019-07-02 22:25:08
    在实际工作中,经常会遇到需要关联表的场景,常见的关联有左连接,右连接,内连接等。关联的时候需要做到对相应的关联字段做关联,避免出现数据发散。有时候会发现需要关联的字段有null的出现,那么假如两个表中关联...
  • 这里通过一个完整的例子展示如何通过 JPA 对两张(多对多关联关联表带扩展字段)进行增删改查操作。
  • laravel的官方文档上面只介绍了...下面我来介绍在我们遇到两个进行多对多关联,而且关联的时候,设置这两个与中间关联字段。例如: a结构为: id 主键, tag 标识, ………… b结构为: ...
  • sqlalchemy框架多对多表关系中关联表数据的添加与删除 表关系如下: #关联关系表 t_stu_course = db.Table( 't_stu_course', db.Column('sid',db.Integer,db.ForeignKey('stu.id',ondelete='cascade')), db....
  • 两个相关联表 TblRecords的判定规则字段与TblRule的id字段关联 CREATE TABLE [dbo].[TblRule]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [厚度_min] [float] NOT NULL, [厚度_max] [float] NOT NULL, [平均厚度_...
  • Oracle 查询表/关联表中不重复的记录

    千次阅读 2017-11-28 00:48:06
    因为,在关联表的时候,有几张的表的数据,一个id ,都是多条对应的数据。 (1)模拟实际问题: (1)创建表结构 下面我来模拟这个实际情况:(真实的需求不能告诉你们QAQ) 其中,关联数据有三张表组成: 大致的...
  • yii2 join 连表查询得不到关联表数据

    千次阅读 2017-08-17 16:21:00
    join查询:$info = Customer::find()->select(['customer.*','user.*'])->innerjoin('user', '...如上代码,正确没问题,看文档也只介绍了怎么用,没有例子,然后一看查询结果,你炸了,只有主表数据,没有关联表use
  • 两个关联表如何更新其中一个表的数据? 今天遇到一个客户的数据更新问题,两个相关联的表,一个主表用于保存单据主要信息,一个副表用于保存单据的明细信息;现在要把主表的其中一个字段的数据更新到副表的一个...
  • 切记关联表中所需要关联的字段一定不能有重复。有重复的话要先去重,在关联。
  • 小程序云开发关联表(集合)学习

    千次阅读 2018-09-26 01:14:12
    关联表学习 文中代码并不是实际代码,伪代码不可直接运行。 功能:用户 喜欢 文章 表 用户表(users) id username 唯一标识,没有登录的可直接使用 _openid 用户名 文章表(articles) id title ...
  • 怎么才能通过关联表的信息找到其他两张表的基本信息呢? 一个是学生的基本信息表(uid,uname...) 一个是课程的基本信息表(tid,tname,ttype) 一个是中间表,使用外键进行连接(id,uid,tid) 现在想通过中间表中的tid找到...
  • 实现关联表查询

    千次阅读 2018-09-09 18:21:33
    当数据库中之间有关联时,在对数据库进行操作时,就不只是针对某一张了,需要联查询 MyBatis中如何实现联查询 1.首先,新建两张 班级(class) ID:c_id 名字:c_name 老师:teacher_id 教师...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 849,632
精华内容 339,852
关键字:

关联表