mybatis多表联合和嵌套查询

1、Mybatis实现多表联查询方式

  1. 业务装配对两个表写单独的sql语句,在业务(service)把查询结果进行联合。
  2. 使用Auto Mapping特性,在实现两个表联合查询时通过别名完成自动映射。
  3. 使用Mybatis的标签进行实现

2、多表查询时类中包含另一个对象的分类

  • 单个对象
  • 集合对象

二、resultMap标签

1、写在 select * from yg_info where y_id=#{id};

3TeacherMapper.xml文件中提供一个查询部门对象的sql:





    

综合

mybatis多表联合和嵌套查询_第1张图片

 2 多表联查之 链表查询

只需要写一条SQL,在StudentMapper.xml中完成,对于学生属性直接用进行装配(将字段别名与属性匹配),对于Teacher对象直接用标签来映射,其中 property还是代表在类中该对象属性的名称   另外要设置javaType表示返回值类型,其它的还一次对应匹配即可
 





 
    
        
        
        
        
            
            
        
    

    

3一对多查询 (了解)

1.从一的一方查询多的一方。

比如: 班级--1---n-->学生.

数据库代码如下


CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
);
INSERT INTO class(c_name) VALUES('QY145');
INSERT INTO class(c_name) VALUES('QY143');
INSERT INTO class(c_name) VALUES('QY142');
CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);
INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_C', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_D', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_E', 3);
INSERT INTO student(s_name, class_id) VALUES('xs_F', 3);

例子:根据班级id查询班级信息以及该班级下所有的学生信息。


    
    
    
    
          
          
          
    


 4 动态Sql

MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似.MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。

mybatis多表联合和嵌套查询_第2张图片

5.1 if和where 一起使用

   

  测试类

@Test
    public void  test(){
        BookDao mapper = session.getMapper(BookDao.class);
        Map map = new HashMap();
        map.put("bookname","西游记");
        map.put("bookauthor","吴承恩");
        List idMap = mapper.findIdMap(map);
        System.out.println(idMap);
    }

5.2 [choose when otherwise] 和where


测试

 @Test
    public void  test1() {
        BookDao mapper = session.getMapper(BookDao.class);
        HashMap map = new HashMap();
        //map.put("bookname","红高粱");
        map.put("bookauthor","老舍");
        List idMap1 = mapper.findIdMap1(map);
        System.out.println(idMap1);
    }

3)set标签。修改部分字段。



    update book_info
    
         
              book_name=#{name},
         
         
             book_author=#{author},
         
         
              book_pub=#{pub},
         
         
              book_price=#{price},
         
    
    where book_id=#{id}

测试

@Test
    public void update(){
        BookDao mapper = session.getMapper(BookDao.class);
        Book book = new Book();
        book.setName("嘻游记");
        book.setPrice(56);
        book.setId(1001);
        int update = mapper.update(book);
        session.commit();

    }

5.4foreach 批量删除。

    
    
        delete from book_info where book_id in
        
             #{id}
        
    

测试

@Test
    public void delete(){
        BookDao mapper = session.getMapper(BookDao.class);
        int [] arr ={1001,1002,1003};
        int delete = mapper.delete(arr);
        session.commit();
    }

mybatis多表联合和嵌套查询_第3张图片

 6模糊查询

mybatis多表联合和嵌套查询_第4张图片

补充一下

 mybatis多表联合和嵌套查询_第5张图片

使用sql片段

 7 分页插件--PageHelper

(1)引入分页PageHelper依赖



    com.github.pagehelper
    pagehelper
    5.1.11

(2) 加入拦截

mybatis多表联合和嵌套查询_第6张图片

mybatis多表联合和嵌套查询_第7张图片

测试

@Test
public void testUpdate3(){
    EmpDao empDao = session.getMapper(EmpDao.class);
    //使用分页功能 request.getParamter("page")  request.getParamter("pageSize")
    PageHelper.startPage(2,10);
    List list = empDao.findAll3("王");
     //可以把查询的结果封装到PageInfo类中 包含你想要的任何信息
        PageInfo pageInfo=new PageInfo(list);
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("当前页码的数据:"+pageInfo.getList());
}

 8 介绍几个好用的插件

(1)mybatis插件----dao和映射文件之间的关联

mybatis多表联合和嵌套查询_第8张图片

(2) easycode插件----代码单表的crud----entity dao 映射。

mybatis多表联合和嵌套查询_第9张图片

mybatis多表联合和嵌套查询_第10张图片

 mybatis多表联合和嵌套查询_第11张图片

.作用域(Scope)和生命周期

mybatis多表联合和嵌套查询_第12张图片

你可能感兴趣的:(eureka,云原生,cloud,native)