MyBatis常用注解
* @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>
*
/*
查询用户信息
当只有一个参数时,value可省略
*/
@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);
/*
根据id修改用户信息
*/
@Update("update user set username = #{username}, birthday = #{birthday},sex = #{sex}, address = #{address} where id = #{id}")
public void update(User user);
/*
删除用户信息
*/
@Delete("deleter from user where id = #{id}")
public void delete(Integer id);
测试
public class TestAnno {
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession;
//该注释表示在@Test注解的方法前执行
@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = sqlSessionFactory.openSession();
}
@After
public void after(){
sqlSession.commit();
sqlSession.close();
}
@Test
public void testFindAll() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.findAll();
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testSave(){
User user = new User();
user.setUsername("晓燕");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("贵州");
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.save(user);
}
}
使用注解实现复杂映射开发
一对一
- 需求:查询一个订单,与此同时查询出该订单所属的用户
SELECT * FROM orders;
SELECT * FROM `user` WHERE id = #{订单的uid};
1 OrderMapper接口
/*
查询一个订单,与此同时查询出该订单所属的用户
*/
@Select("select * from orders")
@Results({
//@Result注解代替了id标签result标签
@Result(property = "id", column = "id", id = true), //id = true 表示该注解 相当于xml格式中的id标签
@Result(property = "ordertime", column = "ordertime"),
@Result(property = "total", column = "total"),
@Result(property = "uid", column = "uid"),
//@One注解代替了association标签
/* javaType = User.class 用注解方式
* javaType="com.zhoufengbin.domain.User" 用映射文件的形式
* 上述同种标签不同的形式
* fetchType = FetchType.EAGER 设置局部立即加载,优先级高于全局延迟加载
* */
@Result(property = "user", javaType = User.class,
one = @One(select = "com.zhoufengbin.mapper.UserMapper.findByUid",
fetchType = FetchType.EAGER), column = "uid")
})
public List<Orders> findAllOrder();
2 UserMapper接口,待关联的查询
/*
根据uid查询用户信息
*/
@Select("select * from user where id = #{uid}")
public User findByUid(Integer uid);
一对多
- 需求:查询一个用户,与此同时查询出该用户具有的订单
SELECT * FROM `user`;
SELECT * FROM orders where uid = #{用户id};
1. UserMapper接口
/*
需求:查询一个用户,与此同时查询出该用户具有的订单
*/
@Select("select * from user")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "username", column = "username"),
@Result(property = "birthday", column = "birthday"),
@Result(property = "sex", column = "sex"),
@Result(property = "address", column = "address"),
// @Many注解替代了collection标签
@Result(property = "ordersList", javaType = List.class, many = @Many(select = "com.zhoufengbin.mapper.OrderMapper.findOrderById"), column = "id")
})
public List<User> findAllUser();
2.OrderMapper接口,待关联的查询
/*
根据用户id查询订单信息
*/
@Select("select * from orders where uid = #{id}")
public List<Orders> findOrderById(Integer id);