ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-23 22:38:06  阅读:124  来源: 互联网

标签:多表 name people private id Mybatis Integer 查询 public


Mapper.xml常用配置

  • 全局配置文件(数据库,事物管理,Mapper的注册、打印文件SQL、慢性加载、二级缓存)

  • Mapper配置文件 (定义自定义接口的具体方案;SQL、数据库、数据库与POJO的映射)
    多表关联查询:
    一对一,一对多、多对多
    单表查询:

    业务:通过id查询people对象
    目标表:test/people
    实体类:com.souththwind.entity.Peaple
    Mapper.xml设置相关的配置,由Mybatis自动完成查询,生成POJO
    statement标签的主要属性由:id、parameterType\resultType
    id:对应接口的方法名;parameterType对应定义的参数类型;resultType定义查询的结果的数据类型(要一致)
    parameterType
    支持基本的数据类型、包装类、String、多参数、POJO
    1.基本数据类型:
    public People findById(int id);

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有