# mybatis-mapper-test **Repository Path**: wei_dongdong/mybatis-mapper-test ## Basic Information - **Project Name**: mybatis-mapper-test - **Description**: Mybatis高级映射学习,一对一,一对多,多对多 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MybatisMapperTest #### 介绍 Mybatis高级映射学习,一对一,一对多,多对多 #### 软件架构 软件架构说明 #### 安装教程 ##### Mybatis高级映射 ###### 1、一对一 ```bash 一对一 Account---->User 步骤: (1)在Account表中添加一个User属性 (2)在Account的Sql映射文件中使用resultMap+association进行配置 (3)测试 ``` 1、在Account表中添加一个User属性 ```java @Data public class Account implements Serializable { private Integer id; private Integer uid; private Integer money; private User user; } ``` 2、dao接口方法 ```java public interface AccountDao { /** * 查询所有信息 */ List getAll(); } ``` 3、对应mapper文件 ```xml ``` 4、测试 ```java public class AccountDaoTest { //获取sqlSession SqlSession sqlSession = MyBatisUtil.createSqlsession(); //获取接口 AccountDao accountDao = sqlSession.getMapper(AccountDao.class); @Test public void getAll() { List accounts = accountDao.getAll(); for (Account a : accounts) { System.out.println(a.getUid()+"\t"+a.getUser().getUserName()+"\t"+a.getUser().getBirthday()+"\t"+a.getUser().getSex()+"\t"+a.getMoney()); } MyBatisUtil.close(sqlSession); } } ``` 5、输出结果 ```bash 1 张三 2010-10-10 男 300 1 张三 2010-10-10 男 1000 2 李四 1998-01-01 女 500 2 李四 1998-01-01 女 2000 3 王五 1990-01-01 男 800 ``` ###### 2、一对多 ```bash 一对多:User------>Account 步骤: (1)在User实体类中添加List属性 (2)在User的SQL映射文件中使用resultMap+collection进行配置 ``` 1、在User实体类中添加List属性 ```java @Data public class User implements Serializable { private Integer id; private String userName; private Object birthday; private String sex; private List account; /*一对多*/ private List roleList; } ``` 2、dao接口方法 ``` public interface UserDao { /** * 查询用户所有信息 */ List getAll(); } ``` 3、对应mapper文件 ```xml ``` 4、测试 ```java public class UserDaoTest { //获取sqlSession SqlSession sqlSession = MyBatisUtil.createSqlsession(); //获取接口 UserDao userDao = sqlSession.getMapper(UserDao.class); @Test public void getAll() { List users = userDao.getAll(); for (User user : users) { System.out.println("用户:" + user.getUserName() + ":"); for (Account account : user.getAccount()) { System.out.println("\t" + account.getId() + "\t" + account.getMoney()); } } } } ``` 5、结果 ```bash 用户:张三: 1 300 4 1000 用户:李四: 2 500 5 2000 用户:王五: 3 800 ``` ###### 3、多对多 ```bash 多对多: 步骤: User<---->Role 用户和角色是多对多的关系 (1)在数据中创建一个中间表关联其它两张表 (2)创建两个实体类,分别添加对应的List集合 (3)按照一对多配置即可 注意:SQL语句的编写是三表连接 ``` 1、在数据中创建一个中间表关联其它两张表 ![image-20200820135416028](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200820135416028.png) 2、创建两个实体类,分别添加对应的List集合 ```java @Data public class User implements Serializable { private Integer id; private String userName; private Object birthday; private String sex; /*一对多*/ private List roleList; } ``` ```java @Data public class Role { private Integer id; private String roleName; private String roleDesc; /*一个角色可以赋予多个用户*/ private List userList; } ``` 3、dao接口 ```java public interface UserDao { /** * 查询某个用户的信息以及该用户的角色信息 */ User getUserById(Integer id); } ``` ```java public interface RoleDao { /** * 查询所有角色下的所有用户信息 */ List getAllRole(); } ``` 4、映射mapper;SQL语句的编写是三表连接 ```xml ``` ```xml ``` 5、测试 ```java public class UserDaoTest { //获取sqlSession SqlSession sqlSession = MyBatisUtil.createSqlsession(); //获取接口 UserDao userDao = sqlSession.getMapper(UserDao.class); @Test public void getUserById() { User user = userDao.getUserById(3); System.out.println("用户名:"+user.getUserName()); for (Role role: user.getRoleList() ) { System.out.println("\t"+role.getRoleName()+"\t"+role.getRoleDesc()); } MyBatisUtil.close(sqlSession); } } ``` ```java public class RoleDaoTest { SqlSession sqlSession = MyBatisUtil.createSqlsession(); RoleDao roleDao = sqlSession.getMapper(RoleDao.class); @Test public void getAllRole() { List allRole = roleDao.getAllRole(); for (Role role : allRole) { System.out.println("角色名称:\n"+role.getRoleName()); for (User user : role.getUserList()) { System.out.println("\t"+user.getUserName()); } } MyBatisUtil.close(sqlSession); } } ``` 6、结果 ```bash 用户名:张三 院长 管理整个学校 教务 管理档案 ------------------------- 角色名称: 院长 张三 李四 角色名称: 校长 李四 角色名称: 教务 张三 王五 ``` #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)