什么是MyBatis
MyBatis是一个开源的Java持久层框架,用于简化与关系型数据库的交互。它通过将SQL语句与Java代码进行分离,提供了一种优雅的方式来处理数据库操作。
MyBatis的核心思想是将SQL语句与Java方法进行映射,使得开发人员可以通过配置文件或注解来定义和管理SQL语句。这样做的好处是可以将SQL语句与Java代码解耦,降低了代码的维护成本,提高了代码的可读性和可维护性。
使用MyBatis,开发人员可以使用简单的XML配置或注解来描述数据库表和Java对象之间的映射关系,从而实现对象关系映射(ORM)。此外,MyBatis还提供了丰富的功能,如动态SQL、缓存、事务管理等,以满足各种复杂的数据库操作需求。
总的来说,MyBatis是一个轻量级、灵活且功能强大的Java持久层框架,它简化了数据库操作的编写和管理,并提供了丰富的特性和扩展点,使得开发人员可以更加高效地进行数据访问。
什么是MyBatis-Plus
MyBatis-Plus是一个基于MyBatis的轻量级、强大且功能丰富的持久层框架,它进一步简化了与关系型数据库的交互。它是在MyBatis的基础上进行扩展和增强的工具集,提供了更多便捷的开发功能和增强的查询能力。
MyBatis-Plus提供了一系列的增删改查操作的封装方法,使得开发人员可以通过简单的API调用完成常见的数据库操作,无需编写繁琐的SQL语句。它还提供了诸如分页查询、条件构造器、Lambda表达式查询等高级查询功能,极大地简化了复杂查询的编写过程。
除了常见的CRUD操作,MyBatis-Plus还提供了一些额外的功能,如自动生成代码、逻辑删除、乐观锁、多租户支持等,以进一步提升开发效率和代码质量。
总的来说,MyBatis-Plus是一个优秀的持久层框架,它在MyBatis的基础上提供了更多的便利功能和增强能力,使得开发人员可以更加方便、高效地进行数据库操作和查询。它的简洁性、易用性和功能丰富性使得它成为众多Java开发者的首选框架之一。
通过使用 MyBatis-Plus,开发者可以更加快速、高效地进行数据库操作,减少了繁琐的配置和编码工作。
但需要注意的是,MyBatis-Plus 并不是完全取代 MyBatis,而是在其基础上提供了更多的便利功能,因此在具体项目中的选择还需根据实际需求和团队技术偏好来决定。
案例测试MyBatis-Plus
项目创建:
创建SpringBoot项目(使用idea 的Spring Initializr 功能快速搭建一个SpringBoot项目)
可以在创建SpringBoot选择构建所需依赖:
常见的如:
Spring Boot Lombok :Java 的插件库实现对类的get set tostring 有无参数通过注解来简化代码
MySQL Driver:与 MySQL 数据库进行交互
Spring Web:提供了 Web 应用开发的相关功能
pom.xml导包:
当在快速搭建SpringBoot项目时没有或者忘记选择项目依赖时间,我们可以手动在pom.xml导入包。
比如这次的MyBatis-Plus 需要的包
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>MyBatis-Plus-11-30</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MyBatis-Plus-11-30</name>
<description>MyBatis-Plus-11-30</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!--mybatis-plus基础功能所需包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
<!--代码逆向工程 需要导入2个包 分别是mybatis-plus-generator 和 freemarker -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.mybatisplus1130.MyBatisPlus1130Application</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
配置文件:
# 应用服务 WEB 访问端口
server.port=8080
#实现对数据库的配置操作
spring.datasource.username=root
spring.datasource.password=000000
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/cs
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
##置了 Hibernate 方言 org.hibernate.dialect.MySQL8Dialect,以便与 MySQL 8+ 版本兼容
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
#配置mybatis-plus实现
#主要配置是控制台输出日志
#取消自带的驼峰命名,这个不取消会更改你数据库表字段名称比如zgl_cs 他会变更成zglCs
#这个配置指定了 MyBatis Mapper XML 文件的位置。classpath:/mapper/**.xml 表示在 classpath 下的 mapper 目录及其子目录中查找以 .xml 结尾的文件作为 Mapper XML 文件。Mapper XML 文件用于定义 SQL 语句和与之关联的方法。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: false
# 简述就是映射文件位置 resource 是默认位置
mapper-locations: classpath:/mapper/**.xml
这来的yml也是配置文件只是这是yml更适合我们看,都是一样的,如果配置文件有相同配置,最后是以.properties为准则
代码部分:
我们这里先简单的介绍MyBatis-Plus功能:
- 最简单的是无需编写繁琐的SQL语句实现对数据库的增删改查等操作。
1.1使用MyBatis-Plus的条件构造器(Wrapper)
1.2这个一样可以使用手写sql,且手写sql语句的两种方式。(注解、xml)
2.代码生成器
文件布局:
数据库部分:
代码部分:
创建类对象:bean目录下的Student类
package com.example.mybatisplus1130.bean;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/*get set toString 有无参数构造 使用的是快速创建SpringBoot时lombok依赖*/
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
//声明数据库名称
@TableName("student")
public class Student {
@TableId//声明数据库主键
private String stu_id;
private String stu_name;
private String stu_sex;
private String stu_age;
private String stu_addr;
/*如果定义的类和数据库定义的字段名称不一样我们可以使用MyBatis-Plus提供的@TableField注解来解决。*/
@TableField(value = "stu_pwd")
private String pwd;
}
如果我们创建的数据库属性再带_,但是系统默认会使用驼峰命名,这样你的MyBatis-Plus无sql语句就会报错,原因是系统会把你数据库表字段生成StuId这样的不是stu_id,所以我们可以取消驼峰命名或者数据库我们就按照驼峰命名创建属性。
取消驼峰命:
Mapper: StudentMapper
package com.example.mybatisplus1130.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus1130.bean.Student;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//MyBatis-Plus提供了一系列的增删改查操作的封装方法,使得开发人员可以通过简单的API调用完成常见的数据库操作,无需编写繁琐的SQL语句。
//使用:定义一个接口,继承BaseMapper<操作对象> , 在去启动项 声明@MapperScan(basePackages = "mapper的路径")
public interface StudentMapper extends BaseMapper<Student> {
/*要知道我们上面的就已经是一个MyBatis-Plus 其是一个接口继承了BaseMapper 已经具备了实现对Stidnet类的增删改成等继承的语句 */
/*sql的写法有两种,一种是直接使用注解写在mapper方法上,一种是写在xml文件中;*/
//1.注解方式
@Select("select * from student where stu_name=#{name}")
public List<Student> findAllByStu_name(String name);
/*
【注解的优点】
简洁易懂:相比于XML配置,注解的使用更加简洁直观,使代码更具可读性和可维护性。
易于调试:注解配置可以直接在Java类中编写,减少了在XML中查找和修改SQL的时间。
更好的性能:在执行大量的增删改操作时,注解配置的性能更高,因为没有XML解析的开销。
【注解的缺点】
不利于维护:将SQL和Java代码耦合在一起,使得代码难以维护和重构,特别是在涉及到较复杂SQL的情况下。
SQL可读性差:相比于在XML中编写SQL,注解中的SQL语句通常会更加冗长和难以读懂。
*/
//2.xml方式 xml注解默认在resources的mapper目录下
public List<Student> findAllByStu_name_ByXml(String name);
/*
【XML的优点】
易于维护:将SQL分离出Java代码,代码的维护性更高,特别是在需要修改SQL时。
SQL可读性好:在XML中编写SQL,可以使得SQL的格式更加清晰,可读性更强。
易于管理:XML配置文件可以全局管理,使得项目的结构更加清晰明了。
【XML的缺点】
繁琐:XML配置相对于注解,配置较为繁琐,需要更多的代码量。
性能问题:在执行大量操作时,XML的解析和读取会占用一定的时间,降低了系统的性能。
* */
}
配置文件声明和启动项声明:(我这里选择的是启动项声明)
这里解释一下为什么我们需要声明这个(mapper)配置:
在 MyBatis-Plus 中,使用 Mapper 接口来访问数据库。Mapper 接口是一个纯粹的 Java 接口,其中定义了一组数据库操作方法。通过在 Mapper 接口上添加注解和 XML 文件,可以实现对数据库表的增删改查操作。
在 Spring Boot 中,需要将 Mapper 接口注册为 Spring Bean,才能在其他地方进行注入和使用。为了实现自动化的 Mapper 注册,可以使用 MyBatis-Plus 提供的 @MapperScan 注解。@MapperScan 注解用于指定 Mapper 接口所在的包路径,它会自动扫描该包及其子包下的所有 Mapper 接口,并将它们注册为 Spring Bean。在启动项中声明 @MapperScan 注解后,Spring Boot 应用程序会自动扫描 Mapper 接口并将其注册为 Bean,从而使我们可以在其他地方直接注入 Mapper 接口,而无需手动注册 Bean。
因此,在启动项中声明 @MapperScan(basePackages = "mapper文件路径") 是必要的,以确保 Mapper 接口能够被正确地扫描和注册为 Spring Bean,使其能够在整个应用程序中正常使用。
总结:
MyBatis mapper接口定义的对数据库操作的语句都是单纯的java代码接口,定义了操作数据库的方法,我们可以通过MyBatis-Plus定义接口继承BaseMapper或者使用注解或者xml实现对数据库的操作,但是这个前提是要把这个接口通过MyBatis-Plus 提供的 @MapperScan 注解自动扫描 Mapper 接口并将其注册为 Bean,从而使我们可以在其他地方直接注入 Mapper 接口,而无需手动注册 Bean。
在 Spring 框架中,"Bean" 是指由 Spring 容器管理的对象实例。当你将一个类声明为 Bean 后,Spring 容器就会负责实例化、组装和管理这个对象,你可以在应用程序的其他部分通过依赖注入来引用和使用这些 Bean。
<?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.example.mybatisplus1130.mapper.StudentMapper">
<select id="findAllByStu_name_ByXml" parameterType="java.lang.String" resultType="com.example.mybatisplus1130.bean.Student">
select *
from student
where stu_name = #{name,jdbcType=VARCHAR}
/*,jdbcType=VARCHAR 可写可不写,主要是告诉数据库类型 省去类型检索时间,默认类型转换器需要检索会花费时间 */
</select>
</mapper>
Service:
StudnetService主要实习的是对数据库的操作
package com.example.mybatisplus1130.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mybatisplus1130.bean.Student;
import com.example.mybatisplus1130.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentService {
@Autowired(required = false)
StudentMapper studentMappere;
/*MyBatis-Plus自带的第一特征无需sql语句操作数据库*/
public List<Student> findAllStudent(){
return studentMappere.selectList(null);
}
/*MyBatis-Plus的条件构造器(Wrapper)来构建查询条件*/
public List<Student> findAllStudent_Wrapper(String name,String sex){
QueryWrapper<Student> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("stu_sex",sex)
.like("stu_name",name);
return studentMappere.selectList(queryWrapper);
}
/*注解方式写sql语句操作数据库*/
public List<Student> findAllByStu_name(String name){
return studentMappere.findAllByStu_name(name);
}
/*xml方式写sql语句操作数据库*/
public List<Student> findAllByStu_name_ByXml(String name){
return studentMappere.findAllByStu_name_ByXml(name);
}
}
DmscService主要实习的是代码生成器的操作
代码生成器:
package com.example.mybatisplus1130.service;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.stereotype.Service;
import java.sql.Types;
import java.util.Collections;
@Service
public class DmscService {
/*主要实现的是代码生成器
* 代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,
* 可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。*/
public String text(){
String url="jdbc:mysql://127.0.0.1:3306/cs";
String username="root";
String password="000000";
/*FastAutoGenerator 需要导入mybatis-plus-generator包*/
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> {
builder.author("zgl") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir("D://main//java"); // 指定输出目录
})
.dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
int typeCode = metaInfo.getJdbcType().TYPE_CODE;
if (typeCode == Types.SMALLINT) {
// 自定义类型转换 将数据库中的SMALLINT类型转换成了Java的INTEGER类型。
return DbColumnType.INTEGER;
}
return typeRegistry.getColumnType(metaInfo);
}))
.packageConfig(builder -> {
builder.parent("com.txc.mybatisplus.samples.generator") // 设置父包名 5个文件夹,因为使用了 .
.moduleName("system") // 设置父包模块名 这个又是一个文件夹用来存储代码生成的文件
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://main//resources")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("student") // 设置需要生成的表名
.addTablePrefix("t_", "c_","stu_"); // 设置过滤表前缀
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
return "代码生成成功";
}
}
代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。
在MyBatis-Plus中,代码生成器是MyBatis-Plus工具集的一部分,提供了一套简单易用的代码生成器,使得开发人员可以非常方便地生成基础的数据访问层代码。
使用MyBatis-Plus的代码生成器,您需要先完成以下步骤:
配置数据库连接信息:在配置文件中指定数据库连接地址、用户名、密码等信息。
配置生成器参数:通过设置生成器参数,指定需要生成的表、生成文件输出路径、生成文件的命名规则等信息。
编写模板文件:根据项目需求编写模板文件,定义生成的代码结构和格式。
当您完成以上步骤后,就可以启动代码生成器来生成代码了。代码生成器会读取数据库表的结构信息,根据模板文件和生成器参数,自动生成与数据库表对应的Java类、Mapper接口和XML映射文件。生成的代码包括了基本的CRUD操作,可直接应用到项目中。
代码生成器还提供了其他功能,如:
自动生成DTO(数据传输对象)、Service接口等文件,以及自定义模板文件。
自动识别数据库表之间的关联关系,并生成相应的代码。
自动添加注释和日志等信息,提高代码的可读性和可维护性。
总之,代码生成器是一个能够自动生成基础数据访问层代码、提高开发效率的工具。它可以帮助开发人员减少手动编写代码的工作量,保证代码的一致性和规范性,加快项目开发进度。
代码生成器的优点包括:
1. 提高开发效率:通过自动化生成基础代码,减少了重复劳动和手动编写代码的时间,使开发人员可以将更多精力投入到业务逻辑的开发上。
2.保证代码一致性:生成的代码基于统一的模板和配置信息,可以保证生成的代码具有一致的格式和规范,避免了因人为因素导致的代码风格不一致问题。
3.减少错误率:手动编写代码容易出现疏漏和错误,而代码生成器能够根据表结构自动生成代码,减少了人为错误的可能性。
4.易于维护和更新:当数据库表结构发生变化时,只需重新运行代码生成器即可更新生成的代码,无需手动修改大量代码。
然而,代码生成器也存在一些缺点,包括:
学习成本:需要花时间学习和理解代码生成器的配置和模板文件的编写,对于新手来说可能需要一定的学习成本。
灵活性受限:生成的代码受限于模板文件的定义,可能无法完全满足特定的业务需求,需要额外的手动修改和扩展。
可维护性:生成的代码可能过于“机械化”,缺乏一定的智能性和灵活性,可能导致生成的代码结构过于僵化,不易维护和扩展。
综上所述,代码生成器在提高开发效率和保证代码质量方面有着明显的优势,但也需要注意学习成本和灵活性受限这些缺点,并在实际项目中权衡利弊,选择合适的使用方式。
Controller:StudentController
package com.example.mybatisplus1130.controller;
import com.example.mybatisplus1130.bean.Student;
import com.example.mybatisplus1130.service.StudentService;
import com.example.mybatisplus1130.service.DmscService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class StudentController {
@Autowired(required = false)
StudentService studentService;
@Autowired(required = false)
DmscService dmsc;
/*使用的是MyBatisPluse 自带的API封装无需写Sql*/
@ResponseBody
@RequestMapping("/findAll")
public List<Student> findAllStudent(){
return studentService.findAllStudent();
}
/*和上面一样无需写sql的,这个只是多了条件判断及条件构造器(Wrapper)*/
@ResponseBody
@RequestMapping("/findAll_Wrapper")
public List<Student> findAllStudent_Wrapper(){
return studentService.findAllStudent_Wrapper("zgl","男");
}
/*写sql语句 之使用 注解写sql操作数据库*/
@ResponseBody
@RequestMapping("/findAll-zj")
public List<Student> findAllStudent_zj(){
return studentService.findAllByStu_name("zgl");
}
/*写sql语句 之使用 XML写sql操作数据库*/
@ResponseBody
@RequestMapping("/findAll-zj-by-xml")
public List<Student> findAllStudent_zjByXml(){
return studentService.findAllByStu_name_ByXml("zgl");
}
/*代码生成器*/
/*无需记忆 需要知道有这个功能(代码生成器) 需要知道导入那些包可以实现这个逆向工程*/
@ResponseBody
@RequestMapping("/nxgc")
public String daimashengcheng(){
String result = dmsc.text();
return result;
}
/*
我们使用
DmscService dmsc; 的String result = dmsc.text();替代
DmscService service = new DmscService();
String result = service.text();
在使用 DmscService dmsc 的方式时,需要先通过 Spring 容器将 DmscService 类的实例化对象注入到控制器中,
这通常是通过在 DmscService 类上添加 @Service 注解,在控制器类中添加 @Autowired 注解来实现的。
* */
/*
代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。
在MyBatis-Plus中,代码生成器是MyBatis-Plus工具集的一部分,提供了一套简单易用的代码生成器,使得开发人员可以非常方便地生成基础的数据访问层代码。
使用MyBatis-Plus的代码生成器,您需要先完成以下步骤:
配置数据库连接信息:在配置文件中指定数据库连接地址、用户名、密码等信息。
配置生成器参数:通过设置生成器参数,指定需要生成的表、生成文件输出路径、生成文件的命名规则等信息。
编写模板文件:根据项目需求编写模板文件,定义生成的代码结构和格式。
当您完成以上步骤后,就可以启动代码生成器来生成代码了。代码生成器会读取数据库表的结构信息,根据模板文件和生成器参数,自动生成与数据库表对应的Java类、Mapper接口和XML映射文件。生成的代码包括了基本的CRUD操作,可直接应用到项目中。
代码生成器还提供了其他功能,如:
自动生成DTO(数据传输对象)、Service接口等文件,以及自定义模板文件。
自动识别数据库表之间的关联关系,并生成相应的代码。
自动添加注释和日志等信息,提高代码的可读性和可维护性。
总之,代码生成器是一个能够自动生成基础数据访问层代码、提高开发效率的工具。它可以帮助开发人员减少手动编写代码的工作量,保证代码的一致性和规范性,加快项目开发进度。
代码生成器的优点包括:
提高开发效率:通过自动化生成基础代码,减少了重复劳动和手动编写代码的时间,使开发人员可以将更多精力投入到业务逻辑的开发上。
保证代码一致性:生成的代码基于统一的模板和配置信息,可以保证生成的代码具有一致的格式和规范,避免了因人为因素导致的代码风格不一致问题。
减少错误率:手动编写代码容易出现疏漏和错误,而代码生成器能够根据表结构自动生成代码,减少了人为错误的可能性。
易于维护和更新:当数据库表结构发生变化时,只需重新运行代码生成器即可更新生成的代码,无需手动修改大量代码。
然而,代码生成器也存在一些缺点,包括:
学习成本:需要花时间学习和理解代码生成器的配置和模板文件的编写,对于新手来说可能需要一定的学习成本。
灵活性受限:生成的代码受限于模板文件的定义,可能无法完全满足特定的业务需求,需要额外的手动修改和扩展。
可维护性:生成的代码可能过于“机械化”,缺乏一定的智能性和灵活性,可能导致生成的代码结构过于僵化,不易维护和扩展。
综上所述,代码生成器在提高开发效率和保证代码质量方面有着明显的优势,但也需要注意学习成本和灵活性受限这些缺点,并在实际项目中权衡利弊,选择合适的使用方式。
*/
}
点击:
运行就可以了
测试: