Mybatis实现多表联查

一、Mybatis实现多表联查询

1、Mybatis实现多表联查询方式

  • 业务装配对两个表写单独的sql语句,在业务(service)把查询结果进行联合。
  • 使用Auto Mapping特性,在实现两个表联合查询时通过别名完成自动映射。
  • 使用Mybatis的标签进行实现

2、多表查询时类中包含另一个对象的分类

  • 单个对象
  • 集合对象

二、resultMap标签

1、标签单表中的映射

写在 select * from teacher where id =#{0}

在StudentMapper.xml中写上查询学生信息:


	
		
		
		
		
		
	
	

几个属性标签说明:

  •   主键
  • 其它字段
  • 装配对象时使用,其中  property  表示类中的属性名  select  表示要执行的sql语句(写完整的sql语句) column 要传过去的字段参数 

解释:(N+1指的是每个学生类中有一个老师对象,因此一条sql查询出所有的学生,然后在查每个学生中的老师,即N+1).看日志信息:

Mybatis实现多表联查_第1张图片

补充说明:当其它字段一样时,可以在中不用写,但对于要传递的参数字段mybatia只装配一次因此要写

3、使用实现关联单个对象(联合查询方式)

只需要写一条SQL,在StudentMapper.xml中完成,对于学生属性直接用进行装配(将字段别名与属性匹配),对于Teacher对象直接用标签来映射,其中 property还是代表在类中该对象属性的名称   另外要设置javaType表示返回值类型,其它的还一次对应匹配即可。具体代码实例:


	
		
		
		
		
		
			
			
		
	
	
	

4、使用查询关联集合对象(N+1)

  • 在实体类Teacher中加上含有多个Student的属性list,代码:
public class Teacher {
	private int id;
	private String name;
	private List list;
  • 在StudentMapper.xml中添加通过tid查询学生的sql语句,代码:

	
  • 在TeacherMapper.xml中添加查询全部,然后通过来装配其它的,代码:

    
	    
	    
	    
    
    

	

还是和查询单个对象一样这里中使用来匹配集合,其中property还是类中的属性名,select是要执行的sql语句,column为要传递的参数字段。

5、使用实现加载集合数据(联合查询方式)

只需要写一条SQL,在TeacherMapper.xml中完成,对于老师的属性在中直接用进行装配(将字段别名与属性匹配),对于Student对象集合用标签来映射,其中 property还是代表在类中该对象集合属性的名称   另外要设置ofType表示返回集合的泛型,其它的还一次对应匹配即可。具体代码实例:


	
		
		
		
			
			
			
			
		
	
	

三、使用Auto Mapping结合别名实现多表查询

  • 只能使用多表联合查询方式.
  • 要求:查询出的列别和属性名相同.
  • 实现方式,在 SQL 是关键字符,两侧添加反单引号
  • 只能适用于单个对象

代码实例:

四、Mybatis注解

  • 注解:为了简化配置文件.
  •  Mybatis 的注解简化 mapper.xml 文件.
  • 如果涉及动态 SQL 依然使用 mapper.xml
  • mapper.xml 和注解可以共存.
  • 使用注解时 mybatis.xml 中使用
  • 或 

一般实例:

  • 实现查询:
@Select("select * from teacher")
List selAll();
  • 实现新增
@Insert("insert into teacher values(default,#{name})")
int insTeacher(Teacher teacher);

将主键带回来的方式:设置@Options注解并配置(useGeneratedKeys=true,keyProperty="id")

    @Insert("insert into log values(default,#{accOut},#{accIn},#{money})")
	@Options(useGeneratedKeys=true,keyProperty="id")
	int insLog(Log log);
  • 实现删除(主要看基本类型参数的取法)
@Delete("delete from teacher where id=#{0}")
int delById(int id);

 

你可能感兴趣的:(Java知识点)