Mybatis实现多对多映射的查询

来源:互联网 发布:java 连续登录天数 编辑:程序博客网 时间:2024/05/21 14:59

Configuration.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>    <typeAliases>        <typeAlias type="com.zmj.web.entity.Course" alias="Course"/>        <typeAlias type="com.zmj.web.entity.User" alias="User"/>    </typeAliases>    <environments default="development">        <environment id="development">            <transactionManager type="jdbc"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/user"/>                <property name="username" value="root"/>                <property name="password" value="1234"/>            </dataSource>        </environment>    </environments>    <!--映射文件  -->    <mappers>        <mapper resource="com/zmj/web/entity/Course.xml"/>        <mapper resource="com/zmj/web/entity/User.xml"/>    </mappers></configuration>

两个实体类:

User.java

public class User {    public int userId;    public String userName;    public List<Course> course;    public int getUserId() {        return userId;    }    public void setUserId(int userId) {        this.userId = userId;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public List<Course> getCourse() {        return course;    }    public void setCourse(List<Course> course) {        this.course = course;    }    public User() {        super();    }}Course.javapublic class Course {    public int courseId;    public String courseName;    public User user;    public int getCourseId() {        return courseId;    }    public void setCourseId(int courseId) {        this.courseId = courseId;    }    public String getCourseName() {        return courseName;    }    public void setCourseName(String courseName) {        this.courseName = courseName;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    public Course() {        super();    }}

Course.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="com.zmj.web.dao.UserDao">    <resultMap type="Course" id="courseMap">        <id property="courseId" column="c_id" />        <result property="courseName" column="c_name" />    </resultMap>    <resultMap type="Course" id="courseUserMap" extends="courseMap">        <collection property="course" ofType="Course">            <id property="userId" column="u_id" />            <result property="userName" column="u_name" />        </collection>    </resultMap></mapper>

User.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="com.zmj.web.dao.UserDao">    <resultMap type="User" id="userMap">        <id property="userId" column="u_id"/>        <result property="userName" column="u_name"/>    </resultMap>    <resultMap type="User" id="userCourseMap" extends="userMap">        <collection property="course" ofType="Course">            <id property="courseId" column="c_id"/>            <result property="courseName" column="c_name"/>        </collection>    </resultMap>    <select id="selectCourseByuserId" parameterType="int" resultMap="userCourseMap">        select * from user_course as uc left join usertable as u on uc.u_id=u.u_id        left join coursetable as c on c.c_id = uc.c_id where u.u_id-#{userId}    </select></mapper>

接口类UserDao.java

public interface UserDao {    List<User> selectCourseByuserId(int userId);}

测试类:

public class Main {    private static SqlSessionFactory sqlSessionFactory;    private static Reader reader;    static{        try {            reader = Resources.getResourceAsReader("Configuration.xml");            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        try {            SqlSession session = sqlSessionFactory.openSession();            UserDao dao = session.getMapper(UserDao.class);            List<User> list = dao.selectCourseByuserId(1);            for (User user : list) {                System.out.println(user.getUserName());                for (Course course : user.getCourse()) {                    System.out.println(course.getCourseName());                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

数据库表需要三张(如下图):
这里写图片描述
这里写图片描述
这里写图片描述

0 0