mybatis语句

本文详细介绍了MyBatis中查询时保持列名与属性名一致的重要性,简单关联查询的实现,处理1对多关联查询的方法,动态SQL的应用,以及#{}与${}占位符的区别。通过实例解析,帮助读者掌握MyBatis中的各种查询技巧。
摘要由CSDN通过智能技术生成

1. 查询时,需要查询结果中的列名与返回值类型中的属性名保持一致

假设在t_user表中添加了新的名为is_delete的字段:

alter table t_user add column is_delete int;

则对应的User类中也应该添加新的属性,以与对应:

	public class User {
   
	
		private Integer id;
		private String username;
		private String password;
		private Integer age;
		private String phone;
		private String email;
		private Integer isDelete;

当查询数据时,需要自定义别名,使得查询结果中的列名与返回值类型中的属性名保持一致:

	<select id="findById"
		resultType="cn.tedu.mybatis.User">
		SELECT 
			id,username,
			password,age,
			phone,email,
			is_delete AS isDelete
		FROM 
			t_user 
		WHERE 
			id=#{id}
	</select>

其对应关系如图所示:

在这里插入图片描述

2. 简单的关联表查询数据

假设需要创建“部门信息表”:

CREATE TABLE t_department (
	id INT AUTO_INCREMENT COMMENT '部门id',
	name VARCHAR(30) UNIQUE NOT NULL COMMENT '部门名称',
	PRIMARY KEY(id)
) DEFAULT CHARSET=utf8;

然后,添加一些模拟数据:

INSERT INTO t_department (name) VALUES ('软件研发部'),('人力资源部'),('财务部'),('销售部');

并且,每个用户都归属于某个部门:

ALTER TABLE t_user ADD COLUMN department_id INT;

最后,为用户分配部门:

UPDATE t_user SET department_id=1 WHERE id IN (21,28,32);
UPDATE t_user SET department_id=2 WHERE id IN (24,25,26);
UPDATE t_user SET department_id=3 WHERE id IN (22,27,30);
UPDATE t_user SET department_id=4 WHERE id IN (23,29,31);

假设存在需求“查询某用户的信息,并显示该用户的部门的名称”,必须通过关联查询才可以得到所需要的结果,需要执行的SQL语句大致是:

select 
	* 
from 
	t_user 
left join 
	t_department 
on 
	t_user.department_id=t_department.id 
where 
	t_user.id=25;

如果需要使用MyBatis开发该功能,首先,目前并没有某个类型可以封装查询结果!因为创建的User类是与t_user表相对应的,例如User这样的类称之为实体类(entity),实体类肯定不满足多表查询需求的,所以,对于这种情况,需要自行另创建VO类(value object),这种类的设计应该与查询结果或查询需求相对应:

public class UserVO {
	private Integer id;
	private String username;
	private String password;
	private Integer age;
	private String phone;
	private String email;
	private Integer isDelete;
	private Integer departmentId;
	private String departmentName;
}

VO类的设计方式与实体类基本一致,只是这2种类的定位不同而已,实体类是与数据表对应的,VO类是与查询结果对应的。

然后,可以将此前的findById(Integer id)的返回值类型修改为UserVO

UserVO findById(Integer id);

且映射的配置:

<select id="findById"
	resultType="cn.tedu.mybatis.UserVO">
	SELECT 
		t_user.id,username,
		password,age,
		phone,email,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值