任庆博

导航

mybatis注解开发

 MyBatis中使用@Results注解来映射查询结果集到实体类属性。

(1)@Results的基本用法。当数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来。

column为数据库字段名,porperty为实体类属性名,jdbcType为数据库字段数据类型,id为是否为主键。

    @Select("select * from orders where id=#{id}")

    @Results({

       @Result(id=true,column = "id",property = "id"),

      @Result(column = "orderNum",property = "orderNum"),

      @Result(column = "orderTime",property = "orderTime"),

       @Result(column = "orderStatus",property = "orderStatus"),

      @Result(column = "peopleCount",property = "peopleCount"),

      @Result(column = "payType",property = "payType"),

      @Result(column = "orderDesc",property = "orderDesc")

     })

    Orders findById(String id) ;

(2)@ResultMap的用法。当这段@Results代码需要在多个方法用到时,为了提高代码复用性,我们可以为这个@Results注解设置id,然后使用@ResultMap注解来复用这段代码。

 

    @Select({"select id, name, class_id from my_student"})

    @Results(id="studentMap", value={

      @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),

      @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),

      @Result(column="class_id ", property="classId", jdbcType=JdbcType.INTEGER)})List selectAll();

      @Select({"select id, name, class_id from my_student where id = #{id}"

    })

 

    @ResultMap(value="studentMap")

    Student selectById(integer id);

(3)@One的用法。当我们需要通过查询到的一个字段值作为参数,去执行另外一个方法来查询关联的内容,而且两者是一对一关系时,可以使用@One注解来便捷的实现。

其中column对应的值在传入select时,不管是设置为memberId还是id都可以传入使用,建议设置为memberId,提高可读性。

 

 

    @Select("select * from orders where id=#{id}")

    @Results({

      @Result(id=true,column = "id",property = "id"),

      @Result(column = "orderNum",property = "orderNum"),

      @Result(column = "orderTime",property = "orderTime"),

      @Result(column = "orderStatus",property = "orderStatus"),

      @Result(column = "peopleCount",property = "peopleCount"),

      @Result(column = "payType",property = "payType"),

      @Result(column = "orderDesc",property = "orderDesc"),

      @Result(column = "memberId",property = "member",

      one = @One(select = "findById"))

    })

    Orders findById(String id) ;

 

 

 

    @Select("select * from member where id=#{memberId}")

    Member findById(String id) throws Exception;

(4)@Many的用法。与@One类似,只不过如果使用@One查询到的结果是多行,会抛出TooManyResultException异常,这种时候应该使用的是@Many注解,实现一对多的查询。

其中column对应的值在传入select时,不管是设置为id还是orderId都可以传入使用,建议设置为id,提高可读性。

    @Select("select * from orders where id=#{id}")

    @Results({

      @Result(id=true,column = "id",property = "id"),

      @Result(column = "orderNum",property = "orderNum"),

        @Result(column = "orderTime",property = "orderTime"),

      @Result(column = "orderStatus",property = "orderStatus"),

      @Result(column = "peopleCount",property = "peopleCount"),   

      @Result(column = "payType",property = "payType"),

      @Result(column = "orderDesc",property = "orderDesc"),

      @Result(column = "id",property = "travellers",many = @Many(select = "findByOrdersId"))

     })

    Orders findById(String id) throws Exception;

 

@Select("select * from traveller where id in (select travellerId from order_traveller where orderId=#{id})")

/*@Select("select * from traveller where id in (select travellerId from order_traveller where orderId=#{orderId})") 都可以使用*/

public List findByOrdersId(String ordersId) throws Exception;

posted on 2022-01-28 15:37  不捡自然无  阅读(27)  评论(0编辑  收藏  举报