mybatis注解开发-输出映射,一对一,一对多

注解中的@Results     作用同resultMap    解决数据库字段和javabean名称不对应的映射问题

    /**
    *定义resultMap返回结果类型映射
    *查询全部用户
    */
    @Select("select * from user")
        //id为唯一标识,
    @Results(id="userMap",value={
            //id默认为false,主键设置为true,column为数据库字段名,property为javabean属性名
            @Result(id = true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "birthday",property = "useBirthday"),
    })
    void findAll();

    /**
    *复用resultMap
    *根据id查单个用户
    */
    @Select("select * from user where id = #{id}")
        //@ResultMap复用上面定义的映射
    @ResultMap(value={"userMap"})
    User findById(Integer userId);

一对一

//账户实体类
public class Account {
    private Integer id;
    private Integer uid;
    private Double money;
    //一对一关系映射:一个账户属于一个用户
    private User user;
    
    set/get方法    } 
//用户实体类
  public class User {
    private Integer id;
    private String username;
    private String address;
    private String sex;
    private Date birthday;
   set/get方法    } 


    /**
     *查询所有账户,并且获取每个账户所属的用户信息
     */
    @Select("select * from account")
    @Results(id="accountMap",value={
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            //一对一写法:property:属性名称  column:查询参数 select:调用方法查询(包名.接口名.方法名)
            // fetchType:查询类型,FetchType.EAGER是立即加载FetchType.LAZY是按需加载(懒加载)
            @Result(property = "user",column = "uid",
                one = @One(select = "com.mybatis.dao.UserDao.findById",
                fetchType = FetchType.EAGER))
    })
    List<Account> findAll();

一对多

//账户实体类
public class Account {
    private Integer id;
    private Integer uid;
    private Double money;
    //一对一关系映射:一个账户属于一个用户
    private User user;
    
    set/get方法    } 
//用户实体类
  public class User {
    private Integer id;
    private String username;
    private String address;
    private String sex;
    private Date birthday;
    //一对多关系映射:一个用户有多个账户
    private List<Account> accounts;
    
   set/get方法    } 

    /**
     * 查询所有用户,并且获取用户下的所有账户
     */
    @Select("select * from user")
    @Results(id="userMap",value={
            @Result(id = true,column = "id", property = "id"),
            @Result(column = "username",property = "userName"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "birthday",property = "useBirthday"),
             //一对多写法:property:属性名称  column:查询参数 select:调用方法查询(包名.接口名.方法名)
            // fetchType:查询类型,FetchType.EAGER是立即加载FetchType.LAZY是按需加载(懒加载)
            @Result(property = "accounts",column = "id",
                many = @Many(select = "com.mybatis.dao.AccountDao.findByUserId",
                fetchType = FetchType.LAZY))
    })
    List<User> findUserAll();

猜你喜欢

转载自blog.csdn.net/weixin_38503726/article/details/86506006