`

MyBatis3_轻松入门_3

阅读更多

MyBatis3

博文目录

  1.  联结查询的引出及实体类设计
  2. 一对多关系中,通过一去找多
  3. 一对多关系中,通过多去找一

 联结查询

表结构是这样的:
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可以轻松与Spring框架集成,实现依赖注入和事务管理,进一步提升开发效率。 14. **最佳实践** - 避免使用全表扫描,优化SQL语句。 - 合理设计数据库表结构,避免数据冗余。 - 使用合理的事务边界,避免...

    学习mybatis_plus的基础使用.rar

    这个压缩包文件“学习mybatis_plus的基础使用.rar”显然是一个关于如何入门和使用Mybatis Plus的学习资源,适合初学者或者想要了解Mybatis Plus基本功能的开发者。 1. **Mybatis Plus概述**:Mybatis Plus在Mybatis...

    Mybatis-Plus入门第二天讲义1

    在本文中,我们将深入探讨"Mybatis-Plus入门第二天讲义1"所涵盖的知识点,主要涉及ActiveRecord模式、Mybatis-Plus的基本操作以及如何在Java中使用这些概念。 首先,我们来理解什么是ActiveRecord。ActiveRecord是...

    Mybatis轻松入门

    本篇文章将带你轻松入门Mybatis,了解其基本配置和使用方法。 首先,我们来看如何创建SqlSessionFactory,它是Mybatis的核心组件,用于管理SqlSession并构建对象映射关系。SqlSessionFactory的创建有两种方式: 1....

    Mybatis入门

    作为一个入门指南,我们将深入探讨Mybatis的基本概念、配置、映射文件、动态SQL以及如何在实际项目中使用它。 1. **Mybatis概述** Mybatis是由Google Code托管(现已迁移至GitHub)的开源项目,由Clinton Begin...

    mybatis-plus快速入门手册,包含源代码样例Demo以及数据库源文件,带你快速上手CRUD,项目中不求人!

    本文将深入探讨 MyBatis-Plus 的核心特性,并指导如何快速入门,帮助开发者快速上手。 1. **无侵入性**: MyBatis-Plus 不改变原有 MyBatis 的架构,只需添加依赖,即可轻松集成。这意味着,如果你已经熟悉 ...

    Springboot整合Mybatis.zip

    Springboot整合Mybatis MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的...可以帮助读者轻松掌握代码的内容,快速入门,持续深化,举一反三。

    mybatis入门小demo

    这个入门小demo是学习MyBatis的一个良好起点,通过它,我们可以快速理解MyBatis的基本操作和核心概念。 首先,让我们深入了解MyBatis的配置文件。在MyBatis中,主配置文件(通常命名为`mybatis-config.xml`)包含了...

    mybatis快速入门jar包

    MyBatis 是一款深受开发者喜爱的持久层框架,它...通过配置SqlSessionFactoryBuilder和SqlSession,开发者可以轻松地集成MyBatis到项目中,提高开发效率。在快速入门MyBatis时,理解并掌握这些核心概念是非常重要的。

    spring_mybatis.rar

    本教程通过"spring_mybatis.rar"压缩包,将详细讲解如何将Spring和MyBatis整合,实现数据库的增删改查操作,适合初学者入门。 首先,我们需要理解Spring和MyBatis的整合原理。Spring通过SqlSessionFactoryBean和...

    MyBatis3.2.4完全自学手册

    以上步骤完成了MyBatis的快速入门准备工作,接下来可以开始实现具体的业务逻辑。 --- #### 二、MyBatis的增删改查 在使用MyBatis进行开发时,最常见的操作就是对数据库的增删改查。这些操作可以通过编写XML映射...

    mybatis实战

    3、Mybatis入门实例 Mybatis的入门通常从创建配置文件开始,包括mybatis-config.xml,其中包含了数据源、环境配置、映射器等信息。接着,创建Mapper接口和对应的XML映射文件,定义SQL语句和结果映射。通过...

    Eclipse_Spring_入门书籍

    通过Eclipse的插件支持,我们可以轻松地配置和管理这些依赖关系,使得代码更加模块化。 Eclipse作为Java开发的主流IDE,提供了丰富的功能来支持Spring框架的开发。例如,Spring Tool Suite (STS) 是Eclipse的一个...

    API MyBatis3

    **API MyBatis3**是MyBatis框架的第三次...这份文档是学习和理解MyBatis3的宝贵资源,涵盖了从入门到进阶的所有知识点。通过阅读和实践,你将能掌握如何利用MyBatis3高效地进行数据库操作,提升项目开发的质量和效率。

    mybatis.rar

    6. **项目文档**:压缩包中的项目文档很可能是 MyBatis 的官方文档,包括快速入门、API 参考、最佳实践等内容,是学习和理解 MyBatis 必不可少的参考资料。 7. **源码分析**:深入学习 MyBatis 的源码,可以让我们...

    springMvc_SpringMvc入门_

    14. **Spring MVC 整合其他技术**:Spring MVC 可以轻松地与其他 Spring 组件如 AOP(面向切面编程)、Data Access/ORM(持久层访问)等整合,也可以与其他框架如 MyBatis、Hibernate 结合使用。 学习并掌握 Spring...

    MyBatis核心教程

    在mybatis-guice中,可以轻松地通过Guice的依赖注入机制获取Mapper实例,简化了Mapper的使用流程。 #### 6. @Transactional注解 ##### 6.1 引言 mybatis-guice支持使用`@Transactional`注解来简化事务管理。 ###...

    MyBatis 3.5.5 参考文档1

    MyBatis通过databaseIdProvider和条件判断,可以轻松应对跨数据库平台的应用。 ## Java API 除了XML配置,MyBatis还提供了Java API供开发者直接在代码中构建SQL语句,如SqlSession的selectList、insert、update和...

Global site tag (gtag.js) - Google Analytics