一、目录:
- 数据库表创建规则
2. mybatis逆向工程
3. Maven父工程依赖管理
4. spring整合MyBatis1. 项目经验
目标:聚焦当前要完成的任务,目标明确之后才能够分析实现思路
思路:针对目标的达成进行分析,具体到项目功能的实际开发中。体现为流程图
代码:参照流程图,把步骤翻译成写代码时的注释,对照注释写代码2. 创建数据库和数据库表
- 物理建模
- 理论:
- 第一范式:数据库表中的每一列都不可再分,也就是原子性,并且每个表都应该有主键
- 第二范式:在满足第一范式基础上要求每个字段都和主键完整相关,而不是仅和主键部分相关(少用联合主键)
- 第三范式:非主键字段和主键字段都直接相关,不允许间接相关
- 三大范式是设计数据库表结构的规则约束,但是在实际开发中允许局部变通。
- 冗余字段:
在resources下创建一个generatorConfig.xml 文件 逆向工程
```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>
<!-- mybatis-generator:generate -->
<context id="atguiguTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是;false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection
driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/project_crowd" userId="root" password="0000">
</jdbcConnection>
<!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把
JDBC DECIMAL
和 NUMERIC 类型解析为 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成 Entity 类的路径 -->
<javaModelGenerator targetProject=".\src\main\java"
targetPackage="com.yixuexi.crowd.entity">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
<sqlMapGenerator targetProject=".\src\main\java"
targetPackage="com.yixuexi.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:Mapper 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetProject=".\src\main\java"
targetPackage="com.yixuexi.crowd.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
<table tableName="t_admin" domainObjectName="Admin" />
</context>
</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. 思路图