IDEA+EasyCode реализует генерацию кода (учебник для дураков)
IDEA+EasyCode реализует генерацию кода (учебник для дураков)

IDEA+EasyCode реализует генерацию кода

Введение в простой код

EasyCode — это плагин для генерации кода, разработанный на основе IntelliJ IDEA и поддерживающий настройку любого шаблона (Java, html, js, xml). Пока код, связанный с базой данных, можно генерировать с помощью пользовательских шаблонов. Поддерживает настройку связи между типом базы данных и типом Java. Поддерживает генерацию кода для нескольких таблиц одновременно. Каждая таблица содержит независимую информацию о конфигурации. Полностью настраиваемый, правила устанавливаются вами.

Этапы строительства

Шаг 1. Откройте IntelliJ IDEA и создайте новый проект maven без проверки скелета.
Настройте идентификатор группы, артефакт и версию проекта (индивидуально)

Нажмите Далее

Выберите каталог для хранения проекта
Шаг 2. Загрузите и установите плагин EasyCode.

file->settings->plugins Поиск Легко Code

После поиска нажмите Установить Я установил это здесь После завершения установки вам будет предложено перезапустить IDEA. Как определить, прошла ли установка успешно file->settings->Other settings Посмотрите, есть ли Easy Закодируйте эту опцию

Шаг 3. Представьте шаблон Easy Code (можно настроить в соответствии с личными обстоятельствами или использовать шаблон по умолчанию).

file->settings->Other settings->Template Setting

Шаг 4. Создайте базу данных и таблицу данных.
Шаг 5. Настройте источник данных (необходимо указать имя базы данных и создать таблицу данных)

НажмитеIDEAправая сторонаDatbase->Нажмитевышеизплюсик->выбиратьData Source.->Mysql

Настроить источник данных

Примечание. Метод подключения должен быть методом подключения mysql8, в противном случае соединение может завершиться неудачно. jdbc:mysql://localhost:3306/table?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false

Соединение выполнено успешно, как показано на рисунке.
Создайте соответствующие пакеты и сохраните сгенерированные данные (в качестве примера возьмем проект Springboot).
Представление зависимостей pom.xml, связанных с Springboot
Язык кода:javascript
копировать
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>

Нужно использовать лаунчер mybatis, поэтому тоже цитирую вместе.

Откройте плагин Easy Code и выберите Pojo, Mapper и сервис, который нужно сгенерировать.

Щелкните правой кнопкой мыши по имени таблицы->Easy Code->Generate Code

Модуль: текущий модуль проекта пакет: место, где сгенерированный код хранит пакет. Шаблон: сгенерированный шаблон

Установите флажок «Все», чтобы сгенерировать все, установите флажок «Отключить подсказки», чтобы предотвратить появление большого количества сообщений с подсказками, и нажмите «ОК».

pojo*(сущность): Код Brand.java:

Язык кода:javascript
копировать
package com.dj.entity;

import java.io.Serializable;

/**
 * (Бренд)Класс сущности
 *
 * @author joker_dj
 * @since 2020-03-24 11:18:22
 */
public class Brand implements Serializable {
    private static final long serialVersionUID = 689051521458334271L;
    /**
    * ID
    */
    private Integer bid;
    /**
    * торговая марка
    */
    private String bname;
    /**
    * дата
    */
    private String ctime;

    
    public Integer getBid() {
        return bid;
    }

    public void setBid(Integer bid) {
        this.bid = bid;
    }
    
    public String getBname() {
        return bname;
    }

    public void setBname(String bname) {
        this.bname = bname;
    }
    
    public String getCtime() {
        return ctime;
    }

    public void setCtime(String ctime) {
        this.ctime = ctime;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "bid=" + bid +
                "bname=" + bname +
                "ctime=" + ctime +
                 '}';      
    }
}

интерфейс службы: Код BrandService.java выглядит следующим образом:

Язык кода:javascript
копировать
package com.dj.service;

import com.dj.entity.Brand;
import java.util.List;

/**
 * @InterfaceName BrandService
 * @Description (Бренд)Интерфейс обслуживания столов
 * @author joker_dj
 * @date 2020-03-24 11:18:22
 * @Version 1.0
 **/
