MyBatis3
博文目录
联结查询
表结构是这样的:
t_user:用户表,id,username,password
t_todo:用户要做的事情表,id,todo
一个用户可以有多个要做的事情,一个todo只属于一个用户:
t_user----t_todo
one to many的关系
建立对应的POJO:
User.java
package com.cn.pojo; import java.util.List; public class User { private Integer id; private String username; private String password; private List<Todo> todoList;//一个用户对应多个todo 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 getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<Todo> getTodoList() { return todoList; } public void setTodoList(List<Todo> todoList) { this.todoList = todoList; } }
Todo.java
package com.cn.pojo; public class Todo { private Integer id; private String todo; private int userId;//外键,建议配置一下 private User user;//一个todo对应一个用户 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTodo() { return todo; } public void setTodo(String todo) { this.todo = todo; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
问题一:
我想找到ID为1的用户的所有的todo!
数据库语句如下:
SELECT t_user.id AS uid,username,`password`,t_todo.id AS tid,todo FROM t_user LEFT JOIN t_todo ON t_user.id=user_id WHERE t_user.id=1;
我们如何使用MyBatis实现联结查询呢?
首先我们在UserMapper.xml中添加一个方法:
<select id="findInfoByUid" parameterType="int" resultType="User" resultMap="userMap"> SELECT t_user.id AS uid,username,`password`,t_todo.id AS tid,todo FROM t_user LEFT JOIN t_todo ON t_user.id=user_id WHERE t_user.id=#{id}; </select>
resultType仍然是User
resultMap="userMap"是什么意思呢?
他的作用就是帮助我们把我们查出的uid,username,等等数据装到user对象中。userMap是需要我们自己配置的,根据查询语句的不同就有不同的resultMap。
userMap的配置如下:仍然是在UserMapper.xml中配置
<resultMap type="User" id="userMap"> <id property="id" column="uid"/> <result property="username" column="username"/> <result property="password" column="password"/> <collection property="todoList" ofType="Todo"> <id property="id" column="tid"/> <result property="userId" column="uid"/> <result property="todo" column="todo"/> </collection> </resultMap>
第一行的id对应上面的userMap
resultMap标签内有下面的一些配置:
id,表示User实体类中配置的id,property的值对应User实体类中的变量id,column的值对应上面的SQL语句中查询结果显示的值(t_user.id as uid中的uid);
result,配置的是一般的属性:property对应实体类中的变量,column对应查询语句中的列名(如果有别名对应别名)
collection,表示我们配置的关联的内容,这里面用来存放我们SQL语句查出来的内容非User对象普通变量(例如:todo,tid),collection标签的property对应User类中的变量todoList,ofType="Todo"表示查出的每一条记录应该装到哪里!我们查出的是todo当然要装到Todo对象中!
注意:我们要在我们的原配置文件:mybatis.xml中添加一个别名认证:
<typeAliases> <typeAlias type="com.cn.pojo.User" alias="User"/> <typeAlias type="com.cn.pojo.Todo" alias="Todo"/> </typeAliases>
collection标签下的内容类似resultMap下的普通配置了:
id,对应Todo中的id,SQL语句中的tid
Todo中的userId对应我们的uid,如果SQL中查了表中的user_id,应该对应user_id的,不过结果是一样的!!!
Todo中的User user不用配置了!因为我们本身就是用user来获取todo的!
最后在我们的接口类UserMapper中添加方法:
public User findInfoByUid(int id);
测试:
UserMapper userMapper=session.getMapper(UserMapper.class); User user=userMapper.findInfoByUid(1); List<Todo> todoList=user.getTodoList(); for (Todo todo : todoList) { System.out.println(todo.getTodo()); System.out.println(todo.getId()); }
问题:
翻过来,如何通过todo来找user呢?其实操作差不多,只不过是在多的这一方面配置一的方面使用association标签,column表示表中的外键,javaType类似ofType,存储的类型!只列出实例。
(规范来说应该再有一个TodoMapper,为了节省时间,我们直接放到UserMapper中了)
UserMapper.xml中添加方法:
<select id="findInfoByTid" resultType="Todo" parameterType="int" resultMap="todoMap"> SELECT t_todo.id AS tid,todo,t_user.id AS uid,username,`password` FROM t_user RIGHT JOIN t_todo ON user_id=t_user.id WHERE t_todo.id=#{id}; </select> <resultMap type="Todo" id="todoMap"> <id property="id" column="tid"/> <result property="todo" column="todo"/> <result property="userId" column="uid"/> <association property="user" column="user_id" javaType="User"> <id property="id" column="uid"/> <result property="username" column="username"/> <result property="password" column="password"/> </association> </resultMap>
UserMapper.java中添加方法:
public Todo findInfoByTid(int id);
测试:
UserMapper userMapper=session.getMapper(UserMapper.class); Todo todo=userMapper.findInfoByTid(3); System.out.println(todo.getUserId());
相关推荐
Mybatis入门教程,让你瞬间明白Mybatis的配置方法。
Springboot整合Mybatis MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的...可以帮助读者轻松掌握代码的内容,快速入门,持续深化,举一反三。
SpringMvc_day01.spring入门-springMVC三大核心器(视图解析器,处理器映射器and适配器).springMvc整合myBatis SpringMvc_day02高级参数.上传图片.JSON数据交互.拦截器 15-SSM企业案例-客户管理系统(学习1天) ...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
7. SpringBoot整合Mybatis 8. SpringBoot整合Junit 9. SpringBoot整合Redis 阶段二: SpringBoot核心原理 1. 起步依赖原理分析 2. 自动配置原理解析 3. 自定义起步依赖并实现自动配置 4. 事件监听 5. 初始化流程 6. ...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
同时,它还集成了 MyBatis 数据库持久层框架,方便毕业生进行数据库操作和管理。 在功能方面,MeyboMail Web 提供了丰富的邮件发送功能。毕业生可以使用它来实现群发邮件、邮件合并和邮件追踪等功能。这些功能可以...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在...
用于练手的SSM小项目,从数据库表的SQL语句,后台DAO层代码编写,前端使用Bootstrap3搭建一个简单的后台页面,数据的CRUD通过SSM框架进行完成,可以很好地用来巩固和复习应用SSM框架做项目的过程。.zip SSM框架学习...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...