Mybatis注解开发

Mybatis注解开发

常用注解

@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@ResuIt一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装

简单开发操作

    //添加用户
    @Insert("insert into user values(#{id},#{username})")
    public void addUser(User user);

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

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

    //删除用户
    @Delete("delete from user where id = #{id}")
    public void deleteUser(Integer id);

Mybatis的注解实现复杂映射开发

使用注解开发后,可以使用@Results注解,@Result注解,@One注解(相当于<association>),@Many(相当于<collection>)注解组合完成复杂关系的配置

@ResuIts
代替的是标签<resultMap>该注解中可以使用单个@Result注解,也可以使用@Result集合,使用格式:@Results ({@Result(),@Result()})@Results (@Result())
@Result
代替了<result>标签
@Result中属性介绍:
column:数据库的列名
property:需要装配的属性名
one:需要使用的@One注解(@Result (one=@One)()))
many:需要使用的@Many注解(@Result (many=@many}()))

一对一查询(注解)

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

select*from orders;
select*from user where id=查询出订单的uid;
//创建Order实体
public class Order{
private int id;
private Date ordertime
private double total;
//代表当前订单从属于哪一个客户
private User user;
}
创建User实体
public class User{
private int id;
private String username;
private String password;
private Date birthday;
}
//创建OrderMapper接口
public interface IOrderMapper {
//查询订单的同时还查询该订单所属的用户
@Results({
        @Result(property = "id",column = "id"),
        @Result(property = "orderTime",column = "orderTime"),
        @Result(property = "total",column = "total"),
        @Result(property = "user",column = "uid",javaType = User.class,
                //select = namespace.id,column为传递的参数
                one=@One(select = "com.tong.mapper.IUserMapper.findUserById"))
    })
    @Select("select * from orders")
    public List<Order> findOrderAndUser();
}
public interface IUserMapper {
    //根据id查询用户
    @Select({"select * from user where id = #{id}"})
    public User findUserById(Integer id);
}
@Test
public void oneToOne(){
    List<Order> orderAndUser = orderMapper.findOrderAndUser();
    for (Order order : orderAndUser) {
        System.out.println(order);
    }
}

一对多查询(注解)

一对多查询的模型
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对多查询的需求:查询所有用户,与此同时查询出每个用户具有的订单

select*from user;
select*from orders where uid=查询出用户的id;
public class User{
private int id;
private String username;
private String password;
private Date birthday;
//代表当前用户具备哪些订单
private List<Order> orderList;
}
//创建UserMapper接口
public interface IUserMapper {
    //查询所有用户、同时查询每个用户关联的订单信息
    @Select("select * from user")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "orderList",column = "id",javaType = List.class,
                many=@Many(select = "com.tong.mapper.IOrderMapper.findOrderByUid"))
    })
    public List<User> findAll();
}
public interface IOrderMapper {
    @Select("select * from orders where uid = #{uid}")
    public List<Order> findOrderByUid(Integer uid);
}
@Test
public void oneToMany(){
    List<User> all = userMapper.findAll();
    for (User user : all) {
        System.out.println(user);
    }
}

多对多查询(注解)

多对多查询的模型
用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用
多对多查询的需求:查询用户同时查询出该用户的所有角色

select*from user;
select*from role r,user role ur where r.id=ur.role id and ur.user id=用户的id
//修改User实体
public class User{
 private int id;
 private String username;
 private String password;
 private Date birthday;
 //代表当前用户具备哪些订单
 private List<Order> orderList;
 //代表当前用户具备哪些角色
 private List<Role> roleList;
}
//创建Role实体
public class Role{
private int id;
private String rolename;
}
public interface IUserMapper {
    //查询所有用户、同时查询每个用户关联的角色信息
    @Select("select * from user")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "roleList",column = "id",javaType = List.class,
             many = @Many(select = "com.tong.mapper.IRoleMapper.findRoleByUid"))
    })
    public List<User> findAllUserAndRole();
}
public interface IRoleMapper {
 @Select("select * from sys_role r,sys_user_role ur where r.id = ur.roleid and ur.userid = #{uid}")
 public List<Role> findRoleByUid(Integer uid);
}
@Test
public void manyToMany(){
    List<User> all = userMapper.findAllUserAndRole();
    for (User user : all) {
        System.out.println(user);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值