其他分享
首页 > 其他分享> > Mybatis的常用配置-多表关联查询

Mybatis的常用配置-多表关联查询

作者:互联网

Mapper.xml常用配置

2.包装类:

public People findById(Integer id);

<select id="findById" parameterType="java.lang.Integer" resultType="com.shouthwind.entity.People">
    select *from people where id=#{id}
</select>

3.String:

public  People findByName(String name);

<select id="findByName" parameterType="java.lang.String" resultType="com.shouthwind.entity.People">
        select *from  people where name=#{name}
</select>

4.多参数:

public  People findByIdAndName(Integer id,String name);

<select id="findByIdAndName" resultType="com.shouthwind.entity.People">
    select * from people where id=#{param1} and name=#{param2}
</select>

5.POJO:

public  int update(People people);

<update id="update" parameterType="com.shouthwind.entity.People">
    update people set name=#{name} ,money=#{money} where id=#{id}
</update>

resultType

与parameterType基本一致:

1.基本数据类型

public int count();

<select id="count" resultType="int">
    select count(*) from people
</select>

2.包装类

public Integer count();

<select id="count" resultType="java.lang.Integer">
    select count(*) from people
</select>

3.String

public  String findNameById(Integer id);

<select id="findNameById" parameterType="java.lang.Integer" resultType="java.lang.String">
    select  name from  people where id=#{id}
</select>

4.POJO

public People findById(Integer id);

<select id="findById" parameterType="java.lang.Integer" resultType="com.shouthwind.entity.People">
    select *from people where id=#{id}
</select>

多表关联查询

实际开发中最常用的一对多和多对多

一对多

1.建表

2.Sql数据库基础

3.创建实体类

package com.shouthwind.entity;

import lombok.Data;

import java.util.List;

@Data
public class Sc {
    private Integer Sno;
    private Integer Cno;
    private Integer Grade;
    private List<Student> students;
}



package com.shouthwind.entity;

import lombok.Data;

@Data
public class Student {
    private  Double Sno;
    private String Sname;
    private String Ssex;
    private Integer Sage;
    private String Sdept;
    private  Sc sc;
}

4.实际

package com.shouthwind.repository;

import com.shouthwind.entity.Student;

public interface StudentRepository {
    public Student findById( Integer id);
}

resultType是直接将结果集与实体类映射的,名字一样就映射。

resultMap对结果集二次封装,根据需求来对结果集合分装。

<mapper namespace="com.shouthwind.repository.StudentRepository">
    <resultMap id="studentMap" type="com.shouthwind.entity.Student">
        <result column="sSno" property="Sno"></result>
        <result column="sSname" property="Sname"></result>
        <result column="sSsex" property="Ssex"></result>
        <result column="sSage" property="Sage"></result>
        <result column="sSdept" property="Sdept"></result>
        <association property="sc"  javaType="com.shouthwind.entity.Sc">
            <result column="cSno" property= "Sno"></result>
            <result column="cCno" property="Cno"></result>
            <result column="cGrade" property="Grade"></result>
        </association>
    </resultMap>
    <select id="findById" parameterType="java.lang.Integer" resultMap="studentMap">
        select s.Sno sSno,s.Sname sSname,s.Ssex sSsex,s.Sage sSage,s.Sdept sSdept,c.Sno cSno,c.Cno cCno,c.Grade cGrade from student s,sc c where s.Sno=c.Sno and s.Sno=#{Sno}
    </select>
</mapper>

Class:

package com.shouthwind.repository;

import com.shouthwind.entity.Sc;

public interface ClassRepository {
    public Sc finById(Integer Cno);
}

<?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">
<mapper namespace="com.shouthwind.repository.ClassRepository">
    <resultMap id="classMapper" type="com.shouthwind.entity.Sc">
        <id property="Cno" column="cCno"></id>
        <result property="Sno" column="cSno"></result>
        <result property="Grade" column="cGrade"></result>
        <collection property="students" ofType="com.shouthwind.entity.Student">
            <result column="sSno" property="Sno"></result>
            <result column="sSname" property="Sname"></result>
            <result column="sSsex" property="Ssex"></result>
            <result column="sSage" property="Sage"></result>
            <result column="sSdept" property="Sdept"></result>
        </collection>
    </resultMap>
    <select id="finById" resultMap="classMapper">
        select c.Sno cSno,c.Cno cCno,c.Grade cGrade,s.Sno sSno,s.Sname sSname,s.Ssex sSsex,s.Sage sSage,s.Sdept sSdept from sc c,student s where  c.Cno=s.Cno and c.Cno=#{Cno}
    </select>
</mapper>

注意:

1.association是封装成一个实体类:javaType设置数据类型

2.collection是封装成一个集合:ofType设置数据类型

多对多

多对多是一种双向的关系

1.建表

mysql> create table account_course(

-> id int(11) not null primary key auto_increment,

-> aid int(11) default null,

-> cid int(11) default null,

-> key aid(aid),

-> key cid(cid),

-> constraint account_course_ibfk_1 foreign key(aid) references account(id),

-> constraint account_course_ibfk_2 foreign key(aid) references t_course(id)

-> );

mysql> create table t_course(

-> id int(11) not null primary key auto_increment,

-> name varchar(11) default null

-> );

2.实体类

package com.shouthwind.entity;

import lombok.Data;

import java.util.List;

@Data
public class Account {
    private Integer id;
    private String name;
    private List<Course> courses;
}

package com.shouthwind.entity;

import java.util.List;

public class Course {
    private Integer id;
    private String name;
    private List<Student> students;
}

3.学生选课:

学生------》课

package com.shouthwind.repository;

import com.shouthwind.entity.Account;

public interface AccountRepository {
    public Account findById(Integer id);
}

<?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">
<mapper namespace="com.shouthwind.repository.AccountRepository">
    <resultMap id="accoutMap" type="com.shouthwind.entity.Account">
        <id column="aid" property="id"></id>
        <result column="aname" property="name"></result>
        <collection property="courses" ofType="com.shouthwind.entity.Course">
            <id column="cid" property="id"></id>
            <result column="cname" property="name"></result>
        </collection>
    </resultMap>
 <select id="findById" parameterType="java.lang.Integer" resultMap="accoutMap">
     select a.id aid,a.name aname,c.id cid,c.name cname from account a,t_course c,account_course ac where a.id=#{id} and a.id=ac.aid and c.id=ac.cid
 </select>
</mapper>

课程-------》学生

package com.shouthwind.repository;

import com.shouthwind.entity.Course;

public interface CourseRepository {
    public Course findById(Integer id);
}

<?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">
<mapper namespace="com.shouthwind.repository.CourseRepository">
    <resultMap id="courseMap" type="com.shouthwind.entity.Course">
        <id column="cid" property="id"></id>
        <result column="cname" property="name"></result>
        <collection property="accounts" ofType="com.shouthwind.entity.Account">
            <id column="aid" property="id"></id>
            <result column="aname" property="name"></result>
        </collection>
    </resultMap>
    <select id="findById" parameterType="java.lang.Integer" resultMap="courseMap">
     select a.id aid,a.name aname,c.id cid,c.name cname from account a,t_course c,account_course ac where c.id=#{id} and a.id=ac.aid and c.id=ac.cid
 </select>
</mapper>

标签:多表,name,people,private,id,Mybatis,Integer,查询,public
来源: https://www.cnblogs.com/HJZ114152/p/16406966.html