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