我的项目结构布局

一、 maven配置

  • 父pom

    <lombok.version>1.16.18</lombok.version>
    <mysql.version>8.0.20</mysql.version>
    <tk.mybatis.version>2.1.5</tk.mybatis.version>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>
    
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>${tk.mybatis.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
    </dependency>
    
  • 子pom

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    

二、 安装插件MybatisCodeHelper

链接: https://pan.baidu.com/s/1qGIRm0aoXVJ5wMHRfIrtig 提取码: 7uh7

三、 yml配置

mybatis:
  type-aliases-package: com.skyyemperor.oauth2.server.domain
  mapper-locations: classpath:mapper/*.xml

四、 使用插件生成

4.1 新建MyMapper接口

特别注意,该接口不能被扫描到,否则会出错

在tk.mybatis.mapper包下新建

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T>, IdsMapper<T> {
}

4.2 连接数据库并根据表生成

接下来还有

  • service interface

    com.skyyemperor.oauth2.server.service
    
  • service

    com.skyyemperor.oauth2.server.service.impl
    
  • tkmapper

    tk.mybatis.mapper.MyMapper
    

OK,生成sucess!!

五、 mapper接口用法

1.BaseMapper

     /**
	 * 保存一个实体,null属性也会保存
	 * 
	 * @param record
	 * @return
	 */
	int insert(T record);
 
	/**
	 * 根据实体属性作为条件进行删除,查询条件使用等号
	 */
	int delete(T record);

	/**
	 * 根据主键更新属性,包括为null的值
	 */
	int updateByPrimaryKey(T record);
 
	/**
	 * 根据主键更新属性不为null的值
	 */
	int updateByPrimaryKeySelective(T record);
 
	/**
	 * 根据实体中的属性值进行查询,查询条件使用等号
	 */
	List<T> select(T record);
 
	/**
	 * 查询全部结果,select(null)方法能达到同样的效果
	 */
	List<T> selectAll();
 
	/**
	 * 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
	 */
	T selectOne(T record);
 
	/**
	 * 根据实体中的属性查询总数,查询条件使用等号
	 */
	int selectCount(T record);

2.MySqlMapper

	/**
	 * 批量插入,支持批量插入的数据库可以使用,例如MySQL,H2等,另外该接口限制实体包含`id`属性并且必须为自增列
	 */
	public int insertList(List<T> recordList);
 
	/**
	 * 插入数据,限制为实体包含`id`属性并且必须为自增列,实体配置的主键策略无效
	 */
	public int insertUseGeneratedKeys(T record);

3.IdsMapper

     /**
	 * 根据主键@Id进行查询,多个Id以逗号,分割
	 * @param id
	 * @return
	 */
	List<T> selectByIds(String ids);
	
	/**
	 * 根据主键@Id进行删除,多个Id以逗号,分割
	 * @param id
	 * @return
	 */
	int deleteByIds(String ids);

4.ExampleMapper

     /**
	 * 根据Example条件进行查询
	 */
	public List<T> selectByExample(Object example);
 
	/**
	 * 根据Example条件进行查询,若有多条数据则抛出异常
	 */
	public T selectOneByExample(Object example);
 
	/**
	 * 根据Example条件进行查询总数
	 */
	public int selectCountByExample(Object example);
 
	/**
	 * 根据Example条件删除数据,返回删除的条数
	 */
	public int deleteByExample(Object example);
 
	/**
	 * 根据Example条件更新实体`record`包含的全部属性,null值会被更新,返回更新的条数
	 */
	public int updateByExample(T record, Object example);
 
	/**
	 * 根据Example条件更新实体`record`包含的不是null的属性值,返回更新的条数
	 */
	public int updateByExampleSelective(T record, Object example);
  • 使用例子

    public TbUser getByUsername(String username) {
        Example example = new Example(TbUser.class);
        example.createCriteria().andEqualTo("username", username);
        return tbUserMapper.selectOneByExample(example);
    }
    

example.createCriteria()方法

传入的property为实体类中的属性名,非数据库字段名。

方法均具有AND 和 OR 两个不同版本

andEqualTo(String property, Object value)
orEqualTo(String property, Object value)

andGreaterThan(String property, Object value)
orGreaterThan(String property, Object value)

andLessThan(String property, Object value)

andLike(String property, Object value)

andIsNull(String property)

排序方法

example.orderBy("id").desc()
    
example.setOrderByClause("id DESC")

example.orderBy("id")

分页方法

public void getByPage(Integer page, Integer size) {
    Example example = new Example(TbContent.class);
    example.setOrderByClause("id DESC LIMIT" + page * size + "," + size);
    List<TbContent> contents = tbContentMapper.selectAll();
}

hhhhh