由于使用注解代替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(); }