public interface BrandService {

    /**
     * @Description Добавить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return Это успешно?
     */
    boolean insert(Brand brand);

    /**
     * @Description Удалить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Это успешно?
     */
    boolean deleteById(Integer bid);

    /**
     * @Description Запрос данных об одном элементе
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Пример объекта
     */
    Brand queryById(Integer bid);

    /**
     * @Description Искать все данные
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    List<Brand> queryAll();

    /**
     * @Description Сущность как данные запроса фильтра
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return список объектов
     */
    List<Brand> queryAll(Brand brand);

    /**
     * @Description Чтобы изменить данные, измените любой атрибут, который не является пустым.
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return Это успешно?
     */
    boolean update(Brand brand);

}

Класс реализации serviceImpl: код BrandServiceImpl.java выглядит следующим образом:

Язык кода:javascript
копировать
package com.dj.service.impl;

import com.dj.entity.Brand;
import com.dj.dao.BrandDao;
import com.dj.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

 /**
 * @ClassName BrandServiceImpl
 * @Description (Бренд)Класс реализации сервиса таблиц
 * @author joker_dj
 * @date 2020-03-24 11:18:22
 * @Version 1.0
 **/
@Service("brandService")
public class BrandServiceImpl  implements BrandService {

    @Autowired
    protected BrandDao brandDao;

    /**
     * @Description Добавить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return Это успешно?
     */
    @Override
    public boolean insert(Brand brand) {
        if(brandDao.insert(brand) == 1){
            return true;
        }
        return false;
    }

    /**
     * @Description Удалить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Это успешно?
     */
    @Override
    public boolean deleteById(Integer bid) {
        if(brandDao.deleteById(bid) == 1){
            return true;
        }
        return false;
    }

    /**
     * @Description Запрос данных об одном элементе
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Пример объекта
     */
    @Override
    public Brand queryById(Integer bid) {
        return brandDao.queryById(bid);
    }

    /**
     * @Description Искать все данные
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    @Override
    public List<Brand> queryAll() {
        return brandDao.queryAll();
    }

    /**
     * @Description Сущность как данные запроса фильтра
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return список объектов
     */
    @Override
    public List<Brand> queryAll(Brand brand) {
        return brandDao.queryAll(brand);
    }

    /**
     * @Description Чтобы изменить данные, измените любой атрибут, который не является пустым.
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return Это успешно?
     */
    @Override
    public boolean update(Brand brand) {
        if(brandDao.update(brand) == 1){
            return true;
        }
        return false;
    }

}

слой dao: код BrandDao.java выглядит следующим образом

Язык кода:javascript
копировать
package com.dj.dao;

import com.dj.entity.Brand;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

 /**
 * @InterfaceName BrandDao
 * @Description (Бренд) Уровень доступа к библиотеке данных таблицы
 * @author joker_dj
 * @date 2020-03-24 11:18:22
 * @Version 1.0
 **/
@Mapper
public interface BrandDao {

    /**
     * @Description Добавить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return Количество затронутых строк
     */
    int insert(Brand brand);
    
    /**
     * @Description Удалить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Количество затронутых строк
     */
    int deleteById(Integer bid);

    /**
     * @Description Запрос данных об одном элементе
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param bid первичный ключ
     * @return Пример объекта
     */
    Brand queryById(Integer bid);

    /**
     * @Description Искать все данные
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    List<Brand> queryAll();

    /**
     * @Description Сущность как данные запроса фильтра
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param brand Пример объекта
     * @return список объектов
     */
    List<Brand> queryAll(Brand brand);

    /**
     * @Description Изменить бренд
     * @author joker_dj
     * @date 2020-03-24 11:18:22
     * @param в соответствии сbrandизпервичный ключ Исправлятьданные
     * @return Количество затронутых строк
     */
    int update(Brand brand);

}

Код Mapper.xml выглядит следующим образом:

