mybatis 注解开发,概述
常用的注解
@Insert
@Update
@Delete
@Select
@Result : 实现结果集封装
@Results : 可以与@Result一起使用,封装多个结果集
@One : 实现一对一结果集封装
@Many : 实现一对多结果集封装
演示简单的CRUD操作
@Insert("insert into user values(#{id},#{username},#{password},#{birthday})") public void save (User user)
@Select("select * from user") public ListfindAll()
实现复杂查询
@Results 代替的是标签,
@Result 代替
@One (一对一) 代替
@Many (多对一)代替
举一个例子
一对一:
查订单对应的用户
// 这里有一个id的重复,用oid,实现了冗余列名,这种封装和xml的方式一样 @Select("select *,o.id oid from orders o,user u where o.uid=u.id") @Results({ @Result(column="oid",property="id"), @Result(column="ordertime",property="ordertime"), @Result(column="total",property="total"), @Result(column="uid",property="user.id"), @Result(column="username",property="user.username"), @Result(column="password",property="user.password"), }) public ListfindAll();
// 分开查,查2次 @Select(“select * from orders”) @Results({ @Result(column=“id”,property=“id”), @Result(column=“ordertime”,property=“ordertime”), @Result(column=“total”,property=“total”), @Result ( property="user", //要封装的属性名称 column=“uid”,// 根据哪个字段查询user表的数据 javaType= User.class,// 要封装的实体类型 one = @One(select="cn.taotao.mapper.UserMapper.findById") 查询哪个接口的方法获得数据 ) })
publc ListfindAll()
接上面的接口查询
@Select(“select * from user where id=#{id}”) public User findById(Integer id);
一对多:
查用户的所有订单
在User类中,创建一个属性 ,建立映射关系,该用户的所有订单
private List
// 在 UserMapper中 @Select("select * from user") @Results({ @Result(id=true, column= "id", property="id"), @Result(column= "username", property="username"), @Result(column= "password", property="password"), @Result( property="orderList",column="id" , // 当前的id,作为对方的uid查询传入 ,返回类型为List javaType=List.class,
many=@Many(select=“cn.taotao.mapper.OrderMapper.findbyUid”) ) ), }) public ListfindUserAndOrderAll(); // 在 OrderMapper中 @Select(“select * from orders where uid=#{uid}”) public List findByUid(int uid);
多对多
(关键: 从user中建立映射关系,然后从中间表(user_role)查询结果,这个查询复杂,联合查询(user-role和role表),将结果封装到user中的映射关系属性中)
用户角色表,一个用户对应多个角色,一个角色有多个用户。
多对多一般对应一个中间表。这个例子用到了3张表,一个是user,一个role,一个是user_role(不需要建立mapper)
分别建立role,user的bean。
public class User { private int id; private String username; private Sting password; private Date birthday; private ListroleList; //当前用户拥有哪些角色,映射关系只需做一个即可,不用再role中建立, }
在UserMapper中
@Select(“select * from user”) @Results({ @Result(id=true,column="id",property="id"), @Result(column="username" ,property="username"), @Result(property="roleList",column="id", // 将id传入查询 javaType=List.class, many=@Many(select = "cn.taotao.mapper.RoleMapper.findByUid") // 对应下面的接口查询 ) }) public ListfindUserAndRoleAll();
建立RoleMapper,这个查询是关键,关联两张表,根据uid查询出所有的角色信息
@Select("select * from user_role ur,role r where ur.roleId=r.id and ur.userId=#{uid}") public ListfindByUid(int uid)