1 快速从零开始整合SSM,小白包会

       整合SSM,关键就是几个xml的配置.准备:1.   Idea(配置好tomcat,可以安装插件freeMybatis,提高效率,安装插件不难,百度经验就有)2.   下载好数据库MySql,以及可视化管理软件3.   一双手,宝贵的半个小时4.   对SSM,有认识,后面我会继续写有关这三个框架的内容.开始:首先,明确我们这里的工作:
建立一个通用的SSM项目,或者知道快速建立它的方法,以便于后面有什么项目,分析完可以直接就上手,避免在初始化项目,整合框架时耗费时间.
        工作目标:
待会如果我们将存储在数据库里面表的信息在控制台打印出来了,那么Spring与MyBatis整合成功,如果在前端页面显示了数据库的数据,那么可以说三个框架整合成功.
【1 快速从零开始整合SSM,小白包会】 
提示:成功一次之后,可以反反复复多建几次,到达熟练,也可以保存模板,后面直接用.我就是从零开始边建项目边写这个博客,我都完成了,你照着来应该不会错.
    毒鸡汤:在这个过程中,可能会遇到很多麻烦,但大部分都可以百度解决,也有可能被误导,但不管怎么样结果是一定成功的,毕竟它具有可预测性和有限性,而只要成功一次就可以保证成功无数次.
 我还是个小白,第一次写博客(马上要期末考试了,哈哈),希望以这种方式来记录一下自己踩过的坑,都是自己慢慢摸出来的,不科学也不规范,我也希望大佬们可以多多指导.第一步,在Idea上面新建一个项目:

1 快速从零开始整合SSM,小白包会

文章插图
 
1 快速从零开始整合SSM,小白包会

文章插图
 此时项目应该是白的,这个样子:
1 快速从零开始整合SSM,小白包会

文章插图
我们下面建几个包和配置文件:
1 快速从零开始整合SSM,小白包会

文章插图
 在config下面建立这些配置文件(这其实就是核心的配置,文件内容先不管,后面直接复制):
1 快速从零开始整合SSM,小白包会

文章插图
下面导入jar包,可以选择自动下载,或者直接使用Maven项目来添加,这里我们手动添加:
1 快速从零开始整合SSM,小白包会

文章插图
 
1 快速从零开始整合SSM,小白包会

文章插图
 把自己的准备Jar包统统导进来即可. 再做一点小手脚,标识一下文件(test包是刚刚建的,就是一个普通的包,所以没有截图):
1 快速从零开始整合SSM,小白包会

文章插图
项目就是这个样子了:
1 快速从零开始整合SSM,小白包会

文章插图
至此, 第一步初始化项目完成,已经完成70%了.
第二步:使项目可以跑起来,在前端页面可以看到数据库的存储的信息.1. 配置tomcat,把刚刚的建的配置文件加上内容.
2. 在数据库里面新加一表,插入一条测试数据,并为该表建立mapper文件,和接口(可以使用插件完成).
3.简单的编写一下,开始测试.
 1.配置Tomcat,比较简单,就不步步展示了.后面放假了可以详细的写一下. 2.各个配置文件的内容:applicationContext.xml :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4xmlns:context="http://www.springframework.org/schema/context" 5xmlns:tx="http://www.springframework.org/schema/tx" 6xsi:schemaLocation="http://www.springframework.org/schema/beans 7http://www.springframework.org/schema/beans/spring-beans.xsd 8http://www.springframework.org/schema/context 9https://www.springframework.org/schema/context/spring-context.xsd10http://www.springframework.org/schema/tx11http://www.springframework.org/schema/tx/spring-tx.xsd">12<!--配置数据源-->13<context:property-placeholder location="classpath:config/db.properties"/>14<context:component-scan base-package="service"/>15<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">16<property name="driverClassName" value="https://tazarkount.com/read/${jdbc.driver}"/>17<property name="url" value="https://tazarkount.com/read/${jdbc.url}"/>18<property name="username" value="https://tazarkount.com/read/${jdbc.username}"/>19<property name="password" value="https://tazarkount.com/read/${jdbc.password}"/>20<property name="maxIdle" value="https://tazarkount.com/read/${jdbc.maxIdle}"/>21<property name="initialSize" value="https://tazarkount.com/read/${jdbc.initialSize}"/>22</bean>2324<!--mybatis-->25<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">26<property name="basePackage" value="https://tazarkount.com/read/mapper"/>27</bean>28<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">29<property name="dataSource" ref="dataSource"/>30<property name="configLocation" value="https://tazarkount.com/read/classpath:config/Mybatis-config.xml"/>31</bean>3233<!--事务管理-->34<bean id="myTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">35<property name="dataSource" ref="dataSource"/>36</bean>37<tx:annotation-driven transaction-manager="myTransactionManager"/>38<!-- <aop:aspectj-autoproxy proxy-target-class="true"/>-->39 </beans>View Codedb.properties(要根据自己的数据库更改) :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
