spring boot mybatis 一對一 一對多


 pox配置

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- jack-json -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

目錄結構

數據庫結構

 

 

 

 

基本配置

 

spring: 
  datasource:
    url: jdbc:mysql://localhost:3306/bet
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.bo

mapper-locations: mybatis配置文件掃描路徑

type-aliases-package:數據庫映射關系對象掃描路徑(可不設置,如果不設置需要在<resultMap type="com.bo.User" id="bookResult"> type寫入完整路徑)

Bo

public class User {
    private Integer id; private String name; private String sex; private List<Book> books; // get set ..... }
public class Book {

    private String id; private String name; // get set............ }

 

UserMapper.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" >
<mapper namespace="com.dao.UserDao">
    <resultMap type="com.bo.User" id="userResult">
        <id property="id" column="ID" />
        <result property="name" column="U_NAME" />
    </resultMap>

    <resultMap type="com.bo.User" id="userResult1">
        <id property="id" column="ID" />
        <result property="name" column="U_NAME" />
        <collection property="books" ofType="com.bo.Book">
            <id property="id" column="B_ID" />
            <result property="name" column="NAME" />
        </collection>

    </resultMap>

    <select id="getUserAll" resultMap="userResult">
        SELECT * FROM user
    </select>

    <select id="getUserById" resultMap="userResult1">
        SELECT a.*,b.ID as B_ID,b.NAME FROM user a , books b WHERE a.ID=b.U_ID AND a.ID = #{id}
    </select>
</mapper>

 

重點,如果用戶表和書表,中主鍵名字一樣比如例子中都為ID,那么1對多的情況下,會發現查詢的book對象只會有一條數據,所以SQL使用別名來處理,結果就正常了!

 上面代碼中倒數第三行

 DAO接口

package com.dao;

import java.util.List;

import com.bo.User;

public interface UserDao {
    public List<User> getUserAll();
    
    public User getUserById(Integer id);
}

 

Test測試

package com.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.bo.Book;
import com.bo.User;
import com.dao.UserDao;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test1 {
    @Autowired
    private UserDao userDao;
    
    @Test
    public void test(){
        List<User> list = userDao.getUserAll();
        for(User u : list){
            System.out.println(u.getId()+":"+u.getName());
        }
        System.out.println("-----------------");
        User u = userDao.getUserById(1);
        System.out.println(u.getId()+":"+u.getName());
        List<Book> books = u.getBooks();
        System.out.println(books.size());
        for(Book book : books){
            System.out.println(book.getName());
        }
    }
}

 

 結果

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM