经典三层框架初识--一.Mybatis(下)使用注解和高级映射

本文介绍了Mybatis使用注解实现Mapper接口以及高级映射的应用。首先讲解了如何通过注解替代XML配置文件,简化代码。接着讨论了在处理一对多关系时的查询与结果封装,通过示例展示了如何改造实体类与Mapper配置,利用resultMap解决一对多映射问题,实现了查询部门及下属员工信息的需求。
摘要由CSDN通过智能技术生成

一.使用注解实现

说到现在,我们发现,mybatis代码已经简化了很多了.和以前相比,我们不用去编写它的实现类.而是由mapper代理自动帮我们生成.但是我们还有一种更为经典的方式.mapper代理我们前面说的是通过xml配置文件的方式来实现的,那下面我们介绍一下使用注解来实现.annotations--注释.

我们通过注解实现的话,映射配置文件--我们前面的UserMapper就不需要了.删除即可.那我们思考一下,没有了映射文件,只有接口如何生成实现类呢?那我们下面了解一下如果通过注解代替原来的xml实现.

我们只需要在接口上的增删改查方法上面添加一些简单的注解标注即可.下面看下代码

package mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import pojo.UserInfo;

public interface UserMapper {
	
	@Select("select * from userinfo") //把sql语句和方法对应起来
	List<UserInfo> queryAll();
	
	//和原来映射配置文件里面的写法一模一样
	//这里的#{}中和原来映射文件的规则一样:如果是简单类型,随意写;如果里面是对象,同样是对象的属性名称.结果封装到哪里根据返回值类型推断
	@Select("select * from userinfo where uid=#{uid}")
	UserInfo queryById(int uid);				
	
	//@Insert
	//@Delete
	
	
}

二.高级映射

我们先思考一下下面这个问题:我们想查询部门信息以及部门下所有员工的信息,该如何实现?查询设计的两张表我贴在下面.

员工表

部门表

我们先用sql语句写一下上面的要求:

SELECT * FROM dept LEFT JOIN emp ON  dept.deptno = emp.deptno;

我们发现这两个表,存在一对多的关系.首先实体类就不像上面一样是单一的了.那就需要部门和员工的两个实体类.正常情况下我们给实体类定义的成员属性如下:

我们前面说过,我们只需要关注定制化的sql,输入参数以及封装输出结果类型.首先输入参数这里我们是不必考虑的.sql语句也很上面一样.那就剩下了输出结果的封装了.我们sql语句查询出来的结果集的字段数肯定是比每个实体类中的成员属性都要多的,这是毫无疑问的,而对于resultType(映射文件中的定制化sql语句的一个属性,还记得么?)最大的一个特点:结果集字段名称必须和resultType值里面的对象的属性名称一致,这样才能封装.所以在这里我们就不能直接封装结果.

其实这里的问题我们不难发现:我们查询出来的结果集是把两张表的字段都结合在一起了,但是我们上面声明的类的属性并没有声明出来可以产生结合到一个地方去.所以我们要对两个类进行改写.让这两个类产生上面说的一对多关系.那我们将部门类修改一下

 这样就让部门这个类和员工类呈现出了一对多的关系.这样我们期望将结果集中的前三个字段(deptno,dname,loc)封装到这个部门类的前三个属性中,将结果集后面的属性封装到部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值