前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis注解开发2

Mybatis注解开发2

作者头像
暴躁的程序猿
发布2022-03-23 16:50:33
1780
发布2022-03-23 16:50:33
举报
文章被收录于专栏:阿飞的学习记录

建设实体类属性和数据库的对应关系

以user表和acccount表为例

一、一对一的注解开发

@Results 注解 代替的是标签<resultMap> 该注解中可以使用单个@Result 注解,也可以使用@Result 集合 @Results({@Result(),@Result()})或@Results(@Result()) @Resutl 注解 代替了 <id>标签和<result>标签 @Result 中 属性介绍: id 是否是主键字段 column 数据库的列名 property 需要装配的属性名 one 需要使用的@One 注解(@Result(one=@One)())) many 需要使用的@Many 注解(@Result(many=@many)())) @One 注解(一对一) 代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。 @One 注解属性介绍: select 指定用来多表查询的 sqlmapper fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。。 @Many 注解(多对一) 代替了<Collection>标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。 注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType (一般为 ArrayList)但是注解中可以不定义;

1.pojo类编写(一对一)

代码语言:javascript
复制
//user表
    private Integer userId;
    private String userName;
    private String userAddress;
    private String userSex;
代码语言:javascript
复制
//account表
    private Integer id;
    private Integer uid;
    private Double money;
  //多对一(mybatis中多对一视为为一对一)的映射:一个账户只能属于一个用户 包含一个user类型的引用
    private User user;

2.dao层接口编写

代码语言:javascript
复制
 /**
     * 查询所有用户
     * @return
     */
    @Select("select * from user")
    <!--配置实体类名与数据库列名对应-->
    @Results(id="userMap",value={
            @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 = "userBirthday")
    })
    List<User> findAll();

    /**
     * 根据id查询用户
     * @param userId
     * @return
     */
    @Select("select * from user  where id=#{id} ")
    @ResultMap("userMap")
    User findById(Integer userId);
代码语言:javascript
复制
 /**
     * 查询所有账户 并查询每个账户所属的用户信息
     * @return
     */
    @Select("select * from account")
    <!--one标签配置一对一 fetchType配置立即加载-->
    @Results(id="accountMap",value = {
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            @Result(property = "user",column = "uid",one=@One(select="com.rpf.dao.UserDao.findById",fetchType= FetchType.EAGER))
    })
    List<Account> findAll();

    /**
     * 根据用户id查询账户信息
     * @param userId
     * @return
     */
    @Select("select * from account where uid = #{userId}")
    List<Account> findAccountByUid(Integer userId);

3.测试

代码语言:javascript
复制
//查询账户时同时查询所属的用户 一对一
 @Test
    public void testFindAll(){
        List<Account> accounts = accountDao.findAll();
        for (Account account : accounts) {
            System.out.println(account);
            System.out.println(account.getUser());
        }
    }

二、一对多的注解开发

1.pojo类编写(一对多)

代码语言:javascript
复制
<!--一对多 一个用户可以有多个账户    包含一个账户的集合引用-->
     private List<Account> accounts;

    public List<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }

2.dao层接口编写

代码语言:javascript
复制
 @Select("select * from user")
    @Results(id="userMap",value={
            @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 = "userBirthday"),
             <!--many标签配置对多 fetchType配置延迟加载加载-->
            @Result(property = "accounts",column = "id",
                    many = @Many(select = "com.rpf.dao.AccountDao.findAccountByUid",
                            fetchType = FetchType.LAZY))
    })
    List<User> findAll();

    /**
     * 根据id查询用户
     * @param userId
     * @return
     */
    @Select("select * from user  where id=#{id} ")
    @ResultMap("userMap")
    User findById(Integer userId);

3.测试

代码语言:javascript
复制
    @Test
       public void testFindAll(){
        List<User> users = userDao.findAll();
          for (User user : users) {
            System.out.println(user);
            System.out.println(user.getAccounts());
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建设实体类属性和数据库的对应关系
  • 一、一对一的注解开发
  • 二、一对多的注解开发
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档