导入数据库驱动依赖包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
导入数据库操作框架依赖包:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
在springboot的配置文件application.yml配置数据库访问路径
spring:
datasource:
url: jdbc:mysql://数据库的ip地址:3306/数据库名?characterEncoding=utf8&useUnicode=true&useSSL=false&Timezone=true&serverTimezone=Asia/Shanghai
username: 数据库的用户名
password: 数据库的密码
driver-class-name: com.mysql.cj.jdbc.Driver
springboot的配置文件application.yml配置mybatis
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
mapper-locations: classpath:mapper/*.xml
通过mybatis插件自动生成代码
-
新建一个maven项目,创建MybatisGenerator.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator type="com.bjfu.comment.MyCommentGenerator"><!-- 填写你自己的MyCommentGenerator路径 --> <!-- 是否去除自动生成的注释 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/my_test" userId="root" password="123456"> </jdbcConnection> <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时 把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- targetProject:生成POJO类的位置 D:\work\IntelliJIDEA2018.2.4WorkspaceProject\ForestReservesH\mybatis-generator\src\main\java--> <javaModelGenerator targetPackage="com.bjfu.entity" targetProject="D:\code\mybatis_generator\src\main\java"> <!-- 以上路径信息截止到Java --> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.bjfu.xml" targetProject="D:\code\mybatis_generator\src\main\java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- targetProject:mapper接口生成的的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.bjfu.mapper" targetProject="D:\code\mybatis_generator\src\main\java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 指定数据表 --> <!-- tableName对应数据库中的表名,domainObjectName对应实体类 --> <table tableName="my_user" domainObjectName="MyUser"> <generatedKey column="user_id" sqlStatement="MySql" identity="true"/> </table> <!-- 有些表的字段需要指定java类型 <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" > <property name="useActualColumnNames" value="true"/> <generatedKey column="ID" sqlStatement="DB2" identity="true" /> <columnOverride column="DATE_FIELD" property="startDate" /> <ignoreColumn column="FRED" /> <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> </table> --> </context> </generatorConfiguration>
注意将数据库链接信息修改成自己指定的数据库,如果MySQL版本为8的话,填写:jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"。
填写targetProject路径信息时,一定要写到java路径,tableName填写MySQL中的表的名字,注意不要和数据库自带表的名字重合。
-
创建MainGeneration类,并设置main方法
public static void main(String[] args) throws Exception { List<String> warnings = new ArrayList<>(); boolean overwrite = true; // 就这一句需要注意,XML的名称别写错,别的都是固定格式 File configFile = new File("D:/code/mybatis_generator/src/MybatisGenerator.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); System.out.println("---OVER----"); System.out.println("覆盖之前,记得别把带有JSR校验注解的实体类覆盖掉"); System.out.println("1)记得修改插入主键回显"); System.out.println("2)记得看readme"); }
-
创建com.bjfu.comment.MyCommentGeneration.java类
public class MyCommentGenerator extends DefaultCommentGenerator { private Properties properties; private Properties systemPro; private boolean suppressDate; private boolean suppressAllComments; private String currentDateStr; public MyCommentGenerator() { super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date()); } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } if (!StringUtils.isNullOrEmpty(introspectedColumn.getRemarks())) { StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(sb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); } } @Override public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { super.addModelClassComment(topLevelClass, introspectedTable); /** * @Data * @Builder * @NoArgsConstructor * @AllArgsConstructor */ topLevelClass.addAnnotation("@Data"); topLevelClass.addAnnotation("@Builder"); topLevelClass.addAnnotation("@NoArgsConstructor"); topLevelClass.addAnnotation("@AllArgsConstructor"); topLevelClass.addAnnotation("@Accessors(chain = true)"); topLevelClass.addImportedType("lombok.AllArgsConstructor"); topLevelClass.addImportedType("lombok.Builder"); topLevelClass.addImportedType("lombok.Data"); topLevelClass.addImportedType("lombok.NoArgsConstructor"); topLevelClass.addImportedType("lombok.experimental.Accessors"); } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable) { } @Override public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { } @Override public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } @Override public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) { } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { } }
-
并在pom.xml文件中配置相关依赖
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.4</version> </dependency> </dependencies>