| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Mybatis学习笔记--多表查询 -> 正文阅读 |
|
[Java知识库]Mybatis学习笔记--多表查询 |
*/ User findById(Integer userId); } 实现账户的dao接口: public interface IAccountDao{ /**
*/ List findAll(); /**
*/ List findAllAccount(); } 实现一对一关系: 创建账户配置文件IAccountDao.xml:实现查询账户时同时的到账户对应的用户信息 <?xml version="1.0" encoding="UTF-8"?>select a.*,u.username,u.address from account a, user u where u.id =a.id; select u.*,a.id as aid,a.uid,a.money from account a, user u where u.id =a.uid; 测试代码:一对一操作 public class AccountTest { private InputStream in; private SqlSession sqlSession; private IAccountDao accountDao; @Before//再测试方法执行之前执行 public void init() throws Exception{ //1.读取配置文件,生成字节输入流 in= Resources.getResourceAsStream(“SqlMapConfig.xml”); //2.创建SqlSessionFactory工厂,获取SqlSessionFactory对象 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in); //3.使用工厂生产SqlSession对象 sqlSession=factory.openSession(); //4.使用SqlSession创建Dao接口的代理对象 accountDao=sqlSession.getMapper(IAccountDao.class); } @After//用于在测试方法执行之后执行 public void destroy() throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /**
*/ @Test public void testFindAll(){ //使用代理对象执行方法 List accounts=accountDao.findAll(); for (Account account : accounts){ System.out.println(“每个account信息”); System.out.println(account); System.out.println(account.getUser()); } } /**
*/ @Test public void testFindAllAccountUser(){ //使用代理对象执行方法 List aus=accountDao.findAllAccount(); for (AccountUser au : aus){ System.out.println(au); } } } 测试 testFindAll方法 测试testFindAllAccountUser方法 实现一对多关系: 创建用户配置文件:IUserDao.xml:实现查询用户同时得到用户下的所有账户 <?xml version="1.0" encoding="UTF-8"?>select * from user u left outer join account a on u.id =a.uid 测试代码:一对多代码 public class UserTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before//再测试方法执行之前执行 public void init() throws Exception{ //1.读取配置文件,生成字节输入流 in= Resources.getResourceAsStream(“SqlMapConfig.xml”); //2.创建SqlSessionFactory工厂,获取SqlSessionFactory对象 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in); //3.使用工厂生产SqlSession对象 sqlSession=factory.openSession(); //4.使用SqlSession创建Dao接口的代理对象 userDao=sqlSession.getMapper(IUserDao.class); } @After//用于在测试方法执行之后执行 public void destroy() throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /**
*/ @Test public void testFindAll(){ //5.使用代理对象执行方法 List users=userDao.findAll(); for (User user : users){ System.out.println("-----------每个用户的信息----------"); System.out.println(user); System.out.println(user.getAccounts()); } } } 测试testFindAll方法: 实现多对多关系: 一个用户可以又多个角色,一个角色可以赋予多个用户 建立两张表:让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各子的主键,在中间表中是外键 #创建角色表 create table role( id int(11) not null comment ‘编号’, role_name varchar(30) default null comment ‘角色名称’, role_desc varchar(60) default null comment ‘角色描述’, primary key(id) )engine=InnoDB default charset=utf8; //#创建用户角色表(中间表) create table user_role( uid int(11) not null comment ‘用户编号’, rid int(11) not null comment ‘角色编号’, primary key (uid,rid), key FK_Reference_10(RID), constraint FK_Reference_10 foreign key (rid) references role (id), constraint FK_Reference_9 foreign key(uid) references user (id) )engine=InnoDB default charset=utf8; 目录结构: 建立两个实体类: 实体类Role: /**
*/ public class Role implements Serializable { private Integer roleId; private String roleName; private String roleDesc; //多对多的关系映射,一个角色可以赋予多个用户 private List users; public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } public Integer getRoleId() { return roleId; } public void setRoleId(Integer roleId) { this.roleId = roleId; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getRoleDesc() { return roleDesc; } public void setRoleDesc(String roleDesc) { this.roleDesc = roleDesc; } @Override public String toString() { return “Role{” + “roleId=” + roleId + “, roleName=’” + roleName + ‘’’ + “, roleDesc=’” + roleDesc + ‘’’ + ‘}’; } } 实体类User: /**
*/ public class User implements Serializable { private Integer id; private String username; private String address; private String sex; private Date birthday; //多对多的关系映射,一个用户可以具备多个角色 private List roles; public List getRoles() { return roles; } public void setRoles(List roles) { this.roles = roles; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return “User{” + “id=” + id + “, username=’” + username + ‘’’ + “, address=’” + address + ‘’’ + “, sex=’” + sex + ‘’’ + “, birthday=” + birthday + ‘}’; } } 创建Role类的dao接口: /**
*/ public interface IRoleDao { /**
*/ List findAll(); } 创建User类的dao接口: /**
*/ public interface IUserDao { /**
*/ List findAll(); } 配置IRoleDao的映射配置文件:IRoleDao.xml <?xml version="1.0" enc ``` 【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】 浏览器打开:qq.cn.hn/FTf 免费领取 ``` oding="UTF-8"?>select u.*,r.id as rid,r.role_name,r.role_desc from role r left outer join user_role ur on r.id = ur.rid left outer join user u on u.id = ur.uid 配置IUserDao的映射配置文件:IUserDao.xml <?xml version="1.0" encoding="UTF-8"?>select u.*,r.id as rid,r.role_name,r.role_desc from user u left outer join user_role ur on u.id = ur.uid left outer join role r on r.id = ur.rid 测试代码:角色对用户查询 public class RoleTest { private InputStream in; private SqlSession sqlSession; private IRoleDao roleDao; @Before//再测试方法执行之前执行 public void init() throws Exception{ //1.读取配置文件,生成字节输入流 in= Resources.getResourceAsStream(“SqlMapConfig.xml”); //2.创建SqlSessionFactory工厂,获取SqlSessionFactory对象 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in); //3.使用工厂生产SqlSession对象 sqlSession=factory.openSession(); //4.使用SqlSession创建Dao接口的代理对象 roleDao=sqlSession.getMapper(IRoleDao.class); } @After//用于在测试方法执行之后执行 public void destroy() throws Exception{ //提交事务 sqlSession.commit(); //6.释放资源 sqlSession.close(); in.close(); } /**
*/ @Test public void testFindAll(){ //使用代理对象执行方法 List roles=roleDao.findAll(); for (Role role :roles){ System.out.println("–角色信息–"); System.out.println(role); System.out.println(role.getUsers()); } } } 测试结果: 测试代码:用户对角色查询 public class UserTest { private InputStream in; private SqlSession sqlSession; private IUserDao userDao; @Before//再测试方法执行之前执行 public void init() throws Exception{ //1.读取配置文件,生成字节输入流 in= Resources.getResourceAsStream(“SqlMapConfig.xml”); //2.创建SqlSessionFactory工厂,获取SqlSessionFactory对象 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:26:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |