MyBatis数据封装(注解开发)

MyBatis数据封装(注解开发)

学完xml以后呢,老师无情的来了一句,xml用的不大多了哦,大家现在更喜欢用注解开发拉,嘿嘿,我真**了,xml打吐了都快。
不过注解我也更喜欢注解拉,让我们重新开始吧!!!

  • 咳咳,搞注解前哈,我们还是要配置一下的哈
  • 以前我们配置那个核心文件处理xml的关系的时候用的是
    <!--加载映射文件-->
    <mappers>
        <mapper resource="junmu/mapper/UserMapper.xml"/>
        <mapper resource="junmu/mapper/OrderMapper.xml"/>
    </mappers>
  • 这样采用映射文件,然后在映射文件里面编辑sql语句,然后执行的哈,
  • 然后今天开始,我们就要使用注解的方式来进行编写了
  • 然后我们就需要重新搞个配置了
    <!--加载映射关系-->
    <mappers>
        <!--指定包下面的接口-->
        <package name="junmu.mapper"/>
    </mappers>
  • 首先呢,我们就不是加载映射文件了,我们是要搞映射关系了
  • 然后注解直接在映射接口里面编写就行了,
  • 所以,我们只需要指定映射接口的地址就行了

基本SQL语句注入

	@Select("select * from user")
    public List<User> findAll() throws Exception;

    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    public void save(User user);

    @Update("update user set username=#{username},password=#{password} where id=#{id}")
    public void update(User user);

    @Delete("delete from user where id = #{id}")
    public void delete(int id);

    @Select("select * from user where id=#{id}")
    public User findById(int id);
  • 像这种,是不是比那个xml省事多了,啊哈哈哈哈
  • 除了基本的SQL语句数据注入,还有我们的多表查询,我们使用注解也是可以实现的哈

一对一查询

@Select("select * from orders")
    @Results({
            @Result(column = "oid" , property = "id"),
            @Result(column = "ordertime" , property = "ordertime"),
            @Result(column = "total" , property = "total"),
            @Result(
                    property = "user",
                    column = "uid",
                    javaType = User.class,
                    one = @One(select = "junmu.mapper.UserMapper.findById")
            )
    })
    public List<Order> findAll();
  • 比如这种情况哈,查询所有的订单,然后每个订单对应着一个用户,用户和订单就是一个一对一的关系
  • 我们可以使用Results + (Result + One) 注解的形式来进行注入
  • 注意的是,One注解里面的方法是我们已经在外面的接口实现了的,我们只需要在调用一次就行了。

一对多查询

@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",
                    javaType = List.class,
                    many = @Many(select = "junmu.mapper.OrderMapper.findByUid")
            )
    })
    public List<User> findUserAndOrderAll();
  • 比如,我们需要查询所有个用户,并且将每个用户的订单都保存下来
  • 注意哈,这个和上面那个区别还是蛮大的,用户是一个,订单可是很多个
  • 我们这里就需要使用到 Results + (Result + One) 的注解了
  • many里面的findByUid就需要自己先在OrderMapper映射接口里面先实现哈
    // 根据Uid查询订单
    @Select("select * from orders where uid=#{uid}")
    public List<Order> findByUid(int uid);

多对多查询

@Select("select * from user")
    @Results({
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(
                    column = "id",
                    property = "roleList",
                    javaType = List.class,
                    many = @Many(select = "junmu.mapper.RoleMapper.findByUid")
            )
    })
    public List<User> findUserAndRoleAll();
  • 咳咳,场景重现哈,这里是很多个用户,然后每个用户又有多重角色
  • 这里面有三张表哈, 用户表 、 角色表 、 用户角色关系表
  • 然后我们先把用户查出来,然后通过用户的id和用户角色关系表进行查询
  • 注意哈,这里的findByUid是RoleMapper映射文件里面的哈,
    @Select("select * from user_role ur,role r where ur.roleid=r.id and ur.userid=#{uid}")
    public List<Role> findByUid(int uid);
  • 这样两个表关联一下,然后一起查,就能得到一个用户对应的所有角色了,
  • 然后把这个list传回去
  • 我们这里就需要使用到 Results + (Result + One) 的注解哈
  • 无了无了,该睡觉了,害。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值