Язык кода:javascript
копировать
<?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.dj.dao.BrandDao">

    <!--brandиз Набор результатов сопоставления-->
    <resultMap type="com.dj.entity.Brand" id="BrandMap">
        <result property="bid" column="bid" jdbcType="INTEGER"/>
        <result property="bname" column="bname" jdbcType="VARCHAR"/>
        <result property="ctime" column="ctime" jdbcType="VARCHAR"/>
    </resultMap>
    
    <!--Все поля-->
    <sql id="allColumn"> bid, bname, ctime </sql>
    
    <!--Добавить заявлениеиз Список полей-->
    <sql id="insertColumn">
        <if test="bname != null and bname != ''">
                bname,
        </if>
        <if test="ctime != null and ctime != ''">
                ctime,
        </if>
    </sql>
    
    <!--Добавить заявлениеизсписок значений-->
        <sql id="insertValue">
        <if test="bname != null and bname != ''">
                #{bname},
        </if>
        <if test="ctime != null and ctime != ''">
                #{ctime},
        </if>
    </sql>
    
    <!--универсальная параBrandКаждый атрибутизценитьизнепустое суждение-->
    <sql id="commonsValue">
        <if test="bname != null and bname != ''">
                bname = #{bname},
        </if>
        <if test="ctime != null and ctime != ''">
                ctime = #{ctime},
        </if>
    </sql>
    
    <!--Новыйbrand:Какой столбец добавляется, если поле не пусто?данные,Вернуться к приращениюпервичный ключ-->
    <insert id="insert" keyProperty="bid" useGeneratedKeys="true">
        insert into brand
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <include refid="insertColumn"/>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <include refid="insertValue"/>
        </trim>
    </insert>
   
    <!--удалитьbrand:проходитьпервичный ключ-->
    <delete id="deleteById">
        delete from brand
        <where>
            bid = #{bid}
        </where>
    </delete>
    
    <!--Запросить одинbrand-->
    <select id="queryById" resultMap="BrandMap">
        select
        <include refid="allColumn"></include>
        from brand
        <where>
            bid = #{bid}
        </where>
    </select>

    <!--Искать всеbrand-->
    <select id="queryAllByLimit" resultMap="BrandMap">
        select
        <include refid="allColumn"></include>
        from brand
    </select>

    <!--проходить Сущность как фильтрующий запрос-->
    <select id="queryAll" resultMap="BrandMap">
        select
          <include refid="allColumn"></include>
        from brand
        <trim prefix="where" prefixOverrides="and" suffixOverrides=",">
            <include refid="commonsValue"></include>
        </trim>
    </select>

    <!--проходитьпервичный ключ Исправлятьданные-->
    <update id="update">
        update brand
        <set>
            <include refid="commonsValue"></include>
        </set>
        <where>
            bid = #{bid}
        </where>
    </update>

</mapper>
Шаг 6: Бегите и звоните
Примечание. Мой файл Mapper.xml хранится в каталоге ресурсов и не будет сканироваться, поэтому настройте его в файле pom.xml, чтобы можно было сканировать файл Mapper.xml.
Язык кода:javascript
копировать
<!--Статический выпуск ресурсов-->
  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

Полный файл pom.xml выглядит следующим образом:

Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
    </parent>
    <groupId>com.easycode</groupId>
    <artifactId>easycode</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>


    <!--Статический выпуск ресурсов-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
Создайте файл глобальной конфигурации Springboot Application.properties в каталоге ресурсов.

Конфигурационный файл выглядит следующим образом:

Язык кода:javascript
копировать
##Настройте информацию о драйвере данных  (ключ фиксированный)
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql:///brand
spring.datasource.username = root
spring.datasource.password =

#номер порта tomcat
server.port=8081

##Присвойте псевдоним классу сущности mybatis  typeAliasesPackage
mybatis.type-aliases-package=com.dj.entity
## mybatis : место хранения картографа
mybatis.mapper-locations:classpath*:mybatis/mapper/*.xml
Создайте контроллер для вызова методов для реализации бизнеса

controller:

Язык кода:javascript
копировать
package com.dj.controller;

import com.dj.entity.Brand;
import com.dj.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class webController {
    @Autowired
    BrandService service;

    @RequestMapping("/showAll")
    public List<Brand> show(){
        List<Brand> brands = service.queryAll();
        System.out.println(brands);
        return brands;
    }
}
Запустите, чтобы просмотреть результаты

Ввод браузера localhost: 8081/showAll

Шаблон предоставлен

entity.java
Язык кода:javascript
копировать
##Введение определения макроса
$!define

##Использовать определение макроса для установки обратного вызова (сохранить местоположение и суффикс файла)
#save("/entity", ".java")

##Использовать определение макроса для установки суффикса пакета
#setPackageSuffix("entity")

##Используйте глобальные переменные для реализации импорта пакетов по умолчанию
$!autoImport
import java.io.Serializable;

##Используйте определения макросов для реализации информации аннотации класса
#tableComment("Класс сущности")
public class $!{tableInfo.name} implements Serializable {
    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
    #if(${column.comment})/**
    * ${column.comment}
    */#end

    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end

