注解开发查询,分页查询
一.mybatis注解
Mybatis
除了支持在
xml
中书写
SQL,
也支持使用注解的形式编写
SQL;
MyBatis可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件。
(1)MyBatis常用注解:
* @Insert:实现新增,代替了<insert></insert>
* @Update:实现更新,代替了<update></update>* @Delete:实现删除,代替了<delete></delete>
* @Select:实现查询,代替了<select></select>
* @Result:实现结果集封装,代替了<result></result>
* @Results:可以与@Result 一起使用,封装多个结果集,代替了<resultMap></resultMap>
* @One:实现一对一结果集封装,代替了<association></association>
* @Many:实现一对多结果集封装,代替了<collection></collection>
(1)MyBatis注解:单表操作
基于user表通过注解实现,增删改查:
UserMapper接口:
public interface UserMapper {
// 查询所有
@Select("select id as uid,username as uname,birthday as bir , sex as gender, address as addr from user")
@Results({ // resultMap标签手动映射
@Result(column = "uid",property = "id",id=true), // result标签映射封装
@Result(column = "uname",property = "username"),
@Result(column = "bir",property = "birthday"),
@Result(column = "gender",property = "sex"),
@Result(column = "addr",property = "address")
})
public List<User> findAll();
// id查询
@Select("select * from user where id = #{id}")
public User findById(Integer id);
// 新增
@Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")
public void save(User user);
// 修改(动态sql还是推荐使用xml)
@Update("update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}")
public void update(User user);
// 删除
@Delete("delete from user where id = #{id}")
public void delete(Integer id);
}
测试:
public class UserMapperTest extends BaseMapperTest {
// 单表测试
@Test
public void test01() throws Exception {
// 获取代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询所有
List<User> list = userMapper.findAll();
System.out.println(list);
// 查询一个
/* User user = userMapper.findById(41);
System.out.println(user);*/
// 新增
/* User user = new User();
user.setUsername("张红");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("汉族....");
userMapper.save(user);*/
// 更新
/* User user = new User();
user.setId(53);
user.setUsername("黎明");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("北京....");
userMapper.update(user);*/
// 删除
// userMapper.delete(53);
}
}
(2)MyBatis注解:多表操作:
注解多表操作 是基于 嵌套查询来实现的
- 一对一查询:
查询一个订单,与此同时查询出该订单的所属用户
一对一查询语句:
SELECT * FROM orders where id = #{id};
SELECT * FROM `user` WHERE id = #{订单的uid};
OrderMapper接口
public interface OrderMapper {
// 一对一嵌套注解
@Select("select * from orders where id = #{id}")
@Results({
@Result(column = "id",property = "id",id=true),
@Result(column = "ordertime",property = "ordertime"),
@Result(column = "money",property = "money"),
@Result(property = "user",javaType = User.class,column = "uid",one =@One(select =