当前位置:   article > 正文

6. MyBatis注解开发_private usermapper usermapper;什么意思

private usermapper usermapper;什么意思

目录

1.1 MyBatis的常用注解

1.2 MyBatis的增删改查

1.3 MyBatis的注解实现复杂映射开发

1.4 一对一查询

1.5 一对多查询

1.6 多对多查询


1.1 MyBatis的常用注解

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper 映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。

  1. @Insert:实现新增
  2. @Update:实现更新
  3. @Delete:实现删除
  4. @Select:实现查询
  5. @Result:实现结果集封装
  6. @Results:可以与@Result 一起使用,封装多个结果集
  7. @One:实现一对一结果集封装
  8. @Many:实现一对多结果集封装

1.2 MyBatis的增删改查

  1. public interface UserMapper {
  2. @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
  3. public void save(User user);
  4. @Update("update user set username=#{username},password=#{password} where id=#{id}")
  5. public void update(User user);
  6. @Delete("delete from user where id=#{id}")
  7. public void delete(int id);
  8. @Select("select * from user where id=#{id}")
  9. public User findById(int id);
  10. @Select("select * from user")
  11. public List<User> findAll();
  12. }

我们完成简单的user表的增删改查的操作:

  1. private UserMapper userMapper;
  2. @Before
  3. public void before() throws IOException {
  4. InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  5. SqlSessionFactory sqlSessionFactory = new
  6. SqlSessionFactoryBuilder().build(resourceAsStream);
  7. SqlSession sqlSession = sqlSessionFactory.openSession(true);
  8. userMapper = sqlSession.getMapper(UserMapper.class);
  9. }
  1. @Test
  2. public void testAdd() {
  3. User user = new User();
  4. user.setUsername("测试数据");
  5. user.setPassword("123");
  6. user.setBirthday(new Date());
  7. userMapper.add(user);
  8. }
  9. @Test
  10. public void testUpdate() throws IOException {
  11. User user = new User();
  12. user.setId(16);
  13. user.setUsername("测试数据修改");
  14. user.setPassword("abc");
  15. user.setBirthday(new Date());
  16. userMapper.update(user);
  17. }
  1. @Test
  2. public void testDelete() throws IOException {
  3. userMapper.delete(16);
  4. }
  5. @Test
  6. public void testFindById() throws IOException {
  7. User user = userMapper.findById(1);
  8. System.out.println(user);
  9. }
  10. @Test
  11. public void testFindAll() throws IOException {
  12. List<User> all = userMapper.findAll();
  13. for(User user : all){
  14. System.out.println(user);
  15. }
  16. }

修改MyBatis的核心配置文件,我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可

  1. <mappers>
  2. <!--扫描使用注解的类-->
  3. <mapper class="com.itheima.mapper.UserMapper"></mapper>
  4. </mappers>

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

  1. <mappers>
  2. <!--扫描使用注解的类所在的包-->
  3. <package name="com.itheima.mapper"></package>
  4. </mappers>

1.3 MyBatis的注解实现复杂映射开发

  1. 实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>来实现,
  2. 使用注解开发后,我们可以使用@Results注解,
  3. @Result注解,@One注解,@Many注解组合完成复杂关系的配置

 

1.4 一对一查询

1. 一对一查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的

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

2. 一对一查询的语句

对应的sql语句:

select * from orders;

select * from user where id=查询出订单的uid; 

查询的结果如下:

3. 创建Order和User实体

 4. 创建OrderMapper接口

  1. public interface OrderMapper {
  2. List<Order> findAll();
  3. }

 5. 使用注解配置Mapper

6. 测试结果

  1. @Test
  2. public void testSelectOrderAndUser() {
  3. List<Order> all = orderMapper.findAll();
  4. for(Order order : all){
  5. System.out.println(order);
  6. }
  7. }

1.5 一对多查询

1. 一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对多查询的

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

 2. 一对多查询的语句

对应的sql语句:

select * from user;

select * from orders where uid=查询出用户的id;

查询的结果如下:

3. 修改User实体

 4. 创建UserMapper接口

List<User> findAllUserAndOrder();

 5. 使用注解配置Mapper

6. 测试结果

  1. List<User> all = userMapper.findAllUserAndOrder();
  2. for(User user : all){
  3. System.out.println(user.getUsername());
  4. List<Order> orderList = user.getOrderList();
  5. for(Order order : orderList){
  6. System.out.println(order);
  7. }
  8. System.out.println("-----------------------------");
  9. }

1.6 多对多查询

1. 多对多查询的模型

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用 多对多查询的

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

2. 多对多查询的语句

对应的sql语句:

select * from user;

select * from role r,user_role ur where r.id=ur.role_id and ur.user_id=用户的id 

查询的结果如下:

 3. 创建Role实体,修改User实体

4. 添加UserMapper接口方法

List<User> findAllUserAndRole();

 5. 使用注解配置Mapper

6. 测试结果

  1. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  2. List<User> all = mapper.findAllUserAndRole();
  3. for(User user : all){
  4. System.out.println(user.getUsername());
  5. List<Role> roleList = user.getRoleList();
  6. for(Role role : roleList){
  7. System.out.println(role);
  8. }
  9. System.out.println("----------------------------------");
  10. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/67660
推荐阅读
相关标签
  

闽ICP备14008679号