MyBatis——Annotation注解使用——一對一、一對多、多對多


由於使用注解代替mapper文件中sql語句,所以mapper.xml文件中不需要寫sql

<?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.web.mybatis.mapper.XXXMapper">

</mapper>

 

一對一

示例:身份證和人一一對應

與mapper文件對應的接口類

/MyBatisAnnotation/src/com/web/mybatis/mapper/CardMapper.java

package com.web.mybatis.mapper;

import org.apache.ibatis.annotations.Select;
import com.web.mybatis.domain.Card;

public interface CardMapper {
    @Select("SELECT * FROM tb_card WHERE id=#{id}")
    Card selectCardById(Integer id);
}

/MyBatisAnnotation/src/com/web/mybatis/mapper/PersonMapper.java

package com.web.mybatis.mapper;

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;

import com.web.mybatis.domain.Person;

public interface PersonMapper {
    @Select("SELECT * FROM tb_person WHERE id=#{id}")
    @Results({
        @Result(id=true,column="id",property="id"),
        @Result(column="name",property="name"),
        @Result(column="sex",property="sex"),
        @Result(column="age",property="age"),
        @Result(column="card_id",property="card",
        one=@One(
                select="com.web.mybatis.mapper.CardMapper.selectCardById",
                fetchType=FetchType.EAGER))  //fetchType的值表示立即加載,懶加載值為LAZY
    })
    Person selectPersonById(Integer id);
}

測試代碼

    public static void oneToOneTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        PersonMapper pm = session.getMapper(PersonMapper.class);
        Person p = pm.selectPersonById(1);
        System.out.println(p.toString());
        System.out.println(p.getCard().toString());
        session.commit();
        session.close();
    }

 

一對多

班級與學生是一對多的關系

/MyBatisAnnotation/src/com/web/mybatis/mapper/StudentMapper.java

package com.web.mybatis.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.web.mybatis.domain.Student;

public interface StudentMapper {
    @Select("SELECT * FROM tb_student WHERE clazz_id=#{id}")
    @Results({
        @Result(id=true,column="id",property="id"),
        @Result(column="name",property="name"),
        @Result(column="sex",property="sex"),
        @Result(column="age",property="age")
    })
    List<Student> selectByClazzId(Integer clazz_id);
}

/MyBatisAnnotation/src/com/web/mybatis/mapper/ClazzMapper.java

package com.web.mybatis.mapper;

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.mapping.FetchType;
import com.web.mybatis.domain.Clazz;

public interface ClazzMapper {
    @Select("SELECT * FROM tb_clazz WHERE id=#{id}")
    @Results({
        @Result(id=true,column="id",property="id"),
        @Result(column="code",property="code"),
        @Result(column="id",property="clazzlist",
        many=@Many(
                select="com.web.mybatis.mapper.StudentMapper.selectByClazzId",
                fetchType=FetchType.LAZY))
    })
    Clazz selectById(Integer id);
}

測試代碼:

public static void oneToManyTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        ClazzMapper pm = session.getMapper(ClazzMapper.class);
        Clazz clazz = pm.selectById(1);
        System.out.println(clazz.toString());
        clazz.getClazzlist().forEach(student->System.out.println(student.toString()));
        session.commit();
        session.close();
    }

 

多對多

用戶訂單商品的關系是一對多對多

/MyBatisAnnotation/src/com/web/mybatis/mapper/ArticleMapper.java

package com.web.mybatis.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.web.mybatis.domain.Article;

public interface ArticleMapper {
    @Select("SELECT * FROM tb_article WHERE id IN (SELECT article_id FROM tb_item WHERE order_id=#{id})")
    List<Article> selectByOrderId(Integer order_id);
}

/MyBatisAnnotation/src/com/web/mybatis/mapper/OrderMapper.java

package com.web.mybatis.mapper;

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Select;
import com.web.mybatis.domain.Order;

public interface OrderMapper {
    @Select("SELECT * FROM tb_order WHERE id=#{id}")
    @Results({
        @Result(id=true,column="id",property="id"),
        @Result(column="code",property="code"),
        @Result(column="total",property="total"),
        @Result(column="user_id",property="user",
        one=@One(select="com.web.mybatis.mapper.UserMapper.selectUserById")),
        @Result(column="id",property="articles",
        many=@Many(select="com.web.mybatis.mapper.ArticleMapper.selectByOrderId"))
    })
    Order selectById(Integer id);
}

/MyBatisAnnotation/src/com/web/mybatis/mapper/UserMapper.java

package com.web.mybatis.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.web.mybatis.domain.User;

public interface UserMapper {
    @Select("SELECT * FROM tb_user WHERE id=#{id}")
    User selectUserById(Integer id);
}

測試代碼:

    public static void manyToMany() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        OrderMapper om = session.getMapper(OrderMapper.class);
        Order order = om.selectById(1);
        System.out.println(order.toString());
        System.out.println(order.getUser().toString());
        order.getArticles().forEach(article->System.out.println(article));
        session.commit();
        session.close();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM