Mybatis(2)---多表查询

首先数据库表展示

User表

在这里插入图片描述
Role角色表
在这里插入图片描述
关联User表与Role表关系的user_role表
在这里插入图片描述
因为是要串联关系所以需要设置外键,以下是外键展示
在这里插入图片描述

工程目录展示

在这里插入图片描述

pom.xml依赖配置

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency></dependencies>

顺便附上Maven阿里云仓库

这样比较快 我之前创建一个项目都要10来分钟,现在只需要几秒

  <mirrors><mirror>  <id>alimaven</id>  <name>aliyun maven</name>  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  <mirrorOf>central</mirrorOf>          </mirror>  </mirrors>

SqlMapConfig.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties"></properties><!--typeAliases 得放在properties下面 不然会报错--><typeAliases><package name="com.domain" /></typeAliases><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><package name="com.DAO"/></mappers>
</configuration>

实体类

user

package com.domain;import java.io.Serializable;
import java.util.Date;
import java.util.List;public class User implements Serializable {private int id;private String username;private Date birthday;private String sex;private String address;/*多对多关系映射*/private List<Role> roles;public List<Role> getRoles() {return roles;}public void setRoles(List<Role> roles) {this.roles = roles;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
}

Role

package com.domain;import com.sun.xml.internal.bind.v2.model.core.ID;import java.io.Serializable;
import java.util.List;public class Role implements Serializable {private int ID;private String ROLE_NAME;private String ROLE_DESC;/*多对多关系映射*/private List<User> users;public List<User> getUsers() {return users;}public void setUsers(List<User> users) {this.users = users;}public int getID() {return ID;}public void setID(int ID) {this.ID = ID;}public String getROLE_NAME() {return ROLE_NAME;}public void setROLE_NAME(String ROLE_NAME) {this.ROLE_NAME = ROLE_NAME;}public String getROLE_DESC() {return ROLE_DESC;}public void setROLE_DESC(String ROLE_DESC) {this.ROLE_DESC = ROLE_DESC;}@Overridepublic String toString() {return "Role{" +"ID=" + ID +", ROLE_NAME='" + ROLE_NAME + '\'' +", ROLE_DESC='" + ROLE_DESC + '\'' +'}';}
}

dao

package com.DAO;import com.domain.User;import java.util.List;public interface IUser {List<User> findAll();}
package com.DAO;import com.domain.Role;import java.util.List;public interface IRole {List<Role> findAll();
}

对应的Mapper映射配置文件及测试

IUser.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.DAO.IUser"><resultMap id="UserRole" type="User"><id property="id" column="id"></id><result property="username" column="username"></result><result property="address" column="address"></result><result property="sex" column="sex"></result><result property="birthday" column="birthday"></result><collection property="roles" ofType="Role"><result property="ID" column="ID"></result><result property="ROLE_NAME" column="ROLE_NAME"></result><result property="ROLE_DESC" column="ROLE_DESC"></result></collection></resultMap><select id="findAll" resultMap="UserRole" >select u.*,r.* from  user u left outer join user_role ur on u.id=ur.uid left outer join role r on r.id=ur.rid</select></mapper>

附上测试类代码

package com.test;import com.DAO.IUser;import com.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class UserTest {private InputStream in=null;private SqlSessionFactory factory=null;private SqlSession sqlSession=null;private IUser iUser=null;@Beforepublic void Init() throws IOException {in= Resources.getResourceAsStream("SqlMapConfig.xml");factory=new SqlSessionFactoryBuilder().build(in);sqlSession=factory.openSession();iUser=sqlSession.getMapper(IUser.class);}@Afterpublic void Close() throws IOException {sqlSession.commit();//提交事务if(sqlSession!=null){sqlSession.close();}if(in!=null){in.close();}}@Testpublic void TestfindAll(){List<User> user=iUser.findAll();for(User user1:user){System.out.println(user1);System.out.println( user1.getRoles());}}
}

查询所有用户的信息及其身份的结果集展示

在这里插入图片描述

IRole.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.DAO.IRole"><resultMap id="RoleUser" type="Role"><id property="ID" column="ID"></id><result property="ROLE_NAME" column="ROLE_NAME"></result><result property="ROLE_DESC" column="ROLE_DESC"></result><collection property="users" ofType="User"><id property="id" column="id"></id><result property="username" column="username"></result><result property="password" column="password"></result><result property="address" column="address"></result><result property="sex" column="sex"></result><result property="birthday" column="birthday"></result></collection></resultMap><select id="findAll" resultMap="RoleUser">select r.*,u.* from Role r left outer join user_role ur on r.id=ur.rid left outer join User u on u.id=ur.uid</select>
</mapper>

附上测试类代码

package com.test;import com.DAO.IRole;
import com.DAO.IUser;
import com.domain.Role;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class RoleTest {private InputStream in=null;private SqlSessionFactory factory=null;private SqlSession sqlSession=null;private IRole iRole=null;@Beforepublic void Init() throws IOException {in= Resources.getResourceAsStream("SqlMapConfig.xml");factory=new SqlSessionFactoryBuilder().build(in);sqlSession=factory.openSession();iRole=sqlSession.getMapper(IRole.class);}@Afterpublic void Close() throws IOException {sqlSession.commit();//提交事务if(sqlSession!=null){sqlSession.close();}if(in!=null){in.close();}}@Testpublic void TestfindAll(){List<Role> roles=iRole.findAll();for(Role role:roles){System.out.println(role);System.out.println(role.getUsers());}}}

查询所有身份信息及对应的用户信息的结果集

在这里插入图片描述
其实在这多对多中也映射了一对多的关系
查询这边运用了多表查询中的左外连接
具体可以参考这篇大佬的博客 mysql多表查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript复习使用定时器的简易式诸葛大力轮播图

先上效果图 很简单的代码 先创建个文件夹保存成果的照片&#xff0c;然后通过更改src来用定时器循环这些照片 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"…

复习---使用基础语法实现栈及迭代

上图是最最基本的结构&#xff0c;这次我采用数组实现栈。使用数组实现栈&#xff0c;由于java的数组是固定长度的。所以我需要写一个增加长度的方法。然后就是迭代的问题了。使用数组实现栈的话&#xff0c;我们需要写一个迭代器。不过这个迭代器非常容易实现&#xff0c;只需…

复习----使用链表实现栈(后进先出)及迭代

使用链表进行模拟栈比用数组好用&#xff0c;考虑的要素也少还方便。 链表结构 private class Node{//链表结构Item item;Node next;}迭代器 private class Iterator implements java.util.Iterator<Item>{//迭代器private Node pfirst;Overridepublic boolean hasNex…

复习----使用链表实现队列(先进先出)及迭代

实现队列比实现栈的会多一点复杂&#xff0c;需要两个标记&#xff0c;first表示队头&#xff0c;last表示队尾。 链表结构 private class Node{Item item;Node next;}迭代器 与实现栈的迭代器一模一样 private class Iterator implements java.util.Iterator<Item>{p…

RedHat Enterprise AS4安装步骤

//因RDMS使用新版本CentOS6.2 有问题 &#xff0c; 没办法只有装低版本操作系统 &#xff01; 概述 Redhat公司的Enterprise Linux AS系列 &#xff08;以下简称AS系列&#xff09;&#xff0c;其中Fedora Core 是符合GPL协议的免费版本&#xff0c;使用范围广泛。AS是高性能的…

贪心---leetcode-376摆动序列

题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&#xff0c;因为差值 (6,-3,…

贪心---移掉K位数字

题目 给定一个以字符串表示的非负整数 num&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。 示例 1 : 输入: num “1432219”, k 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2 形…

应用层——使用 Socket 通信实现 FTP 客户端程序

转自&#xff1a;http://blog.csdn.net/yixijide/article/details/8280263 简介&#xff1a; FTP 客户端如 FlashFXP&#xff0c;File Zilla 被广泛应用&#xff0c;原理上都是用底层的 Socket 来实现。FTP 客户端与服务器端进行数据交换必须建立两个套接字&#xff0c;一个作为…

Java-IO-对接流

不管是什么文件都可以用字节来表示&#xff0c;下面的例子是将图片解码成字节&#xff0c;然后再编码成图片。 过程 首先将图片解码&#xff0c;我们需要用文件字节输入流&#xff1a;FIleInputStream 用FIleInputStream可以将图片储存到字节数组中&#xff0c;我们通过read(…

蓝桥杯试题 算法提高 数组求和

题干 我人比较蠢想不出好的解决方案&#xff0c;只能采用暴力破解才能维持的了生活这样。。资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB 问题描述 输入n个数&#xff0c;围成一圈&#xff0c;求连续m&#xff08;m<n&#xff09;个数的和最大为多少&a…

一次较为完整的原生JavaScript AJAX与Java的前后端数据交互

效果 Maven 依赖 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>mysql</groupId><artifactId…

工厂模式解耦---控制反转

控制反转 是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;&#xff0c;还有一种方式叫“依赖查找”&#xff08;Dependency Lookup&#xff09…

mySQL教程 第7章 存储过程和函数

第7章 存储过程和函数 存储过程和存储函数 MySQL的存储过程&#xff08;stored procedure&#xff09;和函数&#xff08;stored function&#xff09;统称为stored routines。 1. MySQL存储过程和函数的区别 函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行…

简单的ajax上传商品功能使用SevletFileUpload和FormData

目录1、先上图2、使用ServletFileUpload读取前端发送过来的请求2.1、maven依赖2.2、SevletFileUpload的一些基本操作3、前端代码4、 Servlet4.1、后端返回商品列表4.2、添加商品4.3、商品DAO层4.3.1、 ProductDao4.3.2、ProductDaoimpl1、先上图 2、使用ServletFileUpload读取前…

JavaScript实现数据分页

目录分页效果图如何分页代码分页 当表单数据过多时&#xff0c;比较不容易浏览。这个时候就需要分页查看。 效果图 如何分页 1、首先确定总记录条数 len 2、单页浏览条数 page_number 3、页数 Total_pageslen % page_number 0 ? len / page_number : len / page_number 1;…

日均互动50万次 微信的营销的成功之道

微信公众平台已成为目前最热的企业营销推广平台&#xff0c;每天都有大量互联网公司和传统企业进驻&#xff0c;使用公众账号通过移动端和粉丝互动&#xff0c;不仅可以群发文字、图片、视频、语音等信息内容&#xff0c;还可以进行一对一的深入沟通。 现在微信公众平台已经成为…

微信开发1之PHP成功获取微信支付的Token

相信不少同学在开发“微信支付”的时候遇到了无法获取Token的难题&#xff0c;这里贴出我成功获取Token的php源码&#xff1a; 步骤如下&#xff1a; 1&#xff0c;确保你服务器的php环境是搭建好的&#xff0c;意思就是可以正确运行php程序 2&#xff0c;确定微信Token访问你…

spring IOC基本配置(xml配置和注解配置)

目录Spring IOCIOC是什么IOC可以做什么依赖注入IOC和DIIOC容器Bean配置IOC容器spring ioc 依赖XML配置实例化容器使用容器xml配置详解spring对bean的管理1、创建bean的三种方式2、bean对象的作用范围3、bean对象的生命周期构造函数依赖注入Setter方法依赖注入注解配置使用xml和…

微信开发2之php网页授权登录

在开发之前&#xff0c;我们要确保我们的服务号&#xff0c;在接口权限处&#xff0c;已经获得了网页授权权限 此外&#xff0c;我们还需要有个备案通过的域名&#xff0c;比如"www.myname.com"&#xff0c;并确保你的域名可以访问到你的服务器&#xff0c;于是在公众…

linux6.0 SVN 服务搭建

Linux6.0下安装svn服务器<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Subversion有两种运行方式&#xff0c;一种是基于Apache Http Server&#xff0c;另外一种是Subversion Standalone Server。下面我讲解的是基于Apache H…