1. MyBatis 的常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
2. MyBatis 的增删改查
修改MyBatis 的核心配置文件,使用了注解替代的映射文件,只需要加载使用了注解的Mapper 接口即可
<!--加载映射文件--> <!--<mappers>--> <!--<mapper resource="com/itheima/mapper/UserMapper.xml"></mapper>--> <!--<mapper resource="com/itheima/mapper/OrderMapper.xml"></mapper>--> <!--</mappers>--> <mappers> <!--扫描使用注解的类--> <mapper class="com.itheima.mapper.UserMapper"></mapper> </mappers>
或者指定扫描包含映射关系的接口所在包也可以
<mappers> <!--扫描使用注解的类所在的包--> <package name="com.itheima.mapper"></package> </mappers>
UserMapper 接口
public interface UserMapper { @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); @Select("select * from user") public List<User> findAll(); }
3. MyBatis 的注解实现复杂映射开发
可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置
4. 一对一查询
方式一
OrderMapper 接口
public interface OrderMapper { @Select("select *,o.id oid from orders o,user u where o.uid=u.id") @Results({ @Result(column = "oid",property = "id"), @Result(column = "ordertime",property = "ordertime"), @Result(column = "total",property = "total"), @Result(column = "uid",property = "user.id"), @Result(column = "username",property = "user.username"), @Result(column = "password",property = "user.password") }) public List<Order> findAll(); }
方式二
OrderMapper 接口
public interface OrderMapper { @Select("select * from orders") @Results({ @Result(column = "id",property = "id"), @Result(column = "ordertime",property = "ordertime"), @Result(column = "total",property = "total"), @Result( property = "user", //要封装的属性名称 column = "uid", //根据哪个字段去查询user表的数据 javaType = User.class, //要封装的实体类型 //select属性 代表查询哪个接口的方法获得数据 one = @One(select = "com.itheima.mapper.UserMapper.findById") ) }) public List<Order> findAll(); }
UserMapper 接口
public interface UserMapper { @Select("select * from user where id=#{id}") public User findById(int id); }
5. 一对多查询
UserMapper 接口
public interface UserMapper { @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 = "com.itheima.mapper.OrderMapper.findByUid") ) }) public List<User> findUserAndOrderAll(); }
RoleMapper 接口
public interface RoleMapper { @Select("SELECT * FROM sys_user_role ur,sys_role r WHERE ur.roleId=r.id AND ur.userId=#{uid}") public List<Role> findByUid(int uid); }
6. 一多对多查询
UserMapper 接口
public interface UserMapper { @Select("SELECT * FROM USER") @Results({ @Result(id = true,column = "id",property = "id"), @Result(column = "username",property = "username"), @Result(column = "password",property = "password"), @Result( property = "roleList", column = "id", javaType = List.class, many = @Many(select = "com.itheima.mapper.RoleMapper.findByUid") ) }) public List<User> findUserAndRoleAll(); }
OrderMapper 接口
public interface OrderMapper { @Select("select * from orders where uid=#{uid}") public List<Order> findByUid(int uid); }