一、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);
}
在实际应用的过程中,一般不会使用到多对多映射,所以这里就不说明了。