MyBatis之命名规范&表联查

1、命名规范

在这里插入图片描述
修改后的studentMapper.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--namespace命名空间 需要跟Mapper接口文件位置相同-->
<mapper namespace="com.yang.mapper.StudentMapper">
    <!--规范命名方式-->
    <!--resultMap标签中 id为这个resultMap的名字,type为对应的实体类-->
    <resultMap id="studentResultMap" type="Students">
        <!--resultMap中的id对应的是表中的主键,property为java代码中的规范的名字,column为表中对应的字段名-->
        <id property="stuId" column="stu_id"></id>
        <!--result代表表中普通的字段,property为java代码中的规范的名字,column为表中对应的字段名-->
        <result property="stuName" column="stu_name"></result>
        <result property="stuAge" column="stu_age"></result>
        <result property="stuSex" column="stu_sex"></result>
        <result property="teaId" column="tea_id"></result>
        <result property="isDel" column="is_del"></result>
    </resultMap>

    <!--resultType返回值类型,查询的是所有学生,所以返回学生对象,mybatis自动封装到集合中-->
    <!--原来是resultType,后来规范代码后,将resultType换成resultMap,引号里是上边resultMap的id名-->
    <select id="queryAll" resultMap="studentResultMap">
        select * from students
    </select>

    <!--根据id查询学生信息-->
    <!--parameterType为接受的数据类型(传过来的参数类型),这里可以为stu_id,
    但为了体现面向对象编程思想,所以用对象(实体类)作为传过来的参数类型,
    通过对象(set方法)得到其中某个字段的值(#{stu_id})-->
    <!--resultType返回值类型,将值返回给studentMapper.xml中根据id对应的方法,
    然后测试类就可以调用到这个返回值-->
    <select id="queryById" resultMap="studentResultMap" parameterType="Students">
        select * from students where stu_id = #{stuId} and is_del = 0
    </select>

    <!--根据id物理删除某条数据-->
    <update id="deleteById" parameterType="Students">
        update students set is_del = 1 where stu_id = #{stuId}
    </update>

    <!--增加一条数据-->
    <insert id="insert" parameterType="Students">
        insert into students (stu_name,stu_age,stu_sex,tea_id,is_del) values (#{stuName},#{stuAge},#{stuSex},#{teaId},0)
    </insert>

    <!--根据id物理删除一条数据-->
    <delete id="realDeleteById" parameterType="Students">
        delete from students where stu_id = #{stuId}
    </delete>

</mapper>

2、两表联查(一对多关系)一个老师对应多个学生

1)因为查询老师和学生两个表,所以新建老师这个实体类

代码:

package com.yang.bean;

import java.util.List;

public class Teachers {
    private Integer teaId;
    private String teaName;
    private String teaSubject;
    private Integer teaClass;
    //一个老师教多个学生
    private List<Students> studentsList;

    public Integer getTeaId() {
        return teaId;
    }

    public void setTeaId(Integer teaId) {
        this.teaId = teaId;
    }

    public String getTeaName() {
        return teaName;
    }

    public void setTeaName(String teaName) {
        this.teaName = teaName;
    }

    public String getTeaSubject() {
        return teaSubject;
    }

    public void setTeaSubject(String teaSubject) {
        this.teaSubject = teaSubject;
    }

    public Integer getTeaClass() {
        return teaClass;
    }

    public void setTeaClass(Integer teaClass) {
        this.teaClass = teaClass;
    }

    public List<Students> getStudentsList() {
        return studentsList;
    }

    public void setStudentsList(List<Students> studentsList) {
        this.studentsList = studentsList;
    }

    @Override
    public String toString() {
        return "Teachers{" +
                "teaId=" + teaId +
                ", teaName='" + teaName + '\'' +
                ", teaSubject='" + teaSubject + '\'' +
                ", taeClass=" + teaClass +
                ", studentsList=" + studentsList +
                '}';
    }
}

规范后的学生类代码

package com.yang.bean;

public class Students {
    private Integer stuId;
    private String StuName;
    private Integer stuAge;
    private Integer stuSex;
    private Integer teaId;
    private Integer isDel;

    public Integer getStuId() {
        return stuId;
    }

    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }

    public String getStuName() {
        return StuName;
    }

    public void setStuName(String stuName) {
        StuName = stuName;
    }

    public Integer getStuAge() {
        return stuAge;
    }

    public void setStuAge(Integer stuAge) {
        this.stuAge = stuAge;
    }

    public Integer getStuSex() {
        return stuSex;
    }

    public void setStuSex(Integer stuSex) {
        this.stuSex = stuSex;
    }

    public Integer getTeaId() {
        return teaId;
    }

    public void setTeaId(Integer teaId) {
        this.teaId = teaId;
    }

    public Integer getIsDel() {
        return isDel;
    }

    public void setIsDel(Integer isDel) {
        this.isDel = isDel;
    }


    @Override
    public String toString() {
        return "Students{" +
                "stuId=" + stuId +
                ", StuName='" + StuName + '\'' +
                ", stuAge=" + stuAge +
                ", stuSex=" + stuSex +
                ", teaId=" + teaId +
                ", isDel=" + isDel +
                '}';
    }
}

2)新建TeacherMapper接口(方便修改,所以在有StudentMapper基础上再建一个),定义查询方法

代码:

package com.yang.mapper;

import com.yang.bean.Teachers;

import java.util.List;

public interface TeacherMapper {
    public List<Teachers> queryTeachers();
}

3)在resource-mybatis中新建teacherMapper.xml对应TeacherMapper接口

代码:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--namespace命名空间 需要跟Mapper接口文件位置相同-->
<mapper namespace="com.yang.mapper.TeacherMapper">
    <resultMap id="teacherResultMap" type="Teachers">
        <id property="teaId" column="tea_id"></id>
        <result property="teaName" column="tea_name"></result>
        <result property="teaSubject" column="tea_subject"></result>
        <result property="teaClass" column="tea_class"></result>
        <!--老师里面的学生集合用collection来定义,通过这个设置就可以实现一对多-->
        <!--集合 property属性名 javaType写类型(集合类型) ofType写泛型-->
        <collection property="studentsList" javaType="java.util.List" ofType="Students">
            <id property="stuId" column="stu_id"></id>
            <result property="stuName" column="stu_name"></result>
            <result property="stuAge" column="stu_age"></result>
            <result property="stuSex" column="stu_sex"></result>
            <result property="teaId" column="tea_id"></result>
            <result property="isDel" column="is_del"></result>
        </collection>
    </resultMap>
    <select id="queryTeachers" resultMap="teacherResultMap">
        select * from students s left join teacher t on s.tea_id = t.tea_id
    </select>

</mapper>

4)不要忘记在mybatis-config.xml中添加mapper
在这里插入图片描述
5)写测试类

代码:

import com.yang.bean.Teachers;
import com.yang.mapper.StudentMapper;
import com.yang.mapper.TeacherMapper;
import com.yang.utils.DBUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.Arrays;
import java.util.List;

public class TestTableLianCha {
    public static void main(String[] args) {
        /*调用DBUtils中的getSqlSession()方法*/
        SqlSession sqlSession = DBUtils.getSqlSession();
        /*通过.class的方式调用接口*/
        TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);

        List<Teachers> teachersList = teacherMapper.queryTeachers();
        for (Teachers t:teachersList) {
            System.out.println(t);
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值