spring boot mybatis 一對一 一對多
阿新 • • 發佈:2017-10-09
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 一對一 一對多