ssm(spring + Springmvc + mybatis)框架整合 · 笔记

整合完的工程目录结构
在这里插入图片描述
依赖包
在这里插入图片描述

一、环境配置

材料准备:
  • JDK1.8
  • Maven
  • Tomcat7
  • Eclipse
  • MySQL

1、下载完后的maven配置:

(1)配置本地仓库 :打开conf文件夹中的 settings.xml 将蓝下滑线中的内容复制出来填写自己的本地仓库地址
在这里插入图片描述

<localRepository>目标位置( 例:D:\myProject\myRepository )</localRepository>

(2)配置阿里云镜像源 :在<mirrors></mirrors>标签里面增加:

<!-- 阿里云仓库 --> 
<mirror>
    <id>alimaven</id> 
    <mirrorOf>central</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> 
</mirror>

(3)配置创建工程时的 jdk依赖的版本 :在<profiles></profiles>标签中添加:

<profile>
	<id>jdk-1.8</id> 
	<activation>
		<activeByDefault>true</activeByDefault> 
		<jdk>1.8</jdk> 
	</activation>
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source> 
		<maven.compiler.target>1.8</maven.compiler.target> 
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> 
	</properties>
</profile>

2、Eclipse配置:

(1)配置maven
配置你的settings.xml文件位置,update 之后,确定就好了
在这里插入图片描述
(2)配置tomcat
在这里插入图片描述
在这里插入图片描述
然后会发现多了新创建的tomcat服务
在这里插入图片描述
选中,再点击旁边的edit按钮,选择自己的tomcat位置,和jre版本
在这里插入图片描述

二、创建工程,导包

maven中央仓库

导入的包有:

  • spring-webmvc、spring jdbc、spring-aspects
  • mybatis
  • mybatis-spring
  • c3p0、mysql-connector-java
  • junit、servlet-api、jstl

pom.xml 内容

<dependencies>

        <!--springmvc-->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<!-- spring jdbc -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		
		<!-- spring面向切面 -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<!-- mybatis -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.4.2</version>
		</dependency>
		
		<!-- mybatis 整合spring的适配包 -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>1.3.1</version>
		</dependency>
		
		<!-- 数据库连接池、驱动 -->				
		<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
		<dependency>
		    <groupId>c3p0</groupId>
		    <artifactId>c3p0</artifactId>
		    <version>0.9.1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>5.1.41</version>
		</dependency>
		
		<!-- junit servlet-api jstl -->
		<!-- https://mvnrepository.com/artifact/jstl/jstl -->
		<dependency>
		    <groupId>jstl</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
		<dependency> 
		    <groupId>javax.servlet</groupId>
		    <artifactId>servlet-api</artifactId>
		    <version>2.5</version>
		    <scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>4.12</version>
		    <scope>test</scope>
		</dependency>
						
		
	</dependencies>

其余要使用的包,在使用时再导入

三、写配置文件

web.xml

    <!-- 启动spring的容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- springMVC 的前端控制器 , 拦截所有的请求-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!-- 字符编码过滤器 一定要放在所有的过滤器前面-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceRequestEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>forceRseponseEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- 使用rest风格的URL 将页面请求的普通URL转换成delete或者put请求 -->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

springMVC的配置dispatcherServlet-servlet.xml

    <!-- springMVC的配置文件,包含网站的跳转逻辑的控制 -->
    <context:component-scan base-package="com.ssm" use-default-filters="false">
        <!-- 只扫描控制器 -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!-- 配置视图解析器,方便返回页面内容 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!-- 两个标准配置 -->
    <!-- 将springMVC不能处理的请求交给Tomcat处理 -->
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>

引入了使用 aoptx 功能,spring配置文件头:(spring配置文件头解析)

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    ...

</beans>

(为什么在Spring的配置里,最好不要配置xsd文件的版本号?)
可查看这篇博文 点击这里

spring配置文件aplicationContext.xml

<!-- 数据源,事物控制等 -->
<context:property-placeholder location="classpath:dbconfig.properties" />
<bean id="PooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="user" value="${jdbc.user}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>


<!-- 配置和mybatis的整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 指定mybatis全局配置文件的位置 -->
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>	
    <property name="dataSource" ref="PooledDataSource"></property>
    <!-- 指定mybatis的mapper文件 -->
    <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>


