MyBatis:使用注解实现一对一,一对多查询

一、MyBatis常用注解

@Insert:添加,@Delete:删除,@Update:修改,@Seletc:查询

@Result:结果集的封装,@Results:可以与@Result一起使用,封装多个结果集

@One:实现一对一结果集封装,@Many:实现一对多结果集封装

二、MyBatis注解实现复杂映射

配置文件中实现复杂关系映射,可以在映射文件中通过<ResultMap>、<Result>、<assocation>、<collection>标签来进行映射;

注解开发中,可以使用@Results、@Result、@One、@Many注解组合完成复杂映射的配置。

1、一对一映射:

订单表和用户表,每个订单属于一个用户,一个用户可以有多个订单

创建订单实体类Order和用户实体类User

public class Order {
    private int id;
    private Date ordertime;

    //订单属于的用户
    private User user;
    //get(),set()
}

public class User {
    private int id;
    private String username;
    private String password;
}

创建订单数据访问层接口:OrderMapper

public interface OrderMapper {
    //查询当前订单并查询出当前订单的所属用户
    @Select("select * from order")
    @Results({
        //主键映射
        @Result(id=true,property = "id",column = "id"),
        @Result(property = "ordertime",column = "ordertime"),
        //将用户id传给findById(),映射到user属性中
        @Result(property = "user",column = "user_id",
        javaType = User.class,
        one = @One(select = "com.laq.mapper.UserMapper.findById"))
    })
	List<Order> findAll();
}

创建用户数据访问层:UserMapper

public interface UserMapper {
    //根据用户id查询用户
    @Select("select * from user where id=#{id}")
    User findById(int id);
    
}
2、一对多映射:

查询用户时,查询用户的订单详情

创建订单实体类Order和用户实体类User

public class Order {
    private int id;
    private Date ordertime;
    //订单属于的用户
    private User user;
    //get(),set()
}

public class User {
    private int id;
    private String username;
    private String password;
    
    //用户的订单
    private List<Order> orderList;
    //get(),set()
}

创建订单数据访问层接口:OrderMapper

public interface UserMapper {
    @Select("select * from user")
        @Results({
        @Result(id = true,property = "id",column = "id"),
        @Result(property = "username",column = "username"),
        @Result(property = "password",column = "password"),
        //将用户id传给findById
        @Result(property = "orderList",column = "id",
        javaType = List.class,
                many = @Many(select = "com.laq.mapper.OrderMapper.findById"))
    })
    List<User> findAllUserAndOrder();
}

创建用户数据访问层接口:UserMapper

public interface OrderMapper {
    @Select("select * from orders where uid=#{id}")
    List<Order> findById(int id);
}

在实际应用的过程中,一般不会使用到多对多映射,所以这里就不说明了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值