Mybatis注解开发

1. 常用注解

  • @Insert 添加
  • @Select 查询
  • @Update 修改
  • @Delete 删除
  • @Result 封装结果集
  • @Results 封装多个结果集,可以与@Result一起使用
  • @One 实现一对一结果集封装
  • @Many 实现一对多结果集封装

2. 增删改查

  1. 先打开mapper包扫描
<mappers>
	<!--扫描使用注解的类所在的包-->
	<package name="com.example.mapper"></package>
</mappers>
  1. 代码实现
public interface UserMapper {
    
    @Insert("insert into user values (#{id}, #{username})")
    Integer insert(User user);


    @Delete("delete from user where id = #{id}")
    Integer delete(Integer id);
    
    @Update("update user set username = #{username} where id = #{id}")
    Integer update(User user);

    @Select("select * from user")
    List<User> findAll();
    
}

3.测试代码

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);
        this.userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @Test
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> all = mapper.findAll();
        all.forEach(user -> {
            System.out.println(user);
        });
    }

    @Test
    public void test2() throws IOException {
        User user = new User();
        user.setId(5);
        user.setUsername("555");

        this.userMapper.insert(user);
    }
    @Test
    public void test3() throws IOException {
        this.userMapper.delete(5);
    }
    @Test
    public void test4() throws IOException {
        User user = new User();
        user.setId(5);
        user.setUsername("555");

        this.userMapper.update(user);
    }
}

3. 复杂映射

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

1.一对一
  • 对应的sql语句
select * from orders;
select * from user where id=查询出订单的uid;
  • 对应的查询结果

  • 创建User和Order实体

public class User {

	private int id;
	private String username;

}

public class Order {

	private int id; 
	private Date ordertime; 
	private double total;

	//代表当前订单从属于哪一个客户
	private User user;
}
  • OrderMapper
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.example.mapper.UserMapper.findById"))
	})
	List<Order> findAll();
}
  • UserMapper
public interface UserMapper {

	@Select("select * from user where id=#{id}") 
	User findById(int id);
}
  • 测试代码
@Test
public void testSelectOrderAndUser() { 
	List<Order> all = orderMapper.findAll(); 
	for(Order order : all){
		System.out.println(order);
	}
}
2.一对多