逆向工程很方便, 可以直接根据数据库和配置文件生成 pojo,mapper 接口和相应的映射文件.
xml 版本和全注解版本其实差不多, 大部分情况下, 都会保留 xml 文件方便其他人去扩展新的 dml 方法.
文章旨在记录 ssm 项目的搭建过程, 除了本文所提到的逆向工程极大的方便了应用的开发效率, 还有两个比较常用的 mybatis 扩展框架.
- common mapper https://github.com/abel533/Mapper/wiki
- mybatisplus https://mp.baomidou.com/guide/quick-start.html
好了, 废话不多说, 下面就是完整的搭建过程.
首先是项目的依赖, 完整的 pom 文件如下:
- <?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.example</groupId>
- <artifactId>demo-boot-mybatis-xml</artifactId>
- <version>1.0-SNAPSHOT</version>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.1.3.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.0.1</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- <version>5.1.35</version>
- </dependency>
- <!-- 分页插件 -->
- <dependency>
- <groupId>com.GitHub.pagehelper</groupId>
- <artifactId>pagehelper-spring-boot-starter</artifactId>
- <version>1.2.10</version>
- </dependency>
- <!-- alibaba 的 druid 数据库连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- <version>1.1.16</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- <!-- mybatis generator 自动生成代码插件 -->
- <plugin>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-maven-plugin</artifactId>
- <version>1.3.5</version>
- <configuration>
- <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
- <overwrite>true</overwrite>
- <verbose>true</verbose>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
application.YAML 文件配置
- server:
- port: 8080
- spring:
- datasource:
- name: test
- type: com.alibaba.druid.pool.DruidDataSource
- druid:
- driver-class-name: com.MySQL.jdbc.Driver
- url: jdbc:MySQL://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=GMT+8
- username: root
- password: root
- mybatis:
- mapper-locations: classpath:mapper/*.xml #注意: 一定要对应 mapper 映射 xml 文件的所在路径
- type-aliases-package: com.example.model # 注意: 对应实体类的路径
- #pagehelper 分页插件
- pagehelper:
- helperDialect: MySQL
- reasonable: true
- supportMethodsArguments: true
- params: count=countSql
测试的数据库脚本
- CREATE TABLE t_user(
- user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
- user_name VARCHAR(255) NOT NULL ,
- password VARCHAR(255) NOT NULL ,
- phone VARCHAR(255) NOT NULL
- ) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
配置 mybatis-generator 自动生成代码的相关配置
- ${
- basedir
- }/src/main/resources/generator/generatorConfig.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>
- <!-- 数据库驱动: 选择你的本地硬盘上面的数据库驱动包 -->
- <classPathEntry location="D:\code\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar"/>
- <context id="DB2Tables" targetRuntime="MyBatis3">
- <commentGenerator>
- <property name="suppressDate" value="true"/>
- <!-- 是否去除自动生成的注释 true: 是 : false: 否 -->
- <property name="suppressAllComments" value="true"/>
- </commentGenerator>
- <!-- 数据库链接 URL, 用户名, 密码 -->
- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/db_test?characterEncoding=utf-8" userId="root" password="root"/>
- <javaTypeResolver>
- <property name="forceBigDecimals" value="false"/>
- </javaTypeResolver>
- <!-- 生成模型的包名和位置 -->
- <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
- <property name="enableSubPackages" value="true"/>
- <property name="trimStrings" value="true"/>
- </javaModelGenerator>
- <!-- 生成映射文件的包名和位置 -->
- <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
- <property name="enableSubPackages" value="true"/>
- </sqlMapGenerator>
- <!-- 生成 DAO 的包名和位置 -->
- <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
- <property name="enableSubPackages" value="true"/>
- </javaClientGenerator>
- <!-- 要生成的表 tableName 是数据库中的表名或视图名 domainObjectName 是实体类名 -->
- <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
- </context>
- </generatorConfiguration>
运行 maven 插件 org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate
- "C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -Dmaven.multiModuleProjectDirectory=D:\ideaworkspace_demo\demo-boot-mybatis-xml -Dmaven.home=D:\software\idea\plugins\maven\lib\maven3 -Dclassworlds.conf=D:\software\idea\plugins\maven\lib\maven3\bin\m2.conf -javaagent:D:\software\idea\lib\idea_rt.jar=6721:D:\software\idea\bin -Dfile.encoding=UTF-8 -classpath D:\software\idea\plugins\maven\lib\maven3\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version=2018.3.5 org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate
- [INFO] Scanning for projects...
- [INFO]
- [INFO] ------------------------------------------------------------------------
- [INFO] Building demo-boot-mybatis-xml 1.0-SNAPSHOT
- [INFO] ------------------------------------------------------------------------
- [INFO]
- [INFO] --- mybatis-generator-maven-plugin:1.3.2:generate (default-cli) @ demo-boot-mybatis-xml ---
- [INFO] Connecting to the Database
- Tue Apr 09 11:16:14 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
- [INFO] Introspecting table t_user
- log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.DatabaseIntrospector).
- log4j:WARN Please initialize the log4j system properly.
- log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
- [INFO] Generating Record class for table t_user
- [INFO] Generating Mapper Interface for table t_user
- [INFO] Generating SQL Map for table t_user
[INFO] Saving file UserMapper.xml
[INFO] Saving file User.java
[INFO] Saving file UserMapper.java
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 1.180 s
- [INFO] Finished at: 2019-04-09T11:16:14+08:00
- [INFO] Final Memory: 15M/245M
- [INFO] ------------------------------------------------------------------------
- Process finished with exit code 0
以上步骤就可以使用 generator 自动生成 model 和 dao 层的代码了.
把 mybatis 的 mapper 加入到 IoC 容器中.
- package com.example;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication
- // 此注解会把该包下的 mapper 添加到 spring 的 IoC 容器中
- @MapperScan("com.example.mapper")
- public class MybatisApplication {
- public static void main(String[] args) {
- SpringApplication.run(MybatisApplication.class, args);
- }
- }
- package com.example.mapper;
- import com.example.model.User;
- import org.springframework.stereotype.Repository;
- import java.util.List;
- public interface UserMapper {
- int deleteByPrimaryKey(Integer userId);
- int insert(User record);
- int insertSelective(User record);
- User selectByPrimaryKey(Integer userId);
- int updateByPrimaryKeySelective(User record);
- int updateByPrimaryKey(User record);
- List<User> selectAll();
- }
以上就是项目的基本搭建过程, idea 可能会提示 mapper 无法注入, 因为 idea 并不知道 MapperScan 注解已经把那些接口添加到容器中了, 实际并不影响正常运行.
项目源码: https://github.com/lingEric/demo-boot-mybatis-xml
来源: https://www.cnblogs.com/ericling/p/11574996.html