1. 程式人生 > >spring boot mybatis 一對一 一對多

spring boot mybatis 一對一 一對多

oct 技術分享 mybatis blog use res pac ase unit

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());
        }
    }
}

結果

技術分享

spring boot mybatis 一對一 一對多