SpringBoot整合Mybatis (三) 一对多

SpringBoot整合Mybatis


三、一对多实现

1. 构建项目

    使用上一章内容


2. 创建数据库

CREATE TABLE phone(
	id INT(10) NOT NULL AUTO_INCREMENT COMMENT '编号',
	name VARCHAR(50) NULL COMMENT '手机名称',
	number BIGINT(11) NULL COMMENT '手机号码',
	uid INT(10) NOT NULL COMMENT '用户编号',
	PRIMARY KEY(id)
)ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;



3. 编写代码

1). 实体类Phone

    位于entity包

/**
 * @author Ray
 * @date 2018/7/7 0007
 * 手机实体
 */
public class Phone {

    /**
     * 编号
     */
    private int id;

    /**
     * 手机名称
     */
    private String name;

    /**
     * 手机号码
     */
    private long number;

    /**
     * 用户编号
     */
    private int uid;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getNumber() {
        return number;
    }

    public void setNumber(long number) {
        this.number = number;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", number=" + number +
                ", uid=" + uid +
                '}';
    }
}


2). 实体类User

    位于entity包,添加Phone集合,添加对应的setter、getter

/**
 * @author Ray
 * @date 2018/7/7 0007
 * 用户实体类
 */
public class User {

    /**
     * 编号(主键)
     */
    private int id;

    /**
     * 用户名
     */
    private String name;

    /**
     * 新增Phone集合
     */
    private List<Phone> phones;

    public List<Phone> getPhones() {
        return phones;
    }

    public void setPhones(List<Phone> phones) {
        this.phones = phones;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}


3). 数据操作类UserMapper

    位于mapper包,添加查询方法selectPhoneById

/**
 * @author Ray
 * @date 2018/7/7 0007
 * 数据操作层
 */
public interface UserMapper {

    /**
     * 根据id获取用户信息
     */
    public User selectById(Integer id);

    /**
     * 查询所有用户信息
     */
    public List<User> list();

    /**
     * 新增用户信息
     */
    public int insert(User user);

    /**
     * 修改用户信息
     */
    public int update(User user);

    /**
     * 删除用户信息
     */
    public int delete(Integer id);

    /**
     * 根据id查询用户的所有电话信息
     */
    public User selectPhoneById(Integer id);
}



4). UserMapper类映射UserMapper.xml

    collection - 集合元素的作用几乎和关联是相同的。比如,在我们的示例中,一个用户有一个身份证,但一个身份证同时能拥有多个电话号码。集合和关联完全相同,除了它应用了一个“ofType”属性,ofType是映射到list集合属性中pojo的类型,而JavaType是用来指定pojo中属性的类型。

<?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.ray.mybatis.mapper.UserMapper">

    <!-- 新增用户信息 -->
    <insert id="insert" parameterType="user">
        INSERT INTO
        user(name)
        VALUES
        (#{name})
    </insert>

    <!-- 修改用户信息 -->
    <update id="update" parameterType="user">
        UPDATE
        user
        SET
        name=#{name}
        WHERE
        id=#{id}
    </update>

    <!-- 删除用户信息 -->
    <delete id="delete">
        DELETE
        FROM
        user
        WHERE
        id=#{id}
    </delete>

    <!-- 根据id获取用户信息 -->
    <select id="selectById" resultType="user" parameterType="int">
        SELECT
        *
        FROM
        user
        WHERE
        id=#{id}
    </select>

    <!-- 查询所有用户信息 -->
    <select id="list" resultType="user">
        SELECT
        *
        FROM
        user
    </select>

    <!-- 注意:当多个表的字段名一样的时候,查询需要用别名,否则查询结果不理想 -->
    <resultMap id="phoneMap" type="user">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!-- 一对多 【ofType是映射到list集合属性中pojo的类型】 -->
        <collection property="phones" ofType="phone">
            <id property="id" column="pid"/>
            <result property="name" column="pname"/>
            <result property="number" column="number"/>
            <result property="uid" column="uid"/>
        </collection>
    </resultMap>
    <!-- 根据id查询用户的所有电话信息 -->
    <select id="selectPhoneById" resultMap="phoneMap" parameterType="int">
    SELECT
    u.*,
    p.id pid,p.name pname,p.number,p.uid
    FROM
    user u, phone p
    WHERE
    u.id=p.uid
    and
    u.id=#{id}
    </select>
</mapper>


5). 数据控制类UserController

    位于controller包

package com.ray.mybatis.controller;

import com.ray.mybatis.entity.User;
import com.ray.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Ray
 * @date 2018/7/7 0007
 * 数据控制层
 */
@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    /**
     * 根据id获取用户信息
     * localhost:8080/user/2
     */
    @GetMapping("/user/{id}")
    public User selectById(@PathVariable("id")Integer id){
        User user = userMapper.selectById(id);
        return user;
    }

    /**
     * 查询所有用户信息
     * localhost:8080/users
     */
    @GetMapping("/users")
    public List<User> list(){
        List<User> users = userMapper.list();
        return users;
    }

    /**
     * 新增用户信息
     * localhost:8080/user?name=Ray1
     */
    @PostMapping("/user")
    public String insert(User user){
        int result = userMapper.insert(user);
        if(result == 1){
            return "success";
        }
        return "fail";
    }

    /**
     * 修改用户信息
     * localhost:8080/user/2?name=Ray22
     */
    @PutMapping("/user/{id}")
    public String update(User user, @PathVariable("id") Integer id){
        int result = userMapper.update(user);
        if(result == 1){
            return "success";
        }
        return "fail";
    }

    /**
     * 删除用户信息
     * localhost:8080/user/8
     */
    @DeleteMapping("/user/{id}")
    public String delete(@PathVariable("id") Integer id){
        int result = userMapper.delete(id);
        if(result == 1){
            return "success";
        }
        return "fail";
    }

    /**
     * 根据id查询用户的所有电话信息(一对多)
     * localhost:8080/user/phone/1
     */
    @GetMapping("/user/phone/{id}")
    public User selectPhoneById(@PathVariable("id") Integer id){
        User user = userMapper.selectPhoneById(id);
        return user;
    }
}


4. 测试

    根据id查询用户的所有电话信息-GET



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值