六、Mybatis注解开发

1.MyBatis的常用注解

注解开发越来越流行, Mybatis也可以使用注解开发方式,这样就可以减少编写Mapper映射文件。
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装

2.MyBatis的注解增删改查

mapper:

package com.cookie.mapper;

import com.cookie.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface UserMapper {
    List<User> findAll();

    List<User> findAllUserAndRole();

    //添加用户
    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    void addUser(User user);
    //更新用户
    @Update("update user set username = #{username} where id=#{id}")
    void updateUser(User user);

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

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

}

    <mappers>
        <!--扫描使用注解的类-->
        <mapper class="com.cookie.mapper.UserMapper">
        </mapper>
    </mappers>

测试:

package com.cookie.test;

import com.cookie.mapper.OrderMapper;
import com.cookie.mapper.UserMapper;
import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {

    private UserMapper userMapper;

    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void addUser(){
        User user = new User();
        user.setId(3);
        user.setUsername("12");
        user.setPassword("34");
        user.setBirthday(new Date());
        userMapper.addUser(user);
    }

    @Test
    public void selectUser(){
        List<User> users = userMapper.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void deleteUser(){
        userMapper.deleteUser(3);
    }

    @Test
    public void updateUser(){
        User user = new User();
        user.setId(1);
        user.setUsername("hahaha");
        userMapper.updateUser(user);
    }
}

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

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

4.一对一查询

package com.cookie.mapper;

import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface OrderMapper {

    @Select("select * from orders")
    @Results({
            @Result(id = true,property = "id",column = "id"),
            @Result(property = "orderTime",column = "orderTime"),
            @Result(property = "total",column = "total"),
            @Result(property = "user",column = "uid",javaType = User.class,
            one = @One(select = "com.cookie.mapper.UserMapper.findUserById"))
    })
    List<Order> findAllOrders();

}

package com.cookie.mapper;

import com.cookie.pojo.Order;
import com.cookie.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

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

}

    @Test
    public void findAllOrders(){
        List<Order> allOrders = orderMapper.findAllOrders();
        for (Order allOrder : allOrders) {
            System.out.println(allOrder);
        }
    }

5.一对多查询

sql:

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

mapper:

public interface UserMapper {

    @Select("select * from user")
    @Results({
            @Result(id = true,property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "password",column = "password"),
            @Result(property = "birthday",column = "birthday"),
            @Result(property = "orderList",column = "id",javaType = List.class,
                    many = @Many(select = "com.cookie.mapper.OrderMapper.findOrderByUid"))
    })
    List<User> findAllUserAndOrder();
}
public interface OrderMapper {
    @Select("select * from orders where uid = #{uid}")
    List<Order> findOrderByUid(Integer uid);

}

    @Test
    public void findAllUserAndOrder(){
        List<User> allUserAndOrder = userMapper.findAllUserAndOrder();
        for (User user : allUserAndOrder) {
            System.out.println(user);
        }
    }

6.多对多查询

sql:

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

mapper:

public interface UserMapper {


    @Select("select * from user")
    @Results({
            @Result(id = true,property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "password",column = "password"),
            @Result(property = "birthday",column = "birthday"),
            @Result(property = "roleList",column = "id",javaType = List.class,
                    many = @Many(select = "com.cookie.mapper.RoleMapper.findById"))
    })
    List<User> findAllUserAndRoles();



}


package com.cookie.mapper;

import com.cookie.pojo.Role;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface RoleMapper {

    @Select("select * from sys_role r,sys_user_role ur where r.id = ur.roleid and ur.userid=#{uid}")
    List<Role> findById(Integer uid);

}
    @Test
    public void findAllUserAndRoles(){
        List<User> allUserAndRoles = userMapper.findAllUserAndRoles();
        for (User allUserAndRole : allUserAndRoles) {
            System.out.println(allUserAndRole);
        }
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值