MyBatisシリーズ:(6)一対一マッピング
0、SQL文の準備(mysql)
2、entityクラス
Student.java
Card.java
3、mybatisのマッピングファイル
CardMapp.xml
StudentMapper.xml
4、mybatis主な構成はマッピングファイルを含む
mybatis.xml
db.properties
5、MyBatisUtils.java
6、StudentCardDao.java
CREATE TABLE cards(
cid INT(5) PRIMARY KEY,
cnum VARCHAR(18)
);
CREATE TABLE students(
sid INT(5) PRIMARY KEY,
sname VARCHAR(10),
scard_id INT(5),
CONSTRAINT students_fk FOREIGN KEY(scard_id) REFERENCES cards(cid)
);
INSERT INTO cards(cid,cnum) VALUES(1,'111');
INSERT INTO students(sid,sname,scard_id) VALUES(2,' ',1);
SELECT * FROM cards;
SELECT * FROM students;
SELECT s.sid,s.sname,c.cid,c.cnum
FROM students s INNER JOIN cards c ON s.scard_id=c.cid
2、entityクラス
Student.java
package com.rk.entity;
public class Student {
private Integer id;
private String name;
private Card card;
public Student(){}
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 Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", card=" + card + "]";
}
}
Card.java
package com.rk.entity;
public class Card {
private Integer id;
private String num;
private Student student;
public Card(){}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
public String toString() {
return "Card [id=" + id + ", num=" + num + "]";
}
}
3、mybatisのマッピングファイル
CardMapp.xml
mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
StudentMapper.xml
mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
4、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
5、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);
}
}
6、StudentCardDao.java
package com.rk.dao;
import org.apache.ibatis.session.SqlSession;
import com.rk.entity.Student;
import com.rk.utils.MyBatisUtils;
public class StudentCardDao {
public Student findById(int id){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtils.getSqlSession();
Student stu = sqlSession.selectOne("studentNamespace.findById", id);
return stu;
}
catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
throw new RuntimeException(e);
}
finally{
MyBatisUtils.closeSqlSession();
}
}
public static void main(String[] args) {
StudentCardDao dao = new StudentCardDao();
Student stu = dao.findById(2);
System.out.println(stu);
}
}