Mybatis的学习

Mybatis与Jpa

当下市场上Mybatis仍是主流,而Jpa是未来的趋势,二者的区别主要在于Mybatis可以自己编写SQL,对于性能的优化等会更加方便,更加的底层。而Jpa则是贯彻了“约定大于配置”的理念,对于方法名有严格的要求,可以非常方便快捷的执行SQL。

Mybatis注解的使用

我们若是要通过Mybatis执行SQL就需要按照它的规范来,首先定义实体类,它将映射数据库中的实体,以Category为例来讲讲其用法:

import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * po(persistent object) 持久层对象
 * pojo(plian ordinary java object) 普通的java对象
 */
public class Category {

    private Integer id;

    private Integer parentId;

    private String name;

    private Integer status;

    private Integer sortOrder;

    private Date createTime;

    private Date updateTime;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getSortOrder() {
        return sortOrder;
    }

    public void setSortOrder(Integer sortOrder) {
        this.sortOrder = sortOrder;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "Category{" +
                "id=" + id +
                ", parentId=" + parentId +
                ", name='" + name + '\'' +
                ", status=" + status +
                ", sortOrder=" + sortOrder +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}

该实例对应于数据库中的在这里插入图片描述
之中。若是要实现通过Id来查询的功能,具体代码如下;

package com.imooc.mall.dao;

import com.imooc.mall.pojo.Category;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

@Mapper
public interface CategoryMapper {
    @Select("select * from mall_category where id = #{id}")
    Category findById(@Param("id")Integer id);
}

这段代码的解读:
@Mapper就是Mabatis的注解,其主要功能有三个:

  1. 表明将该dao交给spring管理
  2. 可以不用再去编写xml文件了
  3. 可以根据mapper自动生成一个注解类;

注意

上述Category和mall_Category的字段并不对应,所以我们得出的结果中parentId和createTime以及updateTime都为null,这时候只要在yml配置中加上在这里插入图片描述
就行了,问题就完美解决了;

用@MapperScan扫描代替@Mapper

上文中已经说明了用@Mapper的功能,但是如果每个dao下的接口都加一个@Mapper太麻烦了,这时候可以在启动类中加一个注解@MapperScan(basePackages = “com.xx.xx.xx”)来代替,就自动实现了扫描的功能。

Mybatis的xml写法

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.imooc.mall.dao.CategoryMapper">
    <select id="queryById" resultType="com.imooc.mall.pojo.Category">
        select * from mall_category where id = #{id}
    </select>
</mapper>

将在与xml文件同名的mapper接口中id即为接口名,resultType为返回值,而select标签中指定的就是要执行的sql;注意,需要在mybatis的配置中指定映射的路径,否则会报错,配置如下:

mybatis:
  configuration:
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapper/*.xml

mapper-locations指定的classpath就是路径,未来的话注解开发应该会成为趋势,但目前许多公司的主流就是用xml文件,所以还是要会的。

Mybatis三剑客

Mybatis三剑客是mybatis开发的时候非常有用的

generator

generator主要的作用就是通过配置来生成与数据库对应的实体类以及dao接口等,generator的使用方式是先导入插件

<plugin>
     <groupId>org.mybatis.generator</groupId>
     <artifactId>mybatis-generator-maven-plugin</artifactId>
     <version>1.3.7</version>
</plugin>

然后就可以使用了,但是千万要注意插件的版本,因为不同的版本会有不同的用法。

然而光这样运行还是会报错:
执行命令:mvn mybatis-generator:generate
报的错误:configfile /Users/maoyizheng/mallProject/mall/src/main/resources/generatorConfig.xml does not exist 即是缺少配置文件generatorConfig.xml ,这时候就在resources中引入该文件即可。
具体配置看文档:点击这里

当配置完成之后在pom文件中加入以下代码可以在执行相同文件时去覆盖原先的文件:

<plugin>
     <groupId>org.mybatis.generator</groupId>
     <artifactId>mybatis-generator-maven-plugin</artifactId>
     <version>1.3.7</version>

     <configuration>
         <overwrite>true</overwrite>
     </configuration>
</plugin>

MyBatis-plugin的下载

只要在IDEA中下载插件就行了,下完重启就可使用,直接可以通过接口找到对应的xml方法了。

mybatis-PageHelper

用于分页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值