一、目录:

  1. 数据库表创建规则
    2. mybatis逆向工程
    3. Maven父工程依赖管理
    4. spring整合MyBatis

    1. 项目经验

    目标:聚焦当前要完成的任务,目标明确之后才能够分析实现思路
    思路:针对目标的达成进行分析,具体到项目功能的实际开发中。体现为流程图
    代码:参照流程图,把步骤翻译成写代码时的注释,对照注释写代码

    2. 创建数据库和数据库表

  • 物理建模
  • 理论:
    • 第一范式:数据库表中的每一列都不可再分,也就是原子性,并且每个表都应该有主键
    • 第二范式:在满足第一范式基础上要求每个字段都和主键完整相关,而不是仅和主键部分相关(少用联合主键)
    • 第三范式:非主键字段和主键字段都直接相关,不允许间接相关
  • 三大范式是设计数据库表结构的规则约束,但是在实际开发中允许局部变通。
  • 冗余字段:
    • 在数据库设计时,会设置几个冗余字段,备用字段 field1 field2

      3. MyBatis逆向工程

      pom文件 ```xml org.mybatis mybatis 3.2.8

org.mybatis.generator mybatis-generator-maven-plugin 1.3.0 org.mybatis.generator mybatis-generator-core 1.3.2 com.mchange c3p0 0.9.2 mysql mysql-connector-java 5.1.8

  1. resources下创建一个generatorConfig.xml 文件 逆向工程
  2. ```xml
  3. <?xml version="1.0" encoding="utf-8" ?>
  4. <!DOCTYPE generatorConfiguration
  5. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  6. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  7. <generatorConfiguration>
  8. <!-- mybatis-generator:generate -->
  9. <context id="atguiguTables" targetRuntime="MyBatis3">
  10. <commentGenerator>
  11. <!-- 是否去除自动生成的注释 true:是;false:否 -->
  12. <property name="suppressAllComments" value="true" />
  13. </commentGenerator>
  14. <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
  15. <jdbcConnection
  16. driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/project_crowd" userId="root" password="0000">
  17. </jdbcConnection>
  18. <!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把
  19. JDBC DECIMAL
  20. 和 NUMERIC 类型解析为 java.math.BigDecimal -->
  21. <javaTypeResolver>
  22. <property name="forceBigDecimals" value="false" />
  23. </javaTypeResolver>
  24. <!-- targetProject:生成 Entity 类的路径 -->
  25. <javaModelGenerator targetProject=".\src\main\java"
  26. targetPackage="com.yixuexi.crowd.entity">
  27. <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
  28. <property name="enableSubPackages" value="false" />
  29. <!-- 从数据库返回的值被清理前后的空格 -->
  30. <property name="trimStrings" value="true" />
  31. </javaModelGenerator>
  32. <!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
  33. <sqlMapGenerator targetProject=".\src\main\java"
  34. targetPackage="com.yixuexi.crowd.mapper">
  35. <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
  36. <property name="enableSubPackages" value="false" />
  37. </sqlMapGenerator>
  38. <!-- targetPackage:Mapper 接口生成的位置 -->
  39. <javaClientGenerator type="XMLMAPPER"
  40. targetProject=".\src\main\java"
  41. targetPackage="com.yixuexi.crowd.mapper">
  42. <!-- enableSubPackages:是否让 schema 作为包的后缀 -->
  43. <property name="enableSubPackages" value="false" />
  44. </javaClientGenerator>
  45. <!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
  46. <table tableName="t_admin" domainObjectName="Admin" />
  47. </context>
  48. </generatorConfiguration>

执行
mybatis-generator:generate
不会执行看:https://blog.csdn.net/summer_sy/article/details/70183319

4. Maven父工程依赖管理

版本声明 【在父工程里】

<properties>
    <!-- 声明属性,对 Spring 的版本进行统一管理 -->
    <atguigu.spring.version>4.3.20.RELEASE</atguigu.spring.version>
    <!-- 声明属性,对 SpringSecurity 的版本进行统一管理 -->
    <atguigu.spring.security.version>4.2.10.RELEASE</atguigu.spring.security.version>
</properties>

