MyBatis注解

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值