逆向工程:从代码和成UML图形;是通过从特定实现语言的映射而把代码转换为模型的过程。
MyBatis逆向工程创建
- 数据库文件:school.sql
/* Navicat MySQL Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80018 Source Host : localhost:3307 Source Schema : school Target Server Type : MySQL Target Server Version : 80018 File Encoding : 65001 Date: 20/03/2020 01:37:13 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for score -- ---------------------------- DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `scid` int(11) NOT NULL AUTO_INCREMENT, `sid` int(11) NULL DEFAULT NULL, `suid` int(11) NULL DEFAULT NULL, `score` decimal(10, 2) NOT NULL, `sdesc` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`scid`) USING BTREE, INDEX `FK_sc_c`(`sid`) USING BTREE, INDEX `FK_sc_su`(`suid`) USING BTREE, CONSTRAINT `FK_sc_c` FOREIGN KEY (`sid`) REFERENCES `student` (`sid`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FK_sc_su` FOREIGN KEY (`suid`) REFERENCES `subject` (`suid`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of score -- ---------------------------- INSERT INTO `score` VALUES (1, 1, 1, 100.00, '高数'); INSERT INTO `score` VALUES (2, 2, 2, 100.00, 'Java'); INSERT INTO `score` VALUES (3, 3, 3, 100.00, 'HTML'); -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `tel` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `addr` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`sid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES (1, 'AAA', '111111', '11111111111', 'AA', 22); INSERT INTO `student` VALUES (2, 'BBB', '111111', '11111111111', 'AA', 21); INSERT INTO `student` VALUES (3, 'CCC', '222222', '11111111111', 'AA', 20); -- ---------------------------- -- Table structure for subject -- ---------------------------- DROP TABLE IF EXISTS `subject`; CREATE TABLE `subject` ( `suid` int(11) NOT NULL AUTO_INCREMENT, `suname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `degree` int(11) NOT NULL, PRIMARY KEY (`suid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of subject -- ---------------------------- INSERT INTO `subject` VALUES (1, 'AAA', 90); INSERT INTO `subject` VALUES (2, 'BBB', 90); INSERT INTO `subject` VALUES (3, 'CCC', 80); SET FOREIGN_KEY_CHECKS = 1;
- 新建一个 MAVEN 项目下的resources目录中添加 config.properties配置文件
#数据库配置 jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3307/school?serverTimezone=UTC jdbc.user=root jdbc.password=123456 # 通用Mapper固定配置 mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin mapper.Mapper=tk.mybatis.mapper.common.Mapper mapper.forceAnnotation=true # 生成文件保存位置 targetModelPackage=com.pojo targetXMLPackage=com.mapper targetMapperPackage=com.mapper targetJavaProject=src/main/java targetResourcesProject=src/main/java
- 在下 resources目录中添加 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="F:\IDEA-Work\Generate\lib\mysql-connector-java-5.1.21.jar" /> --> <context id="DB2Tables" targetRuntime="MyBatis3"> <!-- 序列化model --> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <commentGenerator> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 数据库链接URL、用户名、密码 --> <!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3307/school?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true" userId="root" password="123456"> </jdbcConnection> --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3307/school?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成模型的包名和位置 --> <javaModelGenerator targetPackage="com.pojo" targetProject=".\src"> <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成的映射文件包名和位置 --> <sqlMapGenerator targetPackage="com.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成DAO的包名和位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject=".\src"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 要生成那些表(更改tableName和domainObjectName就可以) --> <table tableName="student" schema=""/> <table tableName="subject" schema=""/> <table tableName="score" schema=""/> </context> </generatorConfiguration>
- 在 pom.xml 中添加依赖
<?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</groupId> <artifactId>MyBatisGenerate</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <configurationFile>src/main/resources/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.3.9</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
- 打开maven菜单,双击运行mybatis-generator:mybatis-generator:generate,运行后会在项目中找到相应的 .java文件和 .xml文件
generator.png
- 生成pojo以及mapper接口以及xml文件,分别在所设置的对应的包中,就此MyBatis的逆向工程完成
项目测试
- IStudentService.java 和 StudentServiceImpl.java
public interface IStudentService { List<Student> getAllStudent(); Student getStudentBySid(int sid); } @Service public class StudentServiceImpl implements IStudentService { @Resource private StudentMapper stuMapper; @Override public List<Student> getAllStudent() { StudentExample se = new StudentExample(); return stuMapper.selectByExample(se); } @Override public Student getStudentBySid(int sid) { return stuMapper.selectByPrimaryKey(sid); } }
- StudentController.java
@RestController public class StudentController { @Resource private IStudentService studentService; @GetMapping("/Students") public List<Student> getAllStudent(){ return studentService.getAllStudent(); } @GetMapping("/Students/{sid}") public Student getStudentBySid(@PathVariable int sid){ return studentService.getStudentBySid(sid); } }
- 测试类 Test.java
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring-mybatis.xml") public class TestStudentService { @Resource private IStudentService studentService; @Test public void testGetAllStudent(){ List<Student> list = studentService.getAllStudent(); for (Student s : list) { System.out.println(s); } } }
- 运行结果
INFO [main] - {dataSource-1} inited DEBUG [main] - ==> Preparing: select sid, name, pass, tel, addr, age from student DEBUG [main] - ==> Parameters: TRACE [main] - <== Columns: sid, name, pass, tel, addr, age TRACE [main] - <== Row: 1, AAA, 111111, 11111111111, AA, 22 TRACE [main] - <== Row: 2, BBB, 111111, 11111111111, BB, 21 TRACE [main] - <== Row: 3, CCC, 222222, 11111111111, CC, 20 DEBUG [main] - <== Total: 3 com.pojo.Student@50ecde95 com.pojo.Student@35a9782c com.pojo.Student@70a36a66 INFO [Thread-1] - {dataSource-1} closed
网友评论