many2many操作
文件组成
db.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis
db.username=root
db.password=123456
log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.many2many.domain=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis.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="db.properties"></properties>
<typeAliases>
<typeAlias type="many2many.domain.student" alias="student"></typeAlias>
<typeAlias type="many2many.domain.teacher" alias="teacher"></typeAlias>
</typeAliases>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${db.driverClassName}"></property>
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="many2many/domain/studentmapper.xml"></mapper>
<mapper resource="many2many/domain/teachermapper.xml"></mapper>
</mappers>
</configuration>
mybatisutils方法类
package many2many.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
public class mybatisutils {
private SqlSessionFactory sf;
private static mybatisutils instance=new mybatisutils();
public mybatisutils(){
try {
sf=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession opensession(){
return instance.sf.openSession();
}
}
student类
package many2many.domain;
public class student {
private Long id;
private String name;
public student() {
}
public student(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
teacher类
package many2many.domain;
import java.util.ArrayList;
import java.util.List;
public class teacher {
private Long id;
private String name;
private List<student>list=new ArrayList<>();
public teacher() {
}
public teacher(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<student> getList() {
return list;
}
public void setList(List<student> list) {
this.list = list;
}
@Override
public String toString() {
return "teacher{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
studentmapper接口
package many2many.domain;
import java.util.List;
public interface studentmapper {
void stusave(student stu);
List<student>list();
}
teachermapper接口
package many2many.domain;
import org.apache.ibatis.annotations.Param;
public interface teachermapper {
void teasave(teacher tea);
void teastu(@Param("tid")Long tid,@Param("sid")Long sid);
teacher studentlist(Long id);
}
studentmapper.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="many2many.domain.studentmapper">
<insert id="stusave" parameterType="student" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO student(name) VALUES (#{name})
</insert>
<select id="list" parameterType="long" resultType="student">
SELECT *FROM student WHERE id IN(SELECT s_id FROM stu_tea WHERE t_id IN (SELECT id From teacher WHERE id =#{id}))
</select>
</mapper>
teachermapper.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="many2many.domain.teachermapper">
<!--第一种方式-->
<!--<resultMap id="base" type="teacher">-->
<!--<id column="id" property="id"></id>-->
<!--<result column="name" property="name"></result>-->
<!--<collection property="list" column="id" ofType="student" select="many2many.domain.studentmapper.list"></collection>-->
<!--</resultMap>-->
<!--内联方式-->
<resultMap id="base" type="teacher">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<collection property="list" ofType="student" columnPrefix="stu_">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
</collection>
</resultMap>
<insert id="teasave" parameterType="teacher" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
INSERT INTO teacher(name)VALUES (#{name})
</insert>
<insert id="teastu">
INSERT INTO stu_tea(t_id,s_id)VALUES(#{tid},#{sid})
</insert>
<!--<select id="studentlist" parameterType="long" resultMap="base">-->
<!--SELECT *FROM teacher WHERE id=#{id}-->
<!--</select>-->
<select id="studentlist" parameterType="long" resultMap="base">
SELECT t.id,t.name,s.id as stu_id,s.name as stu_name FROM teacher t LEFT JOIN stu_tea m ON m.t_id=t.id LEFT JOIN student s ON m.s_id=s.id WHERE t.id=#{id}
</select>
</mapper>
test测试类
package many2many.domain;
import many2many.utils.mybatisutils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class test {
@Test
public void testsave(){
student s1=new student("stu1");
student s2=new student("stu2");
teacher t1=new teacher("tea1");
teacher t2=new teacher("tea2");
SqlSession session= mybatisutils.opensession();
teachermapper teamapper=session.getMapper(teachermapper.class);
studentmapper stumapper=session.getMapper(studentmapper.class);
stumapper.stusave(s1);
stumapper.stusave(s2);
t1.getList().add(s1);
t1.getList().add(s2);
t2.getList().add(s1);
t2.getList().add(s2);
teamapper.teasave(t1);
teamapper.teasave(t2);
for (student stu1 :t1.getList() ) {
teamapper.teastu(t1.getId(),stu1.getId());
}
for (student stu2 :t2.getList() ) {
teamapper.teastu(t2.getId(),stu2.getId());
}
session.close();
}
@Test
public void testsearch(){
SqlSession session= mybatisutils.opensession();
teachermapper teamapper=session.getMapper(teachermapper.class);
teacher t=teamapper.studentlist(11L);
List<student>list=t.getList();
for (student student : list) {
System.out.println(student);
}
session.close();
}
}
结果如下