6 使用注解开发
1.注解在接口上实现
@select("select * from user") List<User>getUsers(); • 1 • 2
2.需要在配置文件绑定接口
<mappers> <mapper class="dao.UserMapper/>" </mappers> • 1 • 2 • 3
7.使用注解完成增删改查
不需要写xml文件直接在测试文件书写即可
1.根据ID查询用户
@Select("select * from mybatis.user where id=#{id}") User getUserById(@Param("id") int id);
2.增加用户
@Insert("insert into mybatis.user (id,name,pwd)values(#{id},#{name},#{pwd})") int addUser(User user);
与xml文件进行对比
<select id="getUserById" resultType="pojo.User" parameterType="int"> select * from mybatis.user where id=#{id} </select> <insert id="addUser" parameterType="dao.UserMapper"> insert into mybatis.user (id,name,pwd)values (#{id},#{name},#{pwd}) </insert>
方便快捷很多,但是只限于参数少的时候。
使用注解得在配置文件中完成注册。
若含有多个Mapper的时候我们可以采用resource字段
<mapper resource="dao/*Mapper.xml"></mapper>
@param注解:
1.基本类型的参数或者String必须加上
2.引用类型不需要加上
3.如果只有一个基本类型的话可以忽略,但是建议都加上
4.我们在SQL中引用的就是我们在@Param中设定的属性名
8.Lombok的学习
简化实体类的书写。
Maven中需要导入的依赖:https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.20
9.多对一处理
9.1按照结果嵌套处理
9.2 按照select内嵌查询
<select id="getStudentList" resultMap="StudentTeacher"> select * from mybatis.student </select> <resultMap id="StudentTeacher" type="pojo.Student"> <result property="id" column="id"></result> <result property="name" column="name"></result> <association property="teacher" column="tid" javaType="pojo.Teacher" select="getTeacherById"></association> </resultMap> <select id="getTeacherById" resultType="pojo.Teacher"> select * from mybatis.teacher where id=#{id} </select>
10.一对多处理
此处举例为一个老师对应多个学生
1.实体类
package pojo; import lombok.Data; @Data public class Student { private int id; private String name; private int tid; } package pojo; import lombok.Data; import java.util.List; @Data public class Teacher { private int id; private String name; // 一个老师对应多个学生 private List<Student> students; }
接口类:
package dao; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import pojo.Teacher; import java.util.List; public interface TeacherMapper { //查询老师信息 // List<Teacher> getTeacher(); // 获取指定老师下的所有学生 Teacher getTeacherById(@Param("tid") int id); }
10.1 按select嵌套查询
10.2 按结果嵌套查询
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.TeacherMapper"> <select id="getTeacherById" resultMap="TeacherStudent"> select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid=t.id and t.id=#{tid} </select> <resultMap id="TeacherStudent" type="pojo.Teacher"> <result property="id" column="tid"></result> <result property="name" column="tname"></result> <collection property="students" ofType="pojo.Student"> <result property="id" column="sid"></result> <result property="name" column="sname"></result> <result property="tid" column="tid"></result> </collection> </resultMap>
小结:
关联 association (多对一)
集合 collection(一对多)