Mybatis的查询方式

分页查询:(数据库数据是从0开始计数)
Limit:page size ,每页多少项
Offset:从0开始,从哪一行开始

两种方法:
第一种:手写SQL进行分页,将offset和limit直接写入SQL中
接口中的方法:

List findPage(@Param("offset") int offset, @Param("limit") int limit);
Xml文档中的配置:
<select id="findPage" resultType="Customer">
        SELECT * FROM CUSTOMER ORDER BY ID OFFSET #{offset} LIMIT #{limit}
select>

第二种:通过mybatis自己的支持,结合jdbc驱动进行分页,不需要在SQL语句中写limit和offset(返回类型相同,参数类型不一样了)
Mybatis提供了Rowbounds类用于实现分页查询,该类提供了两个构造方法,一个为空构造函数,一个需要两个参数,同样是offset和limit,相当于将第一种方法SQL语句中的两个参数封装到了Mybatis中。

接口中的方法:

List<Customer> findPage2(RowBounds rowBounds);

Xml文档中的配置:

<select id="findPage2" resultType="Customer">
        SELECT * FROM CUSTOMER ORDER BY ID 
select>

Main函数中的实现方法:

System.out.println("findPage2(6,5):" + mapper.findPage2(new RowBounds(6, 5)));

多表查询:(手写映射-resultMap,为了区分各表字段名的不同—Mybatis的强大之处)
写resultMap的时候要采用步进的方式,检查出错的地方
对一时的写法:



"Blog" id="blogResult">
        <id property="id" column="blog_id" />
        <result property="title" column="blog_title" />
        property="author" javaType="Author">
            <id property="id" column="author_id" />
            <result property="name" column="author_name" />
        

对多时的写法:



    "Blog" id="blogWithPostResult">
        <id property="id" column="blog_id" />
        <result property="title" column="blog_title" />
        property="author" javaType="Author">
            <id property="id" column="author_id" />
            <result property="name" column="author_name" />
        
        property="post" ofType="Post">
            <id property="id" column="post_id"/>
            <result property="subject" column="post_subject"/>
        

association:对一时使用的关键字
collection:对多时使用的关键字
JavaType:明确指定java类型
ofType:使用collection时使用,指定元素类型,符合英语语法规则

内联接:(等值连接 )inner join (典型的连接运算,使用像=或<>之类的比较运算符)包括相等连接和自然连接

外联接:
1.left join/left outer join 包括左表所有行,若是左表某行在右表没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值
2.right join/right outer join 返回右表所有的行,若是右表的某行在左表中没有匹配行,则将左表返回空值
3.full join/full outer join 完整外部链接返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值;如果表之间有匹配行,则整个结果集行包含基表的数据值

交叉联接:返回左表中所有的行,左表中的灭一行与右表中的所有行组合,也称作笛卡尔积

+表示可以为空

【代码优化结果映射】
将相同的提取出来,使用resultType关键字,一定要完全相同,例如之前两个查询可以简化

<resultMap ty
        pe="Blog" id="blogResult">
        <id property="id" column="blog_id" />
        <result property="title" column="blog_title" />
        <association property="author" resultMap="authorResult">
        association>
resultMap>

对多时的写法:

"Blog" id="blogWithPostResult">
            <id property="id" column="blog_id" />
        <result property="title" column="blog_title" />
        property="author" resultMap="authorResult">
        
        property="post" ofType="Post">
            <id property="id" column="post_id" />
            <result property="subject" column="post_subject" />
        

都有相同的一个author,可以提取出来:

"Author" id="authorResult">
        <id property="id" column="author_id" />
        <result property="name" column="author_name" />

你可能感兴趣的:(Java,mybatis)