MyBatis数据封装(注解开发)
学完xml以后呢,老师无情的来了一句,xml用的不大多了哦,大家现在更喜欢用注解开发拉,嘿嘿,我真**了,xml打吐了都快。
不过注解我也更喜欢注解拉,让我们重新开始吧!!!
- 咳咳,搞注解前哈,我们还是要配置一下的哈
- 以前我们配置那个核心文件处理xml的关系的时候用的是
<!--加载映射文件-->
<mappers>
<mapper resource="junmu/mapper/UserMapper.xml"/>
<mapper resource="junmu/mapper/OrderMapper.xml"/>
</mappers>
- 这样采用映射文件,然后在映射文件里面编辑sql语句,然后执行的哈,
- 然后今天开始,我们就要使用注解的方式来进行编写了
- 然后我们就需要重新搞个配置了
<!--加载映射关系-->
<mappers>
<!--指定包下面的接口-->
<package name="junmu.mapper"/>
</mappers>
- 首先呢,我们就不是加载映射文件了,我们是要搞映射关系了
- 然后注解直接在映射接口里面编写就行了,
- 所以,我们只需要指定映射接口的地址就行了
基本SQL语句注入
@Select("select * from user")
public List<User> findAll() throws Exception;
@Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
public void save(User user);
@Update("update user set username=#{username},password=#{password} where id=#{id}")
public void update(User user);
@Delete("delete from user where id = #{id}")
public void delete(int id);
@Select("select * from user where id=#{id}")
public User findById(int id);
- 像这种,是不是比那个xml省事多了,啊哈哈哈哈
- 除了基本的SQL语句数据注入,还有我们的多表查询,我们使用注解也是可以实现的哈
一对一查询
@Select("select * from orders")
@Results({
@Result(column = "oid" , property = "id"),
@Result(column = "ordertime" , property = "ordertime"),
@Result(column = "total" , property = "total"),
@Result(
property = "user",
column = "uid",
javaType = User.class,
one = @One(select = "junmu.mapper.UserMapper.findById")
)
})
public List<Order> findAll();
- 比如这种情况哈,查询所有的订单,然后每个订单对应着一个用户,用户和订单就是一个一对一的关系
- 我们可以使用Results + (Result + One) 注解的形式来进行注入
- 注意的是,One注解里面的方法是我们已经在外面的接口实现了的,我们只需要在调用一次就行了。
一对多查询
@Select("select * from user")
@Results({
@Result(id=true,column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(
property = "orderList",
column = "id",
javaType = List.class,
many = @Many(select = "junmu.mapper.OrderMapper.findByUid")
)
})
public List<User> findUserAndOrderAll();
- 比如,我们需要查询所有个用户,并且将每个用户的订单都保存下来
- 注意哈,这个和上面那个区别还是蛮大的,用户是一个,订单可是很多个
- 我们这里就需要使用到 Results + (Result + One) 的注解了
- many里面的findByUid就需要自己先在OrderMapper映射接口里面先实现哈
// 根据Uid查询订单
@Select("select * from orders where uid=#{uid}")
public List<Order> findByUid(int uid);
多对多查询
@Select("select * from user")
@Results({
@Result(id=true,column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(
column = "id",
property = "roleList",
javaType = List.class,
many = @Many(select = "junmu.mapper.RoleMapper.findByUid")
)
})
public List<User> findUserAndRoleAll();
- 咳咳,场景重现哈,这里是很多个用户,然后每个用户又有多重角色
- 这里面有三张表哈, 用户表 、 角色表 、 用户角色关系表
- 然后我们先把用户查出来,然后通过用户的id和用户角色关系表进行查询
- 注意哈,这里的findByUid是RoleMapper映射文件里面的哈,
@Select("select * from user_role ur,role r where ur.roleid=r.id and ur.userid=#{uid}")
public List<Role> findByUid(int uid);
- 这样两个表关联一下,然后一起查,就能得到一个用户对应的所有角色了,
- 然后把这个list传回去
- 我们这里就需要使用到 Results + (Result + One) 的注解哈
- 无了无了,该睡觉了,害。