起始表数据:
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR(20)
)ENGINE =INNODB DEFAULT CHARSET=utf8;
CREATE TABLE card(
id INT PRIMARY KEY AUTO_INCREMENT ,
info VARCHAR(20),
pid INT unique,
CONSTRAINT fk_pid FOREIGN KEY(pid) REFERENCES person(id)
)ENGINE =INNODB DEFAULT CHARSET=utf8;
INSERT INTO person VALUES(NULL,'jack'),(NULL,'tom');
INSERT INTO card VALUES(NULL,'南京身份证',1),(NULL,'苏州身份证',2);
if table course is exist drop else
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE person_course(
pid INT,
cid INT,
CONSTRAINT fk_pid FOREIGN KEY(pid) REFERENCES person(id),
CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES course(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO Course VALUES(NULL,'语文'),(NULL,'数学');
INSERT INTO person_course VALUES(1,1),(1,2);
数据:
实体类:
/**
* N:1 / 1:1 写类型
* 1:N / M:N 写集合
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Card {
private Integer id ;
private String info ;
//One2One *2One 都写类类型 *Many 都写集合
private Person person ;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Course {
private Integer id ;
private String name ;
//Many2Many
private List<Person> personList ;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private Integer id ;
private String name ;
//One2One
private Card card ;
//Many2Many
private List<Course> courseList;
}
dao层接口:
public interface EmpDAO {
boolean insertEmp(Emp emp);
List<Emp> selectByDeptId(Integer id);
}
public interface CardDAO {
boolean insert(Card card) ;
}
public interface PersonDAO {
/**
* 新增 人: 1. 新增person 表数据 2. 新增 card表数据 3. 批量新增person_course
* @param person
* @return
*/
boolean insert(Person person) ;
boolean insertBatch(Person person) ;
}
mappering.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="org.wanho.dao.PersonDAO">
<insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into person(id,name) values (#{id},#{name})
</insert>
<insert id="insertBatch">
insert into person_course values
<foreach collection="courseList" item="course" separator=",">
(#{id},#{course.id})
</foreach>
</insert>
</mapper>
<?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="org.wanho.dao.CardDAO">
<insert id="insert">
insert into card (id,info,pid) values (null,#{id},#{person.id})
</insert>
</mapper>
Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="org.wanho.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="jdbc"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url"
value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <package name="org/wanho/dao"/>-->
<mapper resource="mapper/EmpDAO.xml"/>
<mapper resource="mapper/CardDAO.xml"/>
<mapper resource="mapper/PersonDAO.xml"/>
</mappers>
</configuration>
测试类:
测试类BaseTest:
public abstract class BaseDAOTest {
protected SqlSession sqlSession ;
@Before
public void before(){
sqlSession = MybatisUtil.getSession();
}
@After
public void after(){
sqlSession.commit();
sqlSession.close();
}
}
测试:
public class PersonDAOTest extends BaseDAOTest{
@Test
public void insert(){
//对象关联
//先创建插入的朱对象
Person person = new Person();
person.setName("Jack");
Card card = new Card();
card.setInfo("XXX中国绿卡");
person.setCard(card);
card.setPerson(person);
List<Course> list = Arrays.asList(new Course(1,null,null),new Course(2,null,null));
person.setCourseList(list);
//调用多个dao方法 类似于(Service)
PersonDAO personDAO = sqlSession.getMapper(PersonDAO.class);
CardDAO cardDAO = sqlSession.getMapper(CardDAO.class);
personDAO.insert(person);
cardDAO.insert(person.getCard());
personDAO.insertBatch(person);
}
}