Mybatis注解开发
1. 常用注解
- @Insert 添加
- @Select 查询
- @Update 修改
- @Delete 删除
- @Result 封装结果集
- @Results 封装多个结果集,可以与@Result一起使用
- @One 实现一对一结果集封装
- @Many 实现一对多结果集封装
2. 增删改查
- 先打开mapper包扫描
<mappers>
<!--扫描使用注解的类所在的包-->
<package name="com.example.mapper"></package>
</mappers>
- 代码实现
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);
}
}