陕煤化建设集团网站矿建二公司,多语种网站建设,自己做网站后台,网站后台管理模块1、代码生成器原理分析
造句: 我们可以往空白内容进行填词造句#xff0c;比如: 在比如: 观察我们之前写的代码#xff0c;会发现其中也会有很多重复内容#xff0c;比如: 那我们就想#xff0c;如果我想做一个Book模块的开发#xff0c;是不是只需要将红色部分的内容全部…1、代码生成器原理分析
造句: 我们可以往空白内容进行填词造句比如: 在比如: 观察我们之前写的代码会发现其中也会有很多重复内容比如: 那我们就想如果我想做一个Book模块的开发是不是只需要将红色部分的内容全部更换成Book即可如 所以我们会发现做任何模块的开发对于这段代码基本上都是对红色部分的调整所以我们把去掉红色内容的东西称之为模板红色部分称之为参数以后只需要传入不同的参数就可以根据模板创建出不同模块的dao代码。
除了Dao可以抽取模块其实我们常见的类都可以进行抽取只要他们有公共部分即可。再来看下模型类的模板 ① 可以根据数据库表的表名来填充 ② 可以根据用户的配置来生成ID生成策略 ③到⑨可以根据数据库表字段名称来填充
所以只要我们知道是对哪张表进行代码生成这些内容我们都可以进行填充。
分析完后我们会发现要想完成代码自动生成我们需要有以下内容: 模板: MyBatisPlus已经提供了模板也可以自己提供模板但是麻烦不建议 数据库相关配置:读取数据库获取表和字段信息 开发者自定义配置:手工配置比如ID生成策略
2、代码生成器实现
步骤1:创建一个Maven项目
代码2:导入对应的jar包
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.1/version/parentgroupIdcom.itheima/groupIdartifactIdmybatisplus_04_generator/artifactIdversion0.0.1-SNAPSHOT/versionpropertiesjava.version1.8/java.version/propertiesdependencies!--spring webmvc--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency
!--mybatisplus--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.1/version/dependency
!--druid--dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.16/version/dependency
!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependency
!--test--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
!--lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/version/dependency
!--代码生成器--dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-generator/artifactIdversion3.4.1/version/dependency
!--velocity模板引擎--dependencygroupIdorg.apache.velocity/groupIdartifactIdvelocity-engine-core/artifactIdversion2.3/version/dependency
/dependencies
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project
步骤3:编写引导类
SpringBootApplication
public class Mybatisplus04GeneratorApplication {
public static void main(String[] args) {SpringApplication.run(Mybatisplus04GeneratorApplication.class, args);}
}
步骤4:创建代码生成类
public class CodeGenerator {public static void main(String[] args) {//1.获取代码生成器的对象AutoGenerator autoGenerator new AutoGenerator();
//设置数据库相关配置DataSourceConfig dataSource new DataSourceConfig();dataSource.setDriverName(com.mysql.cj.jdbc.Driver);dataSource.setUrl(jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezoneUTC);dataSource.setUsername(root);dataSource.setPassword(root);autoGenerator.setDataSource(dataSource);
//设置全局配置GlobalConfig globalConfig new GlobalConfig();globalConfig.setOutputDir(System.getProperty(user.dir)/mybatisplus_04_generator/src/main/java); //设置代码生成位置globalConfig.setOpen(false); //设置生成完毕后是否打开生成代码所在的目录globalConfig.setAuthor(黑马程序员); //设置作者globalConfig.setFileOverride(true); //设置是否覆盖原始生成的文件globalConfig.setMapperName(%sDao); //设置数据层接口名%s为占位符指代模块名称globalConfig.setIdType(IdType.ASSIGN_ID); //设置Id生成策略autoGenerator.setGlobalConfig(globalConfig);
//设置包名相关配置PackageConfig packageInfo new PackageConfig();packageInfo.setParent(com.aaa); //设置生成的包名与代码所在位置不冲突二者叠加组成完整路径packageInfo.setEntity(domain); //设置实体类包名packageInfo.setMapper(dao); //设置数据层包名autoGenerator.setPackageInfo(packageInfo);
//策略设置StrategyConfig strategyConfig new StrategyConfig();strategyConfig.setInclude(tbl_user); //设置当前参与生成的表名参数为可变参数strategyConfig.setTablePrefix(tbl_); //设置数据库表的前缀名称模块名 数据库表名 - 前缀名 例如 User tbl_user - tbl_strategyConfig.setRestControllerStyle(true); //设置是否启用Rest风格strategyConfig.setVersionFieldName(version); //设置乐观锁字段名strategyConfig.setLogicDeleteFieldName(deleted); //设置逻辑删除字段名strategyConfig.setEntityLombokModel(true); //设置是否启用lombokautoGenerator.setStrategy(strategyConfig);//2.执行生成操作autoGenerator.execute();}
}
对于代码生成器中的代码内容我们可以直接从官方文档中获取代码进行修改代码生成器旧 | MyBatis-Plus 步骤5:运行程序
运行成功后会在当前项目中生成很多代码代码包含controller,servicemapper和entity 至此代码生成器就已经完成工作我们能快速根据数据库表来创建对应的类简化我们的代码开发。
3、Mybatisplus中Service的CRUD
回顾我们之前业务层代码的编写编写接口和对应的实现类:
public interface UserService{}
Service
public class UserServiceImpl implements UserService{
}
接口和实现类有了以后需要在接口和实现类中声明方法
public interface UserService{public ListUser findAll();
}
Service
public class UserServiceImpl implements UserService{Autowiredprivate UserDao userDao;public ListUser findAll(){return userDao.selectList(null);}
}
Mybatisplus看到上面的代码以后就说这些方法也是比较固定和通用的那来帮你抽取下所以Mybatisplus提供了一个Service接口和实现类分别是:IService和ServiceImpl,后者是对前者的一个具体实现。
以后我们自己写的Service就可以进行如下修改:
public interface UserService extends IServiceUser{}
Service
public class UserServiceImpl extends ServiceImplUserDao, User implements UserService{
}
修改以后的好处是Mybatisplus已经帮我们把业务层的一些基础的增删改查都已经实现了可以直接进行使用。
编写测试类进行测试:
SpringBootTest
class Mybatisplus04GeneratorApplicationTests {
private IUserService userService;
Testvoid testFindAll() {ListUser list userService.list();System.out.println(list);}
}
思考:在Mybatisplus封装的Service层都有哪些方法可以用?
CRUD 接口 | MyBatis-Plus