mybatis注解方式

public interface UserMapper {
    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    @Select("select * from user where id = #{id}")
    public User queryUserById(Integer id);

    /**
     * 查询所有用户
     * @return
     */
    @Select("select * from user")
    public List<User> queryUserAll();

    /**
     * 插入数据
     * @param user
     */
    @SelectKey(statement = "select last_insert_id()",keyProperty = "id",
            keyColumn = "id",before = false,resultType = Integer.class)
    @Insert("insert into user(username,birthday,sex,address) " +
            "values(#{username},#{birthday},#{sex},#{address})")
    public void saveUser(User user);

    /**
     * 更新用户
     * @param user
     */
    @Update("update user set username=#{username} where id = #{id}")
    public void updateUser(User user);

    /**
     * 删除数据
     * @param id
     */
    @Delete("delete from user where id=#{id}")
    public void deleteUser(Integer id);

    //如果使用动态sql标签,需要给最终的sql语句<script>标签进行包裹
    @Select("<script>" +
            "SELECT * FROM USER\n" +
            "<where>\n" +
            "    <if test=\"sex!=null and sex!=''\">\n" +
            "        AND sex=#{sex}\n" +
            "    </if>\n" +
            "    <if test=\"username!=null and username!=''\">\n" +
            "        AND username like #{username}\n" +
            "    </if>\n" +
            "</where>" +
            "</script>")
    public List<User> queryUserByUsernameAndSex(User user);

    //查询所有用户数据
    //@Results:相当于配置ResultMap
    //@Result:相当于配置ResultMap里面的<id>和<result>标签
    //@Result里面的property属性:就是配置对应的pojo的哪一个属性
    //@Result里面的column属性:配置对应的数据库结果集的那一列
    //如果是一对一和一对多,这里配置的就是延时加载的时候,需要使用的查询参数,
    //该案例延时加载用户的的数据,需要通过uid进行查询
    //@Result注解里面没有ofType,而映射文件中有,这里没有就不用写
    //@Result里面的javaType及时属性的类型,
    //@Result里面的one配置的是一对一的延时加载,里面需要填写的是@One注解
    //@One里面的select属性是配置延时加载需要执行的方法,和映射文件中延时加载select属性配置的效果是一样的
    //@One里面的fetchType属性是配置是否使用延时加载,FetchType.LAZY代表使用延时加载
    @Select("select * from user")
    @Results({
            @Result(id=true,property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "birthday",column = "birthday"),
            @Result(property = "sex",column = "sex"),
            @Result(property = "address",column = "address"),
            @Result(property = "accounts",column = "id",
                    many = @Many(select = "com.mybatis.mapper.AccountMapper.queryAccountByUid",fetchType = FetchType.LAZY))
    })
    public List<User> queryUserAccountAll();

    //查询所有的账户数据,同时延时加载用户数据
    @Select("select * from account")
    //@Results:相当于在配置ResultMap
    //@Result:相当于配置ResultMap里面的<id>和<result>标签
    //@Result里面的id属性:就是这个配置是否是主键,如果是true,就代表这是主键,如果是false就不是主键
    //@Result里面的property属性:就是配置对应的pojo的哪一个属性
    //@Result里面的column属性:配置对应的数据库结果集的那一列,
    // 如果是一对一和一对多,这里配置的就是延时加载的时候,需要使用的查询参数
    //本例中延时加载账户的用户数据,就需要通过uid进行查询
    //@Result里面的javaType就是属性的类型
    //@Result里面的one配置的是一对一的延时加载,里面需要填写的是@One注解
    //@One里面的select属性是配置延时加载需要执行的方法,和映射文件中延时加载的select属性配置的效果是一样
    //@One里面的fetchType属性是配置是否使用延时加载,FetchType.LAZY代表使用延时加载
    @Results({
            @Result(id = true, property = "id", column = "id"),
            @Result(property = "uid", column = "uid"),
            @Result(property = "money", column = "money"),
            @Result(property = "user", column = "uid", javaType = User.class,
                    one = @One(select = "com.mybatis_4_3.mapper.UserMapper.queryUserById", fetchType = FetchType.LAZY)),
    })
    public List<Account> queryAccountUserAll();

    //支持用户的延时加载账户信息,所编写的方法
    @Select("select * from Account where uid=#{uid}")
    public List<Account> queryAccountByUid(Integer uid);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值