#foreach($column in $tableInfo.fullColumn)
##Используйте определение макроса для реализации методов get и set
#getSetMethod($column)
#end

    @Override
    public String toString() {
        return "$!{tableInfo.name}{" +
    #foreach($column in $tableInfo.fullColumn)
            "$!{column.name}=" + $!{column.name} +
    #end
             '}';      
    }
}
dao.java
Язык кода:javascript
копировать
##Определим начальные переменные
#set($tableName = $tool.append($tableInfo.name, "Dao"))
##Установить обратный вызов
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))

##получатьпервичный ключ
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

 /**
 * @InterfaceName $!{tableName}
 * @Description $!{tableInfo.comment}($!{tableInfo.name}) уровень доступа к библиотеке данных таблицы
 * @author $!author
 * @date $!time.currTime()
 * @Version 1.0
 **/
@Mapper
public interface $!{tableName} {

    /**
     * @Description Добавьте $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return Количество затронутых строк
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
    
    /**
     * @Description Удалить $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Количество затронутых строк
     */
    int deleteById($!pk.shortType $!pk.name);

    /**
     * @Description Запрос данных об одном элементе
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Пример объекта
     */
    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);

    /**
     * @Description Искать все данные
     * @author $!author
     * @date $!time.currTime()
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    List<$!{tableInfo.name}> queryAll();

    /**
     * @Description Сущность как данные запроса фильтра
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return список объектов
     */
    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * @Description Измените $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param в соответствии с$!tool.firstLowerCase($!{tableInfo.name})изпервичный ключ Исправлятьданные
     * @return Количество затронутых строк
     */
    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

}
service.java
Язык кода:javascript
копировать
##Определим начальные переменные
#set($tableName = $tool.append($tableInfo.name, "Service"))
##Установить обратный вызов
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

##получатьпервичный ключ
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import java.util.List;

/**
 * @InterfaceName $!{tableName}
 * @Description $!{tableInfo.comment}($!{tableInfo.name}) интерфейс службы таблиц
 * @author $!author
 * @date $!time.currTime()
 * @Version 1.0
 **/
public interface $!{tableName} {

    /**
     * @Description Добавьте $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return Это успешно?
     */
    boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * @Description Удалить $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Это успешно?
     */
    boolean deleteById($!pk.shortType $!pk.name);

    /**
     * @Description Запрос данных об одном элементе
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Пример объекта
     */
    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);

    /**
     * @Description Искать все данные
     * @author $!author
     * @date $!time.currTime()
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    List<$!{tableInfo.name}> queryAll();

    /**
     * @Description Сущность как данные запроса фильтра
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return список объектов
     */
    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * @Description Чтобы изменить данные, измените любой атрибут, который не является пустым.
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return Это успешно?
     */
    boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

}
serviceImpl.java
Язык кода:javascript
копировать
##Определим начальные переменные
#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
##Установить обратный вызов
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))