1 jdbc.driver=com.mysql.jdbc.Driver2 jdbc.url=jdbc:mysql://localhost:3308/exam?useUnicode=true&characterEncoding=utf8&useSSL=false3 jdbc.username=root4 jdbc.password=1234565 jdbc.maxTotal=306 jdbc.maxIdle=107 jdbc.initialSize=5View Codelog4j.properties :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
1 # Global logging configuration2 log4j.rootLogger=ERROR, stdout3 # MyBatis logging configuration...4 log4j.logger.org.mybatis.example.BlogMapper=DEBUG5 # Console output...6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout8 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nView Codemybatis-config.xml :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration3PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4"http://mybatis.org/dtd/mybatis-3-config.dtd">5 <configuration>6<typeAliases>7<package name="po"/>8</typeAliases>9 </configuration>View Codespringmvc-config.xml :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
<?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"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="controller"/><mvc:annotation-driven/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="https://tazarkount.com/WEB-INF/jsp/"/><property name="suffix" value="https://tazarkount.com/read/.jsp"/></bean></beans>View Code web.xml
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--Spring--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--编码过滤器--><filter><filter-name>encoding</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></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>*.action</url-pattern></filter-mapping><!--spring Mvc--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/springmvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>View Code   3.在数据库里面建表,插入一条数据.
1 快速从零开始整合SSM,小白包会

文章插图
 4.使用插件生成这个测试表的mapper文件和dao接口最后生成的项目结构:
1 快速从零开始整合SSM,小白包会

文章插图
生成具体的代码(这都是插件自动生成的,省事):
UserDao接口 :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
package mapper;import org.springframework.transaction.annotation.Transactional;import po.User;@Transactionalpublic interface UserDao {int deleteByPrimaryKey(Integer id);int insert(User record);int insertSelective(User record);User selectByPrimaryKey(Integer id);int updateByPrimaryKeySelective(User record);int updateByPrimaryKey(User record);}View CodeUserDao.xml :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="mapper.UserDao"><resultMap id="BaseResultMap" type="po.User"><id column="user_id" jdbcType="INTEGER" property="id" /><result column="user_userName" jdbcType="VARCHAR" property="userName" /><result column="user_passWord" jdbcType="VARCHAR" property="passWord" /><result column="user_phone" jdbcType="VARCHAR" property="phone" /><result column="user_realName" jdbcType="VARCHAR" property="realName" /><result column="user_sex" jdbcType="VARCHAR" property="sex" /><result column="user_address" jdbcType="VARCHAR" property="address" /><result column="user_email" jdbcType="VARCHAR" property="email" /></resultMap><sql id="Base_Column_List">user.id as user_id, user.userName as user_userName, user.`passWord` as `user_passWord`,user.phone as user_phone, user.realName as user_realName, user.sex as user_sex, user.address as user_address,user.email as user_email</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select<include refid="Base_Column_List" />from user userwhere user.id = #{id,jdbcType=INTEGER}</select><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from userwhere id = #{id,jdbcType=INTEGER}</delete><insert id="insert" keyColumn="id" keyProperty="id" parameterType="po.User" useGeneratedKeys="true">insert into user (userName, `passWord`, phone,realName, sex, address,email)values (#{userName,jdbcType=VARCHAR}, #{passWord,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR},#{realName,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR},#{email,jdbcType=VARCHAR})</insert><insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="po.User" useGeneratedKeys="true">insert into user<trim prefix="(" suffix=")" suffixOverrides=","><if test="userName != null">userName,</if><if test="passWord != null">`passWord`,</if><if test="phone != null">phone,</if><if test="realName != null">realName,</if><if test="sex != null">sex,</if><if test="address != null">address,</if><if test="email != null">email,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="userName != null">#{userName,jdbcType=VARCHAR},</if><if test="passWord != null">#{passWord,jdbcType=VARCHAR},</if><if test="phone != null">#{phone,jdbcType=VARCHAR},</if><if test="realName != null">#{realName,jdbcType=VARCHAR},</if><if test="sex != null">#{sex,jdbcType=VARCHAR},</if><if test="address != null">#{address,jdbcType=VARCHAR},</if><if test="email != null">#{email,jdbcType=VARCHAR},</if></trim></insert><update id="updateByPrimaryKeySelective" parameterType="po.User">update user<set><if test="userName != null">userName = #{userName,jdbcType=VARCHAR},</if><if test="passWord != null">`passWord` = #{passWord,jdbcType=VARCHAR},</if><if test="phone != null">phone = #{phone,jdbcType=VARCHAR},</if><if test="realName != null">realName = #{realName,jdbcType=VARCHAR},</if><if test="sex != null">sex = #{sex,jdbcType=VARCHAR},</if><if test="address != null">address = #{address,jdbcType=VARCHAR},</if><if test="email != null">email = #{email,jdbcType=VARCHAR},</if></set>where id = #{id,jdbcType=INTEGER}</update><update id="updateByPrimaryKey" parameterType="po.User">update userset userName = #{userName,jdbcType=VARCHAR},`passWord` = #{passWord,jdbcType=VARCHAR},phone = #{phone,jdbcType=VARCHAR},realName = #{realName,jdbcType=VARCHAR},sex = #{sex,jdbcType=VARCHAR},address = #{address,jdbcType=VARCHAR},email = #{email,jdbcType=VARCHAR}where id = #{id,jdbcType=INTEGER}</update></mapper>View CodeUser类 : 
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
package po;import java.io.Serializable;/** * user * @author*/public class User implements Serializable {/*** id,主键*/private Integer id;/*** 账户*/private String userName;/*** 密码*/private String passWord;/*** 手机号码*/private String phone;/*** 真实姓名*/private String realName;/*** 性别*/private String sex;/*** 地址(收货)*/private String address;/*** 电子邮件*/private String email;private static final long serialVersionUID = 1L;@Overridepublic boolean equals(Object that) {if (this == that) {return true;}if (that == null) {return false;}if (getClass() != that.getClass()) {return false;}User other = (User) that;return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))&& (this.getUserName() == null ? other.getUserName() == null : this.getUserName().equals(other.getUserName()))&& (this.getPassWord() == null ? other.getPassWord() == null : this.getPassWord().equals(other.getPassWord()))&& (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone()))&& (this.getRealName() == null ? other.getRealName() == null : this.getRealName().equals(other.getRealName()))&& (this.getSex() == null ? other.getSex() == null : this.getSex().equals(other.getSex()))&& (this.getAddress() == null ? other.getAddress() == null : this.getAddress().equals(other.getAddress()))&& (this.getEmail() == null ? other.getEmail() == null : this.getEmail().equals(other.getEmail()));}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getRealName() {return realName;}public void setRealName(String realName) {this.realName = realName;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public static long getSerialVersionUID() {return serialVersionUID;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((getId() == null) ? 0 : getId().hashCode());result = prime * result + ((getUserName() == null) ? 0 : getUserName().hashCode());result = prime * result + ((getPassWord() == null) ? 0 : getPassWord().hashCode());result = prime * result + ((getPhone() == null) ? 0 : getPhone().hashCode());result = prime * result + ((getRealName() == null) ? 0 : getRealName().hashCode());result = prime * result + ((getSex() == null) ? 0 : getSex().hashCode());result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode());result = prime * result + ((getEmail() == null) ? 0 : getEmail().hashCode());return result;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", id=").append(id);sb.append(", userName=").append(userName);sb.append(", passWord=").append(passWord);sb.append(", phone=").append(phone);sb.append(", realName=").append(realName);sb.append(", sex=").append(sex);sb.append(", address=").append(address);sb.append(", email=").append(email);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}}View Code 5.测试Spring与Mybatis的基本整合1.在test包下面建一个Test类,用来测试 :
1 快速从零开始整合SSM,小白包会

