栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习日志day56(2021-09-26)(1、高级查询 2、分页插件 3、Mybatis使用注解 )

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习日志day56(2021-09-26)(1、高级查询 2、分页插件 3、Mybatis使用注解 )

学习内容:学习MyBatis框架(Day56)

1、高级查询
2、分页插件
3、Mybatis使用注解


1、高级查询

(1)Mybatis作为一个ORM框架,也对SQL的高级查询做了支持,即Mybatis下的一对一、一对多、多对多的查询。

一对一查询:查询订单,并且查询出下单人的信息,同时要把两个信息放在一块去。

方法1.需要扩展Order对象,来映射结果集。(把两个信息放到一块去)创建第三个实体类,即订单信息也有用户信息。
OrderUser.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderUser extends Order{
    private String name;

    @Override
    public String toString() {
        return "OrderUser{" +
                "userId=" + getUserId() +
                ",name=" + name +
                ",orderId=" + getId() +
                ",order_number=" + getOrderNumber() +
                '}';
    }
}

mapper接口

public interface UserMapper {
    List queryOrderUserByOrderNumber(@Param("orderNumber") String orderNumber);
}

mapper.xml文件


    SELECT
        *
    FROM
        tb_order
            LEFT JOIN tb_user ON tb_order.user_id = tb_user.id
    WHERe
        tb_order.order_number = #{orderNumber}

测试

@Test
public void queryOrderUserByOrderNumber(){
    List orderUsers = userMapper.queryOrderUserByOrderNumber("20140921002");
    orderUsers.forEach(System.out::println);
}

方法2.面向对象的思想,在Order对象中添加User对象。
Order.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Order {
    private Integer id;
    private Long userId;
    private String orderNumber;

    private User user;
}

mapper接口

Order queryOrderWithUserByOrderNumber(@Param("orderNumber") String orderNumber);

mapper.xml,使用association元素完成子对象的映射


    
    
    
        
        
        
    


    SELECT
        *,d.id AS detail_id
    FROM
        tb_order AS o
            LEFT JOIN tb_user AS u ON o.user_id = u.id
            LEFT JOIN tb_orderdetail AS d ON d.order_id = o.id
    WHERe
        o.order_number = #{orderNumber};

测试

@Test
public void queryOrderWithUserAndOrderDetailByOrderNumber(){
    Order order = userMapper.queryOrderWithUserAndOrderDetailByOrderNumber("20140921002");
    System.out.println("order = " + order);
}

(3)一对多+一对一查询:查询订单,查询出下单人信息并且查询出订单详情中的商品数据。
在OrderDetail实体类中添加Item对象

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class OrderDetail {
    private int id;
    private int orderId;
    private int itemId;
    private double totalPrice;
    private int status;

    private Item item;
}

mapper接口,在collection元素中再添加一个association元素


    
    
        
        
    
    
        
        
        
            
        
    


    select * from tb_user

测试,在执行查询时设置分页参数

@Test
public void queryAllUsers(){
    //执行查询时设置分页参数,startPage(第一个参数:第几页,第二个参数:显示多少条数据);
    PageHelper.startPage(2,3);
    List users = userMapper.queryAllUsers();
    users.forEach(System.out::println);//具体信息
    System.out.println("users = " + users);//分页的所有信息

    //PageInfo获取分页的信息
    PageInfo pageInfo = new PageInfo(users);
    System.out.println("当前页:" + pageInfo.getPageNum());
    System.out.println("当前页显示多少条数据:" + pageInfo.getPageSize());
    System.out.println("分页的所有信息:" + pageInfo.getList());//pageInfo.getList()与users集合相同
    System.out.println("总条数:" + pageInfo.getTotal());
    System.out.println("总页数:" + pageInfo.getPages());
    System.out.println("具体信息:");
    pageInfo.getList().forEach(System.out::println);
}
3、Mybatis使用注解

(1)如果使用注解,mapper.xml映射文件可以不用创建
mapper接口

public interface ItemMapper {
    @Select("select * from tb_item")
    List queryAllItem();

    @Insert("insert into tb_item(id,item_name,item_price,item_detail) values(null,#{itemName},#{itemPrice},#{itemDetail})")
    void addItem(Item item);

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

    @Update("update tb_item set item_name = #{itemName}, item_price = #{itemPrice}, item_detail = #{itemDetail} where id = #{id}")
    void updateItem(Item item);
}

测试

public class ItemMapperTest {
    private SqlSession sqlSession;
    private ItemMapper itemMapper;

    @Before
    public void setUp() throws Exception {
        //获取mybatis配置文件
        String resource = "mybatis-config.xml";
        //将配置文件读取为输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //打开sqlSession,通过sqlSession进行增删改查
        sqlSession = sqlSessionFactory.openSession();
        //userMapper = new UserMapperImpl(sqlSession);
        //使用动态代理得到实现类对象
        itemMapper = sqlSession.getMapper(ItemMapper.class);
    }

    @Test
    public void queryAllItem() {
        List items = itemMapper.queryAllItem();
        items.forEach(System.out::println);
    }

    @Test
    public void addItem(){
        Item item = new Item(3,"iPhone X",8888,"新产品");
        itemMapper.addItem(item);
        sqlSession.commit();
    }

    @Test
    public void delete(){
        itemMapper.delete(3);
        sqlSession.commit();
    }

    @Test
    public void updateItem(){
        Item item = new Item(4,"华为",1888,"支持国产");
        itemMapper.updateItem(item);
        sqlSession.commit();
    }
}

(2)一些其它的注解




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号