PowerDesigner+MyBatis逆向工程+SSM+EasyCode

一、使用 PowerDesigner 工具

  • 1. 新建模型 PDM(物理数据模型)

    • 将该模型的数据库设置为 MySQL
    • 新增三张表,Student(学生), Subject(课程), Score(成绩)
    • 其中 Student 和 Subject 是主表
    • Score 分别是 Student 和 Subject 的从表,某个成绩一定是某个学生某门课程的成绩
    • 设置外键时,直接使用 referecnes 拉线就可以完成,从从表拉向主表
    • 设置自增时,将 identity 勾选
    • 选择生成数据库脚本 DDL 以及测试数据脚本 DML ,在对应的 MySQL 数据库中执行,生成数据库以及测试数据
    • 这样就生成带有各种外键约束的,非空的,唯一的,自增的,主键的表的结构
    • PowerDesigner.png
    • DDL.png
    • DML.png
    • PDM.png
  • 2. 将生成好的 PDM 转换为 CDM(概念数据模型)

    • 之前的三张表 table 变成三个 Entity 实体
    • 而且实体之间也有正确的对应关系,一对一,一对多,多对一,多对多
  • 3. 还可以将 PDM 生成 OOM(面向对象模型)

    • 之前的三张表变成了三个 class 文件
    • 而且类与类之间的关系也自动生成好了
    • 对一用对象,对多用数组
    • 该类要进行使用时,可能要根据业务做具体的调整
  • 4. 还可以将 PDM 转换为 xml 的约束

    • 之前的三个表变成了三个 xsd 文件
    • 在各自的 xsd 文件中指定了 xml 文件的约束

二、操作mysql

  • 将第一步生成好的 DDL 在 MySQL 中执行生成对应的数据库
  • 将测试数据的 DML 脚本在数据库中执行,生成对应的测试数据
  • 注意一些运维的细节
  • 注意 MySQL 数据库以及每张数据表的编码格式
  • sql 文件
    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 = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    -- ----------------------------
    -- Records of score
    -- ----------------------------
    INSERT INTO `score` VALUES (1, 1, 1, 100.00, 'AA');
    INSERT INTO `score` VALUES (2, 2, 2, 90.00, 'BB');
    INSERT INTO `score` VALUES (3, 3, 3, 100.00, 'CC');
    -- ----------------------------
    -- 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', 17);
    INSERT INTO `student` VALUES (2, 'BBB', '111111', '11111111111', 'BB', 13);
    INSERT INTO `student` VALUES (3, 'CCC', '222222', '11111111111', 'CC', 11);
    -- ----------------------------
    -- 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 = 17 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;   
    

三、使用 EasyCode 插件将 MySQL 中的数据表使用逆向工程来生成对应 pojo,dao,xml 方式,甚至是 service 以及 controller

  • 首先在 IDEA 中打开 database 界面
  • 分别设置数据库、用户名和密码新增一个 MySQL 的链接
  • 打开数据库中的schemaS,选择你要逆向生成的表(可以多选)
  • 右键 EasyCode --> 点击 Generate Code
  • 选择自己的 package(可以提前建好),选择所有 ' all ',可以去掉 debug.json ,选择禁止提示来防止多次提示是否生成子目录
  • 正常情况会在刚刚选择的包下分别生成 controller,entity,service 以及 dao 子包以及接口、实现类、xml
  • 正常情况,EasyCode会在 resources 下生成 mapper 文件夹以及 dao 的 .xml 文件,注意手动将其配置在与 dao 接口平级的 resources 目录下
  • 基本骨架生成成功
  • EasyCode.png
  • EasyCode1.png

