• 3.SpringBoot整合Mybatis(一对多)


    前言:

      Mybatis一对多的处理关系:

    一个人有好多本书,每本书的主人只有一个人。当我们查询某个人拥有的所有书籍时,就涉及到了一对多的映射关系。

    一、添加数据表:

    1 CREATE TABLE `book` (
    2   `id` int(6) NOT NULL,
    3   `name` varchar(50) DEFAULT NULL,
    4   `uid` int(6) DEFAULT NULL,
    5   `price` double DEFAULT NULL,
    6   PRIMARY KEY (`id`),
    7   KEY `bu_id` (`uid`),
    8   CONSTRAINT `bu_id` FOREIGN KEY (`uid`) REFERENCES `user` (`id`)
    9 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

     二、代码实现:

    1.添加Book实体:

     1 package com.beilin.entity;
     2 /*
     3    * 书的实体
     4    * @author 北林
     5    *
     6    */
     7 
     8 public class Book {
     9 
    10     private int id;
    11     private int uid;
    12     private String name;
    13     private double price;
    14 
    15     public int getId() {
    16         return id;
    17     }
    18 
    19     public void setId(int id) {
    20         this.id = id;
    21     }
    22 
    23     public int getUid() {
    24         return uid;
    25     }
    26 
    27     public void setUid(int uid) {
    28         this.uid = uid;
    29     }
    30 
    31     public String getName() {
    32         return name;
    33     }
    34 
    35     public void setName(String name) {
    36         this.name = name;
    37     }
    38 
    39     public double getPrice() {
    40         return price;
    41     }
    42 
    43     public void setPrice(double price) {
    44         this.price = price;
    45     }
    46 }
    Book.java

    2.在User实体中添加book集合:

     1 public class User {
     2     /**
     3      *  name:学生实体
     4      */
     5 
     6     //主键id
     7     private int id;
     8     //姓名
     9     private String name;
    10     //年龄
    11     private int age;
    12     //添加book集合
    13     private List<Book> books;
    14 
    15     // Get和 Set方法
    16     public int getId() {
    17         return id;
    18     }
    19 
    20     public void setId(int id) {
    21         this.id = id;
    22     }
    23 
    24     public String getName() {
    25         return name;
    26     }
    27 
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31 
    32     public int getAge() {
    33         return age;
    34     }
    35 
    36     public void setAge(int age) {
    37         this.age = age;
    38     }
    39 
    40     public List<Book> getBooks() {
    41         return books;
    42     }
    43 
    44     public void setBooks(List<Book> books) {
    45         this.books = books;
    46     }
    47 }
    User.java

    3.在UserMapper接口中定义查询方法:

     1 package com.beilin.mapper;
     2 
     3 import com.beilin.entity.User;
     4 
     5 import java.util.List;
     6 
     7 public interface UserMapper {
     8 
     9      //插入
    10     public void insert(User user);
    11 
    12     //根据id删除
    13     public void delete(Integer id);
    14 
    15      //根据user的id修改
    16     public void update(User user);
    17 
    18     //根据id查询
    19     public User getById(Integer id);
    20 
    21     //查询全部
    22     public List<User> list();
    23 
    24     /**
    25           * 根据id查询所有的书
    26            * @param id
    27           */
    28     public User selectBookById(Integer id);
    29 
    30 
    31 }
    UserMapper

    4.在mapper映射关系中,添加一对多的select和resaultMap:

    注意:当多个表的字段名一样的时候,查询需要用别名

     1 <?xml version="1.0" encoding="UTF-8"?>
     2         <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     3 <mapper namespace="com.beilin.mapper.UserMapper">
     4 
     5 <!-- 插入一个user -->
     6 <insert id="insert" parameterType="user" useGeneratedKeys="true" keyProperty="id">
     7         insert into user(name,age) values(#{name},#{age})
     8     </insert>
     9 
    10 <!-- 根据id删除user -->
    11 <delete id="delete" parameterType="int">
    12         delete  from user where id=#{id}
    13     </delete>
    14 
    15 <!-- 根据id修改user信息 -->
    16 <update id="update" parameterType="user">
    17         update user set name=#{name},age=#{age} where id=#{id}
    18     </update>
    19 
    20 <!-- 根据id查询 -->
    21 <select id="getById" parameterType="int" resultType="user">
    22         select * from user where id=#{id}
    23     </select>
    24 
    25 <!-- 查询所有 -->
    26 <select id="list" parameterType="int" resultType="user">
    27         select * from user
    28     </select>
    29 
    30 
    31 <resultMap id="bookMap" type="user">
    32     <id property="id" column="id"/>
    33     <result property="name" column="name"/>
    34     <result property="age" column="age"/>
    35     <collection property="books" ofType="book">
    36         <id property="id" column="bid"/>
    37         <result property="name" column="bookName"/>
    38         <result property="price" column="price"/>
    39     </collection>
    40 </resultMap>
    41 
    42 <!--根据id查询所有的书  -->
    43 <select id="selectBookById" parameterType="int" resultMap="bookMap">
    44         select a.*,b.id bid,b.name as "bookName"  ,b.price from user a,book b where a.id=b.uid and a.id=#{id};
    45     </select>
    46 
    47 </mapper>
    UserMapper.xml

    5.在UserController中实现查询:

     1 package com.beilin.controller;
     2 
     3 import com.beilin.entity.Book;
     4 import com.beilin.entity.User;
     5 import com.beilin.mapper.UserMapper;
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 import org.springframework.web.bind.annotation.*;
     8 
     9 import java.util.List;
    10 
    11 @RestController
    12 public class UserController {
    13 
    14     @Autowired
    15     private UserMapper userMapper;
    16 
    17         //插入user
    18     @RequestMapping("/user")
    19     public void insert( User user) {
    20         userMapper.insert(user);
    21     }
    22 
    23       //根据id删除
    24     @RequestMapping("/user1/{id}")
    25     public void delete(@PathVariable("id") Integer id) {
    26         userMapper.delete(id);
    27     }
    28         //修改
    29     @RequestMapping("/user2/{id}")
    30     public void update(User user,@PathVariable("id") Integer id) {
    31         userMapper.update(user);
    32     }
    33 
    34      //根据id查询user
    35     @RequestMapping("/user3/{id}")
    36     public User getById(@PathVariable("id") Integer id) {
    37         User user = userMapper.getById(id);
    38         return user;
    39     }
    40 
    41     //查询全部
    42     @RequestMapping("/users")
    43     public List<User> list(){
    44         List<User> users = userMapper.list();
    45         return users;
    46     }
    47 
    48     /**
    49           * 根据id查询所有的书
    50            */
    51     @GetMapping("/user/book/{id}")
    52     public User getBooks(@PathVariable("id") Integer id){
    53         User user = userMapper.selectBookById(id);
    54         return user;
    55     }
    56 }
    UserController.java

    三、测试结果:

    1.数据库查询结果:

    2.postman访问结果:

  • 相关阅读:
    分治
    #include<algorithm>
    c++标准模板库的使用
    mysql_day03
    mysql_day02
    mysql_day01
    mongodb的安装
    迭代器和生成器简单介绍
    File文件操作
    数据类型
  • 原文地址:https://www.cnblogs.com/wx60079/p/11534570.html
Copyright © 2020-2023  润新知