##получатьпервичный ключ
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

 /**
 * @ClassName $!{tableName}
 * @Description $!{tableInfo.comment}($!{tableInfo.name}) класс реализации табличного сервиса
 * @author $!author
 * @date $!time.currTime()
 * @Version 1.0
 **/
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} extends BaseService implements $!{tableInfo.name}Service {

    @Autowired
    protected $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;

    /**
     * @Description Добавьте $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return Это успешно?
     */
    @Override
    public boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name})) == 1){
            return true;
        }
        return false;
    }

    /**
     * @Description Удалить $!{tableInfo.name}
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Это успешно?
     */
    @Override
    public boolean deleteById($!pk.shortType $!pk.name) {
        if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name) == 1){
            return true;
        }
        return false;
    }

    /**
     * @Description Запрос данных об одном элементе
     * @author $!author
     * @date $!time.currTime()
     * @param $!pk.name первичный ключ
     * @return Пример объекта
     */
    @Override
    public $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryById($!pk.name);
    }

    /**
     * @Description Искать все данные
     * @author $!author
     * @date $!time.currTime()
     * Пагинация реализована с помощью плагина MyBatis.
     * @return список объектов
     */
    @Override
    public List<$!{tableInfo.name}> queryAll() {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAll();
    }

    /**
     * @Description Сущность как данные запроса фильтра
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return список объектов
     */
    @Override
    public List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAll($!tool.firstLowerCase($!{tableInfo.name}));
    }

    /**
     * @Description Чтобы изменить данные, измените любой атрибут, который не является пустым.
     * @author $!author
     * @date $!time.currTime()
     * @param $!tool.firstLowerCase($!{tableInfo.name}) Пример объекта
     * @return Это успешно?
     */
    @Override
    public boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        if($!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name})) == 1){
            return true;
        }
        return false;
    }

}
mapper.xml
Язык кода:javascript
копировать
##Представляем поддержку mybatis
$!mybatisSupport

##Установите имя сохранения и место сохранения
$!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mybatis/mapper"))

##получатьпервичный ключ
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

<?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="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">

    <!--$!{tableInfo.obj.name}из Набор результатов сопоставления-->
    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map">
#foreach($column in $tableInfo.fullColumn)
        <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
    </resultMap>
    
    <!--Все поля-->
    <sql id="allColumn"> #allSqlColumn() </sql>
    
    <!--Добавить заявлениеиз Список полей-->
    <sql id="insertColumn">
#foreach($column in $tableInfo.otherColumn)
        <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                $!column.obj.name,
        </if>
#end
    </sql>
    
    <!--Добавить заявлениеизсписок значений-->
        <sql id="insertValue">
#foreach($column in $tableInfo.otherColumn)
        <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                #{$!column.name},
        </if>
#end
    </sql>
    
    <!--универсальная пара$!{tableInfo.name}Каждый атрибутизценитьизнепустое суждение-->
    <sql id="commonsValue">
#foreach($column in $tableInfo.otherColumn)
        <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                $!column.obj.name = #{$!column.name},
        </if>
#end
    </sql>
    
    <!--Новый$!{tableInfo.obj.name}:Какой столбец добавляется, если поле не пусто?данные,Вернуться к приращениюпервичный ключ-->
    <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert into $!{tableInfo.obj.name}
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <include refid="insertColumn"/>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <include refid="insertValue"/>
        </trim>
    </insert>
   
    <!--удалить$!{tableInfo.obj.name}:проходитьпервичный ключ-->
    <delete id="deleteById">
        delete from $!{tableInfo.obj.name}
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </delete>
    
    <!--Запросить один$!{tableInfo.obj.name}-->
    <select id="queryById" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="allColumn"></include>
        from $!tableInfo.obj.name
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </select>

    <!--Искать все$!{tableInfo.obj.name}-->
    <select id="queryAllByLimit" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="allColumn"></include>
        from $!tableInfo.obj.name
    </select>

    <!--проходить Сущность как фильтрующий запрос-->
    <select id="queryAll" resultMap="$!{tableInfo.name}Map">
        select
          <include refid="allColumn"></include>
        from $!tableInfo.obj.name
        <trim prefix="where" prefixOverrides="and" suffixOverrides=",">
            <include refid="commonsValue"></include>
        </trim>
    </select>

    <!--проходитьпервичный ключ Исправлятьданные-->
    <update id="update">
        update $!{tableInfo.obj.name}
        <set>
            <include refid="commonsValue"></include>
        </set>
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </update>

</mapper>

Учебное пособие окончено. Согласно приведенным выше пошаговым инструкциям, проблем возникнуть не должно. Если у вас возникли проблемы, которые невозможно решить, оставьте сообщение в области комментариев.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose