Mybatis----加载策略及注解开发(三)

MyBatis注解

3.1 MyBatis常用注解

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写

Mapper映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。

 

* @Insert:实现新增,代替了<insert></insert>

* @Delete:实现删除,代替了<delete></delete>

* @Update:实现更新,代替了<update></update>

* @Select:实现查询,代替了<select></select>

* @Result:实现结果集封装,代替了<result></result>

* @Results:可以与@Result 一起使用,封装多个结果集,代替了<resultMap></resultMap>

* @One:实现一对一结果集封装,代替了<association></association>

* @Many:实现一对多结果集封装,代替了<collection></collection>

 

3.2 MyBatis注解的增删改查【重点】

3.2.1 创建UserMapper接口

 

public interface UserMapper {

@Select("SELECT * FROM `user`")

public List<User> findAll();

@Insert("INSERT INTO `user`(username,birthday,sex,address) VALUES(#

{username},#{birthday},#{sex},#{address})")

public void save(User user);

@Update("UPDATE `user` SET username = #{username},birthday = #{birthday},sex

= #{sex},address = #{address} WHERE id = #{id}")

public void update(User user);

@Delete("DELETE FROM `user` where id = #{id}")

public void delete(Integer id);

}

3.2.2 编写核心配置文件

1.

<!--我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可-->

<mappers>

<!--扫描使用注解的Mapper类-->

<mapper class="com.lagou.mapper.UserMapper"></mapper>

</mappers>

 

2.

<!--或者指定扫描包含映射关系的接口所在的包也可以-->

<mappers>

<!--扫描使用注解的Mapper类所在的包-->

<package name="com.lagou.mapper"></package>

</mappers>

 

 

 

3.3 使用注解实现复杂映射开发

之前我们在映射文件中通过配置 <resultMap>、<association>、<collection> 来实现复杂关系映

射。

使用注解开发后,我们可以使用 @Results、@Result,@One、@Many 注解组合完成复杂关系的配置。

 

3.4 一对一查询

3.4.1 介绍

需求:查询一个订单,与此同时查询出该订单所属的用户

一对一查询语句

SELECT * FROM orders;

SELECT * FROM `user` WHERE id = #{订单的uid};

 

3.4.2 代码实现

aOrderMapper接口

public interface OrderMapper {

@Select("SELECT * FROM orders")

@Results({

@Result(id = true, column = "id", property = "id"),

@Result(column = "ordertime", property = "ordertime"),

@Result(column = "money", property = "money"),

@Result(property = "user", javaType = User.class,

column = "uid", one = @One(select =

"com.lagou.mapper.UserMapper.findById", fetchType = FetchType.EAGER))

})

public List<Order> findAllWithUser();

}

 

bUserMapper接口

public interface UserMapper {

@Select("SELECT * FROM `user` WHERE id = #{id}")

public User findById(Integer id);

}

c)测试代码

@Test

public void testOrderWithUser() throws Exception {

OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);

List<Order> list = orderMapper.findAllWithUser();

for (Order order : list) {

System.out.println(order);

}

}

 

3.5 一对多查询

 

3.5.1 介绍

需求:查询一个用户,与此同时查询出该用户具有的订单

 

一对多查询语句

SELECT * FROM `user`;

SELECT * FROM orders where uid = #{用户id};

 

3.5.2 代码实现

aUserMapper接口

public interface UserMapper {

@Select("SELECT * FROM `user`")

@Results({

@Result(id = true, column = "id", property = "id"),

@Result(column = "brithday", property = "brithday"),

@Result(column = "sex", property = "sex"),

@Result(column = "address", property = "address"),

@Result(property = "orderList", javaType = List.class,

column = "id" ,

many = @Many(select = "com.lagou.mapper.OrderMapper.findByUid"))

})

public List<User> findAllWithOrder();

}

 

 

bOrderMapper接口

public interface OrderMapper {

@Select("SELECT * FROM orders WHERE uid = #{uid}")

public List<Order> findByUid(Integer uid);

}

 

c)测试代码

@Test

public void testUserWithOrder() throws Exception {

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

List<User> list = userMapper.findAllWithOrder();

for (User user : list) {

System.out.println(user);

}

}

 

3.6 多对多查询

3.6.1 介绍

需求:查询所有用户,同时查询出该用户的所有角色

多对多查询语句

SELECT * FROM `user`;

SELECT * FROM role r INNER JOIN user_role ur ON r.`id` = ur.`rid`

WHERE ur.`uid` = #{用户id};

 

3.6.2 代码实现

aUserMapper接口

public interface UserMapper {

@Select("SELECT * FROM `user`")

@Results({

@Result(id = true, column = "id", property = "id"),

@Result(column = "brithday", property = "brithday"),

@Result(column = "sex", property = "sex"),

@Result(column = "address", property = "address"),

@Result(property = "roleList", javaType = List.class,

column = "id" ,

many = @Many(select = "com.lagou.mapper.RoleMapper.findByUid"))

})

public List<User> findAllWithRole();

}

 

bRoleMapper接口

public interface RoleMapper {

@Select("SELECT * FROM role r INNER JOIN user_role ur ON r.`id` = ur.`rid`

WHERE ur.`uid` = #{uid}")

public List<Role> findByUid(Integer uid);

}

c)测试代码

@Test

public void testUserWithRole() throws Exception {

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

List<User> list = userMapper.findAllWithRole();

for (User user : list) {

System.out.println(user);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Forrest Gump plus

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

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

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

打赏作者

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

抵扣说明:

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

余额充值