mybatisプレミアム_注記開発_マルチテーブルアクション
mybatisプレミアム
MyBatis注記開発
一般的な注記の説明
プロファイルのマッピングの弊害
コード実装
1.環境準備
2.mapperファイルパッケージの下にStudentMapperインタフェースを作成する
3.テスト
注記開発の概要
比較プロファイルが異なるsql文の位置が異なる コアプロファイルのロード方法
MyBatis注記によるマルチテーブル操作
一対一
a.環境準備
b.テスト
一対多
a.環境準備
b.インタフェースとエンティティークラスの準備
c.テスト
多対多
前の表を借りて、2つの表学科と中間表を準備します.
コースのエンティティークラスが必要です.中間テーブルではエンティティークラスを構成する必要はありません.
インタフェースの書き換えが必要
テスト
注記マルチテーブル操作のまとめ
注記開発の注意事項
MyBatis SQL文の構築
SQL構築オブジェクトの説明
MyBatisは私たちにorgを提供してくれた.apache.ibatis.jdbc.SQL文の構築に特化したSQL機能クラス.
メソッド名
説明
SELECT(String…column)
フィールドに基づいてクエリー文をつづる
FROM(String…table)
テーブル名に基づいて文をつづる
WHERE(String…condition)
条件に従って文をつづる
INSERT_INTO(String table)
テーブル名に基づいて新しい文をつづる
VALUES(String column,String values)
フィールドと値の結合に基づいてデータ文を挿入
UPDATE(String table)
テーブル名に基づいて文をつづる
DELETE_FROM(String table)
テーブル名に基づいて文を結合削除
MyBatis SQL文のまとめの構築
MyBatis注記開発
一般的な注記の説明
,
@Select(“ SQL ”):
@Insert(“ SQL ”):
@Update(“ SQL ”):
@Delete(“ SQL ”):
プロファイルのマッピングの弊害
1.
2.
コード実装
1.環境準備
// student /bean
public class Student {
private Integer id;
private String name;
private Integer age;
... ..set get
2.mapperファイルパッケージの下にStudentMapperインタフェースを作成する
//
@Select("SELECT * FROM student")
public abstract List<Student> selectAll();
//
@Insert("INSERT INTO student VALUES (#{id},#{name},#{age})")
public abstract Integer insert(Student stu);
//
@Update("UPDATE student SET name=#{name},age=#{age} WHERE id=#{id}")
public abstract Integer update(Student stu);
...
3.テスト
public void selectAll() throws Exception{
//1.
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2. SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3. SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4. StudentMapper
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//5. ,
List<Student> list = mapper.selectAll();
//6.
for (Student student : list) {
System.out.println(student);
}
//7.
sqlSession.close();
is.close();
}
...
注記開発の概要
, 。
<mappers>
<package name=" "/>
</mappers>
比較プロファイルが異なる
MApper
<mappers>
<mapper resource="com/itheima/one_to_one/OneToOneMapper.xml"/>
<mapper resource="com/itheima/one_to_many/OneToManyMapper.xml"/>
<mapper resource="com/itheima/many_to_many/ManyToManyMapper.xml"/>
</mappers>
<mappers>
<package name="com.itheima.mapper"/>
</mappers>
MyBatis注記によるマルチテーブル操作
一対一
API
@Results: 。
Result[] value(): Result
@Result: 。
column :
property :
javaType :
one :
@One: 。
select :
a.環境準備
1. jar
..
2.
1
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
);
...
2
CREATE TABLE card(
id INT PRIMARY KEY AUTO_INCREMENT,
number VARCHAR(30),
pid INT,
CONSTRAINT cp_fk FOREIGN KEY (pid) REFERENCES person(id)
);
...
Card Person
public class Card {
private Integer id; // id
private String number; //
private Person p; //
...}
public class Person {
private Integer id; // id
private String name; //
private Integer age; //
...}
CardMapper PersonMapper
public interface PersonMapper {
// id
@Select("select * from person where id = #{id}")
public abstract Person selectById(Integer id);
}
CardMapper
public interface CardMapper {
//
@Select("SELECT * FROM card")
@Results({
@Result(column = "id",property = "id"),
@Result(column = "number",property = "number"),
@Result(
property = "p", //
javaType = Person.class, //
column = "pid", // card pid person
/*
one、@One
select :
*/
one = @One(select = "com.itheima.one_to_one.PersonMapper.selectById")// PersonMapper
)
})
public abstract List<Card> selectAll();
b.テスト
public void selectAll() throws Exception{
//1.
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2. SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3. SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4. CardMapper
CardMapper mapper = sqlSession.getMapper(CardMapper.class);
//5. ,
List<Card> list = mapper.selectAll();
//6.
for (Card card : list) {
System.out.println(card);
}
//7.
sqlSession.close();
is.close();
}
//
Card{id=1, number='12345', p=Person{id=1, name=' ', age=23}}
Card{id=2, number='23456', p=Person{id=2, name=' ', age=24}}
Card{id=3, number='34567', p=Person{id=3, name=' ', age=25}}
一対多
API
@Results: 。
Result[] value(): Result
@Result: 。
column :
property :
javaType :
many :
@Many: 。
select :
a.環境準備
CREATE TABLE classes(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO classes VALUES (NULL,' ');
INSERT INTO classes VALUES (NULL,' ');
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
cid INT,
CONSTRAINT cs_fk FOREIGN KEY (cid) REFERENCES classes(id)
);
INSERT INTO student VALUES (NULL,' ',23,1);
INSERT INTO student VALUES (NULL,' ',24,1);
INSERT INTO student VALUES (NULL,' ',25,2);
INSERT INTO student VALUES (NULL,' ',26,2);
b.インタフェースとエンティティークラスの準備
public class Classes {
private Integer id; // id
private String name; //
private List<Student> students; //
...}
public class Student {
private Integer id; // id
private String name; //
private Integer age; //
...}
private List<Course> courses; //
public interface StudentMapper {
// // cid student
@Select("SELECT * FROM student WHERE cid=#{cid}")
public abstract List<Student> selectByCid(Integer cid);
}
public interface ClassesMapper {
//
@Select("select * from classes")
@Results({// @Results:
@Result(column = "id",property = "id"), //@Result:
@Result(column = "name",property = "name"),
//column :
//property :
@Result(property = "students",
javaType = List.class,
//javaType :
column = "id",
many = @Many(select"com.itheima.one_to_many.StudentMapper.selectByCid")
)//many :
}) //select :
public abstract List<Classes> selectAll();
}
c.テスト
public void selectAll() throws Exception{
//1.
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2. SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3. SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4. ClassesMapper
ClassesMapper mapper = sqlSession.getMapper(ClassesMapper.class);
//5. ,
List<Classes> list = mapper.selectAll();
//6.
for (Classes classes : list) {
System.out.println(classes.getId()+","+classes.getName());
List<Student> students = classes.getStudents();
for (Student student : students) {
System.out.println("\t"+student);
}
}
//7.
...}
多対多
@Results: 。
Result[] value(): Result
@Result: 。
column :
property :
javaType :
one :
many :
@One: 。
select :
@Many: 。
select :
// Result
前の表を借りて、2つの表学科と中間表を準備します.
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO course VALUES (NULL,' ');
INSERT INTO course VALUES (NULL,' ');
CREATE TABLE stu_cr(
id INT PRIMARY KEY AUTO_INCREMENT,
sid INT,
cid INT,
CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id),
CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id)
);
INSERT INTO stu_cr VALUES (NULL,1,1);
INSERT INTO stu_cr VALUES (NULL,1,2);
INSERT INTO stu_cr VALUES (NULL,2,1);
INSERT INTO stu_cr VALUES (NULL,2,2);
コースのエンティティークラスが必要です.中間テーブルではエンティティークラスを構成する必要はありません.
public class Course {
private Integer id; // id
private String name; //
...}
インタフェースの書き換えが必要
//
public interface CourseMapper {
// id
@Select("SELECT c.id,c.name FROM stu_cr sc,course c WHERE sc.cid=c.id AND sc.sid=#{id}")
public abstract List<Course> selectBySid(Integer id);
}
//
public interface StudentMapper {
//
@Select("SELECT DISTINCT s.id,s.name,s.age FROM student s,stu_cr sc WHERE sc.sid=s.id")
@Results({
@Result(column = "id",property = "id"),
@Result(column = "name",property = "name"),
@Result(column = "age",property = "age"),
@Result(
property = "courses", //
javaType = List.class, //
column = "id", // student id ,
/*
many、@Many
select :
*/
many = @Many(select = "com.itheima.many_to_many.CourseMapper.selectBySid")
)
})
public abstract List<Student> selectAll();}
テスト
public void selectAll() throws Exception{
//1.
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2. SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3. SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4. StudentMapper
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//5. ,
List<Student> list = mapper.selectAll();
//6.
for (Student student : list) {
System.out.println(student.getId() + "," + student.getName() + "," + student.getAge());
List<Course> courses = student.getCourses();
for (Course cours : courses) {
System.out.println("\t" + cours);
}
}
//7.
sqlSession.close();
is.close();
}
注記マルチテーブル操作のまとめ
@Results: 。
Result[] value(): Result
@Result: 。
column :
property :
javaType :
one :
many :
@One: 。
select :
@Many: 。
select :
注記開発の注意事項
1.@Result
2.@One select
3.Result column
MyBatis SQL文の構築
SQL構築オブジェクトの説明
, SQL 。 、
MyBatisは私たちにorgを提供してくれた.apache.ibatis.jdbc.SQL文の構築に特化したSQL機能クラス.
メソッド名
説明
SELECT(String…column)
フィールドに基づいてクエリー文をつづる
FROM(String…table)
テーブル名に基づいて文をつづる
WHERE(String…condition)
条件に従って文をつづる
INSERT_INTO(String table)
テーブル名に基づいて新しい文をつづる
VALUES(String column,String values)
フィールドと値の結合に基づいてデータ文を挿入
UPDATE(String table)
テーブル名に基づいて文をつづる
DELETE_FROM(String table)
テーブル名に基づいて文を結合削除
MyBatis SQL文のまとめの構築
@SelectProvider: SQL 。
@InsertProvider: SQL 。
@UpdateProvider: SQL 。
@DeleteProvider: SQL 。
type : SQL
method :