文章插图
  其内容分别为:
Test类 :
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
import mapper.UserDao;import org.springframework.context.ApplicationContext;import util.SpringUtil;/** * test * * @author Mr.green * @date 2021/11/21 17:27 */public class Test {@org.junit.jupiter.api.Testvoid test(){ApplicationContext applicationContext= SpringUtil.getApplicationContext();System.out.println(applicationContext.getBean(UserDao.class).selectByPrimaryKey(1));}}View CodeSpringUtil类:
1 快速从零开始整合SSM,小白包会

文章插图
1 快速从零开始整合SSM,小白包会

文章插图
1 package util; 23 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 56 /** 7* Spring 8* 9* @author Mr.green10* @date 2021/11/21 17:2811*/12 public class SpringUtil {13/*获取spring上下文解析器*/14static public ApplicationContext getApplicationContext(){15returnnew ClassPathXmlApplicationContext("config/applicationContext.xml");16}17 18 19 }View Code直接开始测试 :
1 快速从零开始整合SSM,小白包会

文章插图
Nice,Spring与Mybatis整合成功.
6.测试Sping,Mybatis,SpringMvc的整合1.建一个jsp页面,用来显示数据库的数据
2.建一个controller响应处理前端的请求
1:  建一个jsp页面  
1 快速从零开始整合SSM,小白包会

文章插图
    a.jsp的内容:
<%--Created by IntelliJ IDEA.User: PhilosohyDate: 2021/11/22Time: 13:41To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${user.id}<br>${user.userName}<br>${user.passWord}<br></body></html>2 .建一个controller: 
1 快速从零开始整合SSM,小白包会

文章插图
   其内容:
package controller;import util.SpringUtil;import mapper.UserDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/** * test * * @author Mr.green * @date 2021/11/21 18:23 */@Controllerpublic class TestController {@RequestMapping("/test")public String test(Integer id, Model model){ApplicationContext applicationContext= SpringUtil.getApplicationContext();model.addAttribute("user",applicationContext.getBean(UserDao.class).selectByPrimaryKey(1));return "a";}} 3.开始测试,启动项目,在跳出来的网页后面加上test : 
1 快速从零开始整合SSM,小白包会

文章插图
这不就飞起了!!!!