依赖管理 【在父工程里】

  • 的区别:
  • dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
  • dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。 ```xml org.springframework spring-orm ${atguigu.spring.version} org.springframework spring-webmvc ${atguigu.spring.version} org.springframework spring-test ${atguigu.spring.version} org.aspectj aspectjweaver 1.9.2 cglib cglib 2.2 mysql mysql-connector-java 5.1.3 com.alibaba druid 1.0.31 org.mybatis mybatis 3.2.8 org.mybatis mybatis-spring 1.2.2 com.github.pagehelper pagehelper 4.0.0 org.slf4j slf4j-api 1.7.7 ch.qos.logback logback-classic 1.2.3 org.slf4j jcl-over-slf4j 1.7.25 org.slf4j jul-to-slf4j 1.7.25 com.fasterxml.jackson.core jackson-core 2.9.8 com.fasterxml.jackson.core jackson-databind 2.9.8 jstl jstl 1.2 junit junit 4.12 test javax.servlet servlet-api 2.5 provided javax.servlet.jsp jsp-api 2.1.3-b06 provided com.google.code.gson gson 2.8.5 org.springframework.security spring-security-web 4.2.10.RELEASE org.springframework.security spring-security-config 4.2.10.RELEASE org.springframework.security spring-security-taglibs 4.2.10.RELEASE

<a name="IVgLL"></a>
# 二、Spring整合MyBatis
**目标:**adminMapper通过IOC容器装配到当前组件中后,就可以调用它的方法,享受框架给我们提供的方便<br />**操作清单**

1. 在子工程中,加入搭建环境所需要的具体依赖
1. 准备jdbc.properties
1. 创建spring配置文件,专门配置spring和mybatis整合相关
1. 在spring的配置文件中,加载jdbc.properties属性文件 
1. 配置数据源
1. 测试从数据源中获取数据库连接
1. 配置SqlSessionFactoryBean
   1. 装配数据源
   1. 指定XxxMapper.xml配置文件的位置
   1. 指定MyBatis全局配置文件的位置(可选)
8. 配置MapperScannerConfigurer
8. 测试能不能自动装配一个XxxMapper 并访问数据库

<a name="AgsZK"></a>
## 1. 在子工程中加入依赖  component工程中加入
```xml
    <!-- Spring 依赖 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-orm</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/cglib/cglib -->
        <dependency>
          <groupId>cglib</groupId>
          <artifactId>cglib</artifactId>
        </dependency>
        <!-- MySQL 驱动 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- 数据源 -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
        </dependency>
        <!-- MyBatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
        </dependency>
        <!-- MyBatis 与 Spring 整合 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
        </dependency>
        <!-- MyBatis 分页插件 -->
        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
        </dependency>
        <!-- Spring 进行 JSON 数据转换依赖 -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
        </dependency>
        <!-- JSTL 标签库 -->
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
        </dependency>
        <!--spring测试-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>5.2.9.RELEASE</version>
          <scope>test</scope>
        </dependency>

2. jdbc.properties 文件

jdbc.user=root 
jdbc.password=0000
jdbc.url=jdbc:mysql://localhost:3306/project_crowd?useUnicode=true&characterEncoding=UTF-8 
jdbc.driver=com.mysql.jdbc.Driver

3. 创建mybatis-config.xml配置文件

<?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>

</configuration>

4. 创建spring-persist-mybatis.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 加载 jdbc.properties -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 连接数据库的用户名 -->
        <property name="username" value="${jdbc.user}"/>
        <!-- 连接数据库的密码 -->
        <property name="password" value="${jdbc.password}"/>
        <!-- 目标数据库的 URL 地址 -->
        <property name="url" value="${jdbc.url}"/>
        <!-- 数据库驱动全类名 -->
        <property name="driverClassName" value="${jdbc.driver}"/>
    </bean>

    <!--配置SqlSessionFactoryBean 整合MyBatis-->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--配置mybatis全局配置文件的位置-->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
        <!--指定Mapper.xml 配置文件位置  *Mapperx.xml 表示所有的XxxMapper.xml文件-->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>
        <!--装配数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置MapperScannerConfigurer 来扫描Mapper【dao】接口所在的包-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yixuexi.crowd.mapper"/>
    </bean>
</beans>

在webui的pom中添加依赖,因为范围为test的依赖 不能够传递

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <scope>test</scope>
    </dependency>

  • 在写配置文件时, jdbc.username=root root后面千万不要加空格,不然就会报错。

    5. 测试

    在test文件下创建spring测试类

    /**
    * @date: 2021/1/10   15:08
    * @author: 易学习
    * 在类上标记必要的注解,spring整合junit
    * @ContextConfiguration: 加载Spring配置文件
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath:spring-persist-mybatis.xml"})
    public class SpringTest {
      @Autowired
      private AdminMapper adminMapper;
    
      @Autowired
      private DataSource dataSource;
    
      /**
       * 测试数据库连接
       * @throws SQLException
       */
      @Test
      public void testConnection() throws SQLException {
          Connection connection = dataSource.getConnection();
          System.out.println(connection);
      }
    
      /**
       * 测试dao对象是否注入成功
       */
      @Test
      public void testAdminMapper(){
          Admin admin = new Admin();
          admin.setId(1);
          admin.setLoginAcct("root");
          admin.setUserPswd("0000");
          admin.setUserName("tom");
          admin.setEmail("tom@qq.com");
          adminMapper.insert(admin);
      }
    }
    

    6. 思路图

    未命名图片.png