mybatis注解的详解和开发(增、删、改、查以及一对一、一对多/多对一、多对多( 二 )


@注解代替了< id> 标签和< >标签
@ 中 的 属性介绍:
id 是否是主键字段
数据库中列的名
需要装配的属性名
one 需要使用 @One 注解 (@ (one = @One) ())
many 需要使用的@Many 注解 (@ (many = @many) ())
@One 注解(一对一):
代替了< >标签,是多表查询的关键,在注解中用来制定子查询返回单一对象
@One 注解属性介绍:
指定用来多表查询 的
会覆盖全局的配置参数。
语法格式:
@( = " “,=” ",one=@Onet( = " "))
@Many 注解(多对一)
代替了< >标签,是多表查询的关键,在注解中用来指定子查询返回对象集合 。
注意:聚集元素用来处理"一对多"的关系 。需要指定映射的Java实体类的属性,属性的(一般为)但是注解中可以不定义;
语法格式:
@(=" “,=” “,many=@Many(=” "))
一对一关系注解方式查询数据
在.java接口中使用注解进行查询注入数据
.java
package com.etime.mapper;import com.etime.pojo.Husband;import com.etime.pojo.Wife;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import java.util.List;public interface HusbandMapper {//使用一对一关系注解实现查询@Select("select * from husband")//查询所有丈夫的信息//将信息放入结果集合中@Results({@Result(property = "hid",column = "hid"),//设置字段属性对应的数据库列名@Result(property = "hname",column = "hname"),@Result(property = "wid",column = "wid"),//对根据丈夫表内的对应妻子wid到妻子表中查找妻子的信息@Result(property = "wife",javaType = Wife.class,column = "wid",one=@One(select = "com.etime.mapper.WifeMapper.getWifeByWid"))})List getAllHusband();}
在.java中进行注解的使用,对妻子的基本数据进行数据查取
package com.etime.mapper;import com.etime.pojo.Wife;import org.apache.ibatis.annotations.Select;public interface WifeMapper {//通过@Select查询注解的方方式获取到妻子的基本数据@Select("select * from wife where wid=#{wid}")Wife getWifeByWid(int wid);}
对妻子和丈夫的一对一的关系进行测试:
//使用一对一关系注解查询丈夫和妻子的基本信息@Testpublic void t07(){SqlSession sqlSession =sqlSessionUtil.getSqlSession();HusbandMapper husbandMapper = sqlSession.getMapper(HusbandMapper.class);List list = husbandMapper.getAllHusband();list.forEach(System.out::println);sqlSession.close();}
最终得到的测试结果为:
多对一使用注解的方式对数据进行查询
这里即将的测试的关系是多个学生属于同一班的关系
创建学生实体类:
package com.etime.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@AllArgsConstructor@NoArgsConstructor@Datapublic class Student {private int sid;private String sname;private int cid;//创建一个班级类的属性给到学生实体类,不同的学生来自不同的班,多个学生属于同一个班级private Classes classes;}
创建班级实体类:
package com.etime.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@NoArgsConstructor@AllArgsConstructor@Datapublic class Classes {private int cid;private String cname;}
在.java接口中使用注解的方式处理查询语句一查查询到的数据 问题,并处理 查询到的班级返回的值
package com.etime.mapper;import com.etime.pojo.Classes;import com.etime.pojo.Student;import org.apache.ibatis.annotations.One;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import java.util.List;public interface StudentMapper {//使用@Select查询所有学生信息@Select("select * from student")//使用@Results注解处理查询到的学生实体类中的基本属性以及对应的班级信息//并通过one = @One 的方式把查询到接收到的返回班级实体类进行处理@Results({@Result(property = "sid",column = "sid"),@Result(property = "sname",column = "sname"),@Result(property = "cid",column = "cid"),@Result(property = "classes",javaType = Classes.class,column = "cid",one = @One(select = "com.etime.mapper.ClassesMapper.getClassesByCid"))})List