<!-- 配置扫描器,将mybatis接口的实现加入到IOC容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描所有的dao接口的实现,加入到ioc容器中 -->
    <property name="basePackage" value="com.ssm.crud.dao"></property>
</bean>


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 控制数据源 -->
    <property name="dataSource" ref="PooledDataSource"></property>
</bean>


<!-- 使用xml配置形式的事物 -->
<aop:config>
    <!-- 切入点表达式 -->
    <aop:pointcut expression="execution(* com.ssm.crud.service..*(..))" id="txPoint"/>
    <!-- 配置事物增强 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
</aop:config>


<!-- 配置事物增强,事物如何切入 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>   
        <tx:method name="get*" read-only="true"/>    
    </tx:attributes>
</tx:advice>

<!-- spring配置的核心:数据源、与mybatis的整合、事物控制 -->

mybatis全局配置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>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.ssm.crud.bean"/>
    </typeAliases>
</configuration>

四、Mybatis逆向工程

安装数据库 >>
创建表 create…

1、逆向工程配置和使用:

mybatis generater手册

导入逆向工程使用的 jar 包

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>

逆向工程的配置文件:mbg.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>
	<context id="DB2Tables" targetRuntime="MyBatis3">
	    <!-- 是否生成注释 -->
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!-- 配置数据库 -->
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/ssm_crud?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false&amp;" 
			userId="root" 
			password="123456">
		</jdbcConnection>
		
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>
		<!-- 指定javabean生成的位置 -->
		<javaModelGenerator
			targetPackage="com.ssm.crud.bean" targetProject=".\src\main\java">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		<!-- 指定sql映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="mapper"
			targetProject="./src/main/resources">
			<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>
		<!-- 指定dao接口生成的位置,mapper接口 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.ssm.crud.dao" targetProject=".\src\main\java" />
		<!-- 指定每个的生成策略 -->
		<table tableName="tbl_emp" domainObjectName="Employee"></table>
		<table tableName="tbl_dept" domainObjectName="Department"></table>
	</context>
</generatorConfiguration>

使用 java代码+配置文件的方式来跑逆向工程:
MBGTest.java

package com.ssm.crud.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.exception.*;
import org.mybatis.generator.internal.*;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.*;
import org.mybatis.generator.config.xml.ConfigurationParser;

public class MBGTest {

	public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback cellback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, cellback, warnings);
	    myBatisGenerator.generate(null);
	}

}

(运行java代码,生成的文件还需要修改以适应自己开发所需的业务逻辑)

注意:要重新生成代码一定要删掉之前生成的,避免重复

逆向工程可能出现的问题:

1.数据库版本8之后与之前所使用的身份验证插件不一样(身份验证插件 caching_sha2_password
使用8.0.9或更高版本的数据库连接驱动jar包

新老驱动路径:
老:driverClass="com.mysql.jdbc.Driver"
新:driverClass="com.mysql.cj.jdbc.Driver"

2.时间格式问题,就在jdbc连接的url后面加上参数

connectionURL="jdbc:mysql://localhost:3306/ssm_crud?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false&amp;"

五、测试

后面有测试可能出现的问题和解决方法

1、测试插入
Department t1 = new Department();
t1.setDeptId(null);
t1.setDeptName("信息部");
Department t2 = new Department();
t2.setDeptId(null);
t2.setDeptName("技术部");

departmentMapper.insertSelective(t1);
departmentMapper.insertSelective(t2);
//这里插入两条数据

在这里插入图片描述

2、测试批量操作

添加批量操作:applicationContext.xml 添加以下内容

<!-- 配置一个可以执行批量的sqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
	    <constructor-arg name="executorType" value="BATCH"></constructor-arg>
	</bean>

java代码

    //批量插入1000条信息
    EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
	for (int i = 0; i < 1000; i++) {
		String name = UUID.randomUUID().toString().substring(0, 5) + i;
		
		Employee e1 = new Employee();
		e1.setdId(1);
		e1.setEmail(name + "@tom.com");
		e1.setEmpName(name);
		e1.setGender("M");
		
		mapper.insertSelective(e1);
	} 

测试成功
在这里插入图片描述

测试过程出现的问题:

1、找不到com.mchange.v2.c3p0.ComboPooledDataSource

更换高版本的 c3p0 解决问题
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

2、Public Key Retrieval is not allowed 错误:mysql链接添加


allowPublicKeyRetrieval=true







猜你喜欢

转载自blog.csdn.net/kavierPeng/article/details/82748783
今日推荐