MyBatisシリーズ:(7)一対のマルチマッピング
0、SQL文の準備(mysql)
1、entityクラス
Car.java
Wheel.java
2、mybatisのマッピングファイル
CarMapper.xml
WheelMapper.xml
3、mybatisのメインプロファイル(マッピングファイルを導入)
mybatis.xml
db.properties
4、MyBatisUtils.java
5、CarWheelDao.java
CREATE TABLE Cars(
cid INT(5) PRIMARY KEY,
cname VARCHAR(10)
);
CREATE TABLE Wheels(
wid INT(5) PRIMARY KEY,
wname VARCHAR(10),
wcar_id INT(5),
CONSTRAINT wheels_fk FOREIGN KEY(wcar_id) REFERENCES Cars(cid)
);
INSERT INTO Cars(cid,cname) VALUES(1,"BMW");
INSERT INTO Wheels(wid,wname,wcar_id) VALUES(1,' 1 ',1);
INSERT INTO Wheels(wid,wname,wcar_id) VALUES(2,' 2 ',1);
INSERT INTO Wheels(wid,wname,wcar_id) VALUES(3,' 3 ',1);
INSERT INTO Wheels(wid,wname,wcar_id) VALUES(4,' 4 ',1);
SELECT * FROM Cars;
SELECT * FROM Wheels;
SELECT c.cid,c.cname,w.wid,w.wname
FROM cars c INNER JOIN wheels w ON c.cid=w.wcar_id
1、entityクラス
Car.java
package com.rk.entity;
import java.util.ArrayList;
import java.util.List;
public class Car {
private Integer id;
private String name;
private List wheels = new ArrayList();
public Car(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getWheels() {
return wheels;
}
public void setWheels(List wheels) {
this.wheels = wheels;
}
@Override
public String toString() {
return "Car [id=" + id + ", name=" + name + ", wheels=" + wheels + "]";
}
}
Wheel.java
package com.rk.entity;
public class Wheel {
private Integer id;
private String name;
private Car car;
public Wheel(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Wheel [id=" + id + ", name=" + name + "]";
}
}
2、mybatisのマッピングファイル
CarMapper.xml
mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
WheelMapper.xml
mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3、mybatisのメインプロファイル(マッピングファイルを導入)
mybatis.xml
configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
db.properties
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/testdb
mysql.username=root
mysql.password=root
4、MyBatisUtils.java
package com.rk.utils;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtils {
private static ThreadLocal threadLocal = new ThreadLocal();
private static SqlSessionFactory sqlSessionFactory;
static{
try {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
private MyBatisUtils(){}
public static SqlSession getSqlSession(){
SqlSession sqlSession = threadLocal.get();
if(sqlSession == null){
sqlSession = sqlSessionFactory.openSession();
threadLocal.set(sqlSession);
}
return sqlSession;
}
public static void closeSqlSession(){
SqlSession sqlSession = threadLocal.get();
if(sqlSession != null){
sqlSession.close();
threadLocal.remove();
}
}
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
Connection conn = sqlSession.getConnection();
System.out.println(conn);
}
}
5、CarWheelDao.java
package com.rk.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.rk.entity.Car;
import com.rk.entity.Wheel;
import com.rk.utils.MyBatisUtils;
public class CarWheelDao {
public Car findCarByWheelId(int wheelId){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtils.getSqlSession();
Car car = sqlSession.selectOne("carNamespace.findCarByWheelId", wheelId);
return car;
}
catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
throw new RuntimeException(e);
}
finally{
MyBatisUtils.closeSqlSession();
}
}
public List findWheelsByCarName(String carName){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtils.getSqlSession();
List list = sqlSession.selectList("wheelNamespace.findWheelsByCarName", carName);
return list;
}
catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
throw new RuntimeException(e);
}
finally{
MyBatisUtils.closeSqlSession();
}
}
public static void main(String[] args) {
CarWheelDao dao = new CarWheelDao();
Car car = dao.findCarByWheelId(2);
System.out.println(car);
List wheels = dao.findWheelsByCarName("BMW");
if(wheels != null && wheels.size()>0){
for(Wheel wheel : wheels){
System.out.println(wheel);
}
}
}
}