四、搭建 SSM

  • 添加依赖
    
    
        4.0.0
        com
        SSM-EasyCode
        1.0-SNAPSHOT
        
        war
        
            
            4.3.9.RELEASE
        
        
            
            
                org.springframework
                spring-webmvc
                ${spring-version}
            
            
            
                com.fasterxml.jackson.core
                jackson-databind
                2.8.10
            
            
            
                mysql
                mysql-connector-java
                8.0.19
            
            
            
                org.mybatis
                mybatis
                3.4.6
            
            
            
                org.mybatis
                mybatis-spring
                1.3.1
            
            
            
                org.springframework
                spring-test
                ${spring-version}
            
            
            
                org.springframework
                spring-jdbc
                ${spring-version}
            
            
            
                org.aspectj
                com.springsource.org.aspectj.weaver
                1.6.8.RELEASE
            
            
            
                com.alibaba
                druid
                1.0.28
            
            
            
                log4j
                log4j
                1.2.17
            
            
            
                junit
                junit
                4.12
            
            
            
                org.projectlombok
                lombok
                1.18.8
                provided
            
            
            
                javax.servlet.jsp
                jsp-api
                2.2
                provided
            
            
            
                javax.servlet
                javax.servlet-api
                3.0.1
                provided
            
            
            
                jstl
                jstl
                1.2
            
        
        
            
            
                
                    src/main/java
                    
                        **/*.xml
                    
                    false
               
                
                    src/main/resources
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
            
            
                
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    3.6.1
                    
                        1.8
                        1.8
                    
                
                
                
                    org.apache.tomcat.maven
                    tomcat7-maven-plugin
                    2.2
                    
                        /
                        8081
                    
                
            
        
    
    
  • 修改 web.xml 内容,新增 Spring MVC 和字符编码过滤器的配置
    
    
        
        
            dispatcherServlet
            org.springframework.web.servlet.DispatcherServlet
            
                contextConfigLocation
                classpath:spring-mvc.xml
            
        
        
            dispatcherServlet
            /
        
        
        
            encode
            org.springframework.web.filter.CharacterEncodingFilter
            
                encoding
                UTF-8
            
        
        
            encode
            /*
        
    
    
  • 在 resources 下新增 SSM 所需的所有的配置文件
    • spring-mybatis.xml
      
      
          
          
          
          
          
              
              
              
              
          
          
          
              
              
              
              
          
          
          
              
              
          
          
          
              
          
          
          
              
              
                  
                  
                  
                  
              
          
          
          
              
              
          
      
      
    • spring-mvc.xml
      
      
          
          
          
          
          
          
          
          
          
          
          
          
              
              
          
      
      
    • mybatis-config.xml
      
      
      
          
          
              
          
      
      
    • db.properties
      driver = com.mysql.cj.jdbc.Driver
      url = jdbc:mysql://localhost:3307/school?serverTimezone=UTC
      user = root
      pass = 123456
      maxActive = 50
      minIdle = 1
      
    • log4j.properties
      # Global logging configuration
      log4j.rootLogger = ERROR, stdout, F
      # MyBatis 日志配置
      log4j.logger.com = TRACE
      # 控制台输出
      log4j.appender.stdout = org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern = %6p [%t] - %m%n
      log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
      log4j.appender.F.File = myproj.log
      log4j.appender.F.Append = true
      log4j.appender.F.Threshold = DEBUG
      log4j.appender.F.layout = org.apache.log4j.PatternLayout
      log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss}-[%p %F\:%L]  %m%n
      
  • 分别搭建 Spring的单元测试
      @RunWith(SpringJUnit4ClassRunner.class)
      @ContextConfiguration("classpath:spring-mybatis.xml")
      public class TestStudentService {
          @Autowired
          private StudentService studentService;
          @Test
          public void testService(){
              Student s = studentService.queryById(1);
              System.out.println(s);
          }
      }
    
  • 测试 SSM
        INFO [main] - {dataSource-1} inited
       DEBUG [main] - ==>  Preparing: select sid, name, pass, tel, addr, age from school.student where sid = ? 
       DEBUG [main] - ==> Parameters: 1(Integer)
       TRACE [main] - <==    Columns: sid, name, pass, tel, addr, age
       TRACE [main] - <==        Row: 1, AAA, 111111, 11111111111, AA, 17
       DEBUG [main] - <==      Total: 1
      com.entity.Student@34f22f9d
        INFO [Thread-1] - {dataSource-1} closed
    
  • 完成 SSM 的搭建
  • SSM 的简单分页测试:打开浏览器输入--》http://localhost:8081/student/selectPage
    在selectPage后可以加 ?cp=1&ps=3 (数字可更改)来访问不同页数据
    @RestController
    @RequestMapping("student")
    public class StudentController {
        @Resource
        private StudentService studentService;
        @GetMapping("selectOne/{id}")
        public Student selectOne(@PathVariable Integer id) {
            return this.studentService.queryById(id);
        }
        @GetMapping("/selectPage")
        public List getStudentsByPage(@RequestParam(value = "cp",defaultValue = "1") int currentPage , @RequestParam(value = "ps",defaultValue = "5") int pageSize){
            currentPage = currentPage <= 1 ? 1 : currentPage;
            pageSize = pageSize <= 0 ? 10 : pageSize;
            return studentService.queryAllByLimit((currentPage - 1) * pageSize,pageSize);
        }
    }
    

你可能感兴趣的:(PowerDesigner+MyBatis逆向工程+SSM+EasyCode)