项目使用的是springboot框架,MySql数据库,liquibase数据库版本管理工具,tk.mybatis统一管理增删改查,mybatis-generator生成dao层/po层/mapper.xml文件,jhipster生成controller及service代码。
这里简单介绍liquibase+tk.mybatis+mybatis-generator结合使用,这样做的好处就是可以快速搭建项目的基本框架。
liquibase管理数据库,当数据库的版本发生变更或者某个表的字段发生改变,不再需要复杂的修改各个层的代码。只需要在liquibase的配置文件中对这个表做出更改,然后执行mvn命令,mybatis-generator就可以根据表的该表对原先的实体类做出对应的修改,说是修改,其实是重新读取表结构,重新生成实体类,覆盖了原先的是体类。
pom文件是此项目的基本,根据pom文件配置了springboot的依赖及liquibase/tk.mybatis/mybatis-generator的插件。
<?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> <groupId>com.jeep</groupId> <artifactId>leadsscoring</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>prj-jeep-leadsscoring-2018</name> <description>Jeep Leads Scoring</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> <tk.mybatis.version>3.3.6</tk.mybatis.version> </properties> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <profiles.active>dev</profiles.active> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3306/leadsscoring?useSSL=false</db.url> <db.username>root</db.username> <db.password>root</db.password> </properties> </profile> <profile> <id>qa</id> <properties> <profiles.active>qa</profiles.active> <db.driver>com.mysql.jdbc.Driver</db.driver> <db.url>jdbc:mysql://localhost:3306/hsale?useSSL=false</db.url> <db.username>root</db.username> <db.password>Pass1234</db.password> </properties> </profile> </profiles> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <finalName>leadsscoring</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <pluginManagement> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>3.6.2</version> <configuration> <changeLogFile>src/main/resources/config/liquibase/changelog/master.xml</changeLogFile> <driver>${db.driver}</driver> <url>${db.url}</url> <username>${db.username}</username> <password>${db.password}</password> </configuration> <executions> <execution> <phase>process-resources</phase> <goals> <goal>update</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>src/main/resources/config/mybatis.generator/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${tk.mybatis.version}</version> </dependency> <dependency> <groupId> mysql</groupId> <artifactId> mysql-connector-java</artifactId> <version> 5.1.47</version> </dependency> </dependencies> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <configuration> <delimiters> <delimiter>$</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>简单介绍其中的几个组件:
定义了java的版本,项目的编码格式,还可以自定义标签,这里就自定义了一个tkmybatis的版本标签,在下面就可以直接使用这个标签,表示tkmybatis所要使用的版本。
用于构建不同的环境,这里定义了两个环境一个是测试一个是开发,其中通过activeByDefault定义dev为默认的开发环境,这样在运行项目的时候所使用的就是dev环境下的数据库配置信息。在这里定义了db.driver等标签配置数据的连接信息,在application.yml文件中就可以直接使用这些标签。
组件管理模块,这个模块是本项目中的重点,使用了liquibase/mybatis-generator等插件。具体各个标签的含义可以自己到网上查询,就不细说了。
重点指出就是mybatis-generator插件中添加了mysql和tk-mybatis的插件依赖,这里的依赖与外层的dependency依赖不同,一个是插件依赖jar包,一个是项目依赖jar包,不可以通用一个。
项目中主要的配置文件:
server: servlet: context-path: /leadsscoring port: 6543 spring: datasource: druid: url: $db.url$ username: $db.username$ password: $db.password$ driver: $db.driver$ # profiles: # include: $profiles.active$ mybatis: mapper-locations: - classpath:mybatis/mapper/*.xml config-location: classpath:mybaits/mybatis.xml这里就可以发现数据库的配置信息使用的就是pom文件中profile模块所定义的标签了,这样做的好处就是发不同环境的war包时候,不需要临时修改application.yml中的数据库连接信息。
使用include添加了另外两个配置文件,一个scheme是新建表,一个data是新增数据,如果要修改表结构就可以通过修改schema文件中的表配置就可以了。
分别定义了po层的路径,dao层的路径,还有mapper.xml的路径。
其中table表中的tableName是要生成代码的表名,可以使用%表示所有表都生成代码。如果只生成单个表,后面的参数domainObjectName则表示实体类的名称。
最上方被注释掉的classPathEntry就是所要使用的mysql的jar包,如果在插件中没有添加mysql的依赖,则需要使用绝对路径引入本地仓库中mysql的jar包。
最后还有一个mybatis.xml的配置信息,这个与springboot中的基本配置没有什么太大的区别:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- <setting name="logImpl" value="STDOUT_LOGGING" /> --> <!-- 指定 MyBatis 所用日志的具体实现,未指定时将自动查找 --> <!-- <setting name="logImpl" value="LOG4J" /> --> <!-- 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。 --> <setting name="callSettersOnNulls" value="true" /> <!-- 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 --> <setting name="lazyLoadingEnabled" value="false" /> <!-- 当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods). --> <setting name="aggressiveLazyLoading" value="false" /> <!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 --> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> </configuration>通过maven执行数据库建表及代码生成操作,注意执行前要确定数据库中已经存在这个库,就是数据库连接信息中配置的leadsscoring库。
mvn liquibase:update mybatis-generator:generate执行完毕后控制台输出信息:
第一次执行的时候会因为需要安装插件依赖进行下载,花费的时间可能会有点长,安心等待即可。
这时候查看目录结构:
我们想要生成的代码已经生成成功了,查看数据库中也建表成功,数据插入完毕。
