Mybatis注解开发

前言:注解开发给我们带来的便利不言而喻,Mybatis的注解开发可以让我们不用去编写xml文件,直接在接口上使用注解的形式就可以进行开发,使用起来十分便捷

本次我们将直接以代码举例的形式进行讲解,不明白的地方记得看注释

先看一下我们本次的项目结构(pom.xml文件和sqlMapConfig.xml文件不会配置的请看我上一篇博客):

首先我们建好数据库(如下图)

user是用户表,orders是订单表

用户表示例:其中id为主键

orders表示例:其中id为主键,uid为外键即user的id

搭建好数据库后,创建实体类

(具体的get,set,toString,和构造方法在这里我就不多加赘述了) 

//User实体类
public class User {
    private int id;
    private String username;
    private String password;
    private List<Order> orderList;//当前用户所拥有的订单
}
//orders实体类
public class Order {
    private int id;
    private Date ordertime;
    private int total;
    private User user;//表示订单属于那个用户
}

然后我们编写相应的Mapper接口

OrderMapper:

package com.lsc.mapper;

import com.lsc.domain.Order;
import com.lsc.domain.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface OrderMapper {
//查询订单以及所属的用户信息,一对一查询!!!一个订单只能由一个用户所拥有
    @Select("select * from orders")
    @Results({
//            column是数据库字段名,property是要封装的属性名
            @Result(column = "id",property = "id"),
            @Result(column = "ordertime",property = "ordertime"),
            @Result(column = "total",property = "total"),
            @Result(
                    property = "user",//要封装的属性名
                    column = "uid",//根据uid去查询user表
                    javaType = User.class,//要封装的实体类型
                    //select代表查询哪个接口的方法获得数据,我们这里通过UserMapper.findUserById方法根据uid进行查询
                    one = @One(select = "com.lsc.mapper.UserMapper.findUserById")
            )
    })
    public List<Order> findAllOrder();

    @Select("select * from Orders where uid=#{uid}")
    public List<Order> findOrderById(int uid);
}

UserMapper:

package com.lsc.mapper;

import com.lsc.domain.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    @Select("select * from user")
    public List<User> findAll();

    @Select("select * from user where id=#{id}")
    public List<User> findUserById(int id);

    @Insert("insert into user values(#{id},#{username},#{password})")
    public void addUser(User user);

    @Update("update user set username=#{username},password=#{password} where id=#{id}")
    public void updateUser(User user);

    @Delete("delete from user where id=#{id}")
    public void deleteUser(int id);

//    一对多查询,一个用户有多个订单
    @Select("select * from user")
    @Results({// id =true代表是主键id   column是数据库字段名,property是要封装的属性名
            @Result(id =true,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(
                    column = "id",//根据id去查询order表
                    property = "orderList",//要封装的属性名
                    javaType = List.class,//要封装的实体类型
                    //select代表查询哪个接口的方法获得数据,我们这里通过OrderMapper.findOrderById方法根据user的id进行查询
                    many = @Many(select = "com.lsc.mapper.OrderMapper.findOrderById"))

    })
    public List<User> findUserAllOrders();

//    多对多查询,和上面差不多,只不过多一个中间表,这里就不加赘述了
}

注意:千万不要忘记在sqlMapConfig.xml文件中配置加载映射关系哦

<!--加载映射关系-->
    <mappers>
        <package name="com.lsc.mapper"/>
    </mappers>

最后我们对用注解编写的sql代码进行测试

UserTest:

package com.lsc.test;

import com.github.pagehelper.PageHelper;
import com.lsc.domain.User;
import com.lsc.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import sun.util.BuddhistCalendar;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserTest {
    private UserMapper mapper;

    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession(true);
        mapper = sqlSession.getMapper(UserMapper.class);
    }
    @Test
    public void testFindAll(){
        List<User> all = mapper.findAll();
        for (User user : all) {
            System.out.println(user);
        }
    }
    @Test
    public void testFindUserById(){
        List<User> all = mapper.findUserById(1);
        for (User user : all) {
            System.out.println(user);
        }
    }

    @Test
    public void testaddUser(){
        User user=new User();
        user.setUsername("anno");
        user.setPassword("qwer");
        mapper.addUser(user);
    }

    @Test
    public void testUpdateUser(){
        User user=new User();
        user.setId(6);
        user.setUsername("ooo");
        user.setPassword("ppp");
        mapper.updateUser(user);
    }
    @Test
    public void testDelete(){
       mapper.deleteUser(7);
    }

    @Test
    public void testUserAllOrders(){
        List<User> userAllOrders = mapper.findUserAllOrders();
        for (User userAllOrder : userAllOrders) {
            System.out.println(userAllOrder);
        }
    }
}

OrderTest:

package com.lsc.test;

import com.lsc.domain.Order;
import com.lsc.mapper.OrderMapper;
import com.lsc.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class OrderTest {
    private OrderMapper mapper;
    @Before
    public void before() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession(true);
        mapper = sqlSession.getMapper(OrderMapper.class);

    }

    @Test
    public void testFindAllOrder(){
        List<Order> Orders = mapper.findAllOrder();
        System.out.println(Orders);
    }
}

至此,Mybatis注解开发就结束了🎉🎉!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值