用idea搭建SSM框架(Spring+Spring MVC+MyBatis)详解

Spring MVC + Spring + MyBatis集成

将Spring和MyBatis进行整合,从而使用Spring依赖注入以减少代码的耦合,使用SpringMVC处理请求并作出响应。使用MyBatis更加简捷地完成数据库操作。

1. SSM整合思路分析

三层表现层业务层持久层
框架SpringMVCSpringMyBatis
Spring freamworkspring-webmvc包mybatis核心包mysql驱动包连接池包 druidmybatis-spring支持包
配置文件spring-mvc.xmlapplicationContext.xmlmybatis.xml关于mybatis的配置
  1. 单独使用MyBatis框架
  2. MyBatis整合Spring-需要Mapper实现类
  3. MyBatis整合Spring-Mapper接口扫描
  4. MyBatis整合Spring-加入Spring事务管理
  5. 整合SpringMVC-基本整合
  6. 整合SpringMVC-完成业务层调用

2.使用Maven搭建SSM项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 创建项目所需包

在项目中创建所需包,如下:
#控制器包
com.zhibang.controller
#业务逻辑层包
com.zhibang.service
com.zhibang.service.impl
#持久层包
com.zhibang.dao
# vo po  pojo
com.zhibang.model 或 com.zhibang.domain
#工具包  apache commons 工具类
com.zhibang.util
……
#jsp页面
Webapps  

如图所示:
在这里插入图片描述

4. 创建外部配置文件

在resources中创建jdbc.properties配置文件:


#1.配置数据库环境(数据源 DateSource)
#1.1  mysql生产环境数据源  (数据库服务器的IP地址)
#db.driverClass=com.mysql.jdbc.Driver
#db.url=jdbc:mysql://183.12.3.45:3306/test?useUnicode=true&characterEncoding=UTF-8
#db.username=root
#db.pwd=3306

#1.2  oracle数据源

#1.3  mysql测试环境数据源 (本机数据库的IP地址)
db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/t_student?useUnicode=true&characterEncoding=UTF-8
db.username=root
db.pwd=3306

#2.数据库连接池druid参数
pool.maxActive=20
pool.initialSize=5
pool.maxWait=60000
pool.minIdle=10
pool.timeBetweenEvictionRunsMillis=60000
pool.minEvictableIdleTimeMillis=300000
pool.validationQuery=SELECT 'x'
pool.testWhileIdle=true
pool.testOnBorrow=false
pool.testOnReturn=false
pool.maxOpenPreparedStatements=20
pool.removeAbandoned=true
pool.removeAbandonedTimeout=1800
pool.logAbandoned=true

5. 导入依赖包

在pom.xml中导入SSM基本需要使用到的依赖包:

  1. MySQL数据库驱动包:mysql-connector-java
  2. 数据库连接池支持包:druid
  3. Spring及Spring MVC框架包:spring-webmvc
  4. MyBatis框架核心包:mybatis
  5. Spring对JDBC的支持包:spring-jdbc
  6. Spring对MyBatis支持包:mybatis-spring
<!--引入Junit单元测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<!--导入Servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>

<!-- 引入JSTL标签类依赖 -->  
<dependency>
<groupId>jstl</groupId>  
<artifactId>jstl</artifactId>  
<version>1.2</version>  
</dependency>

<!-- 引入MySQL数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>

<!-- 引入druid数据库连接 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>

<!--SpringMVC、spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>

<!--Spring对JDBC的支持:因为mybatis-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>

<!-- 引入MyBatis框架依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>

<!--MyBatis和Spring整合支持包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

**可选项:**在pom.xml中配置JDK版本:

<build>
   <plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>3.6.1</version>
		<configuration>
			<source>1.8</source>
			<target>1.8</target>
			<encoding>UTF-8</encoding>
		</configuration>
	</plugin>
   </plugins>

</build>

如图所示:
在这里插入图片描述

同时在pom.xml中设置加载Java中的静态文件代码(若Mapper.xml文件不在java中):

注意:若将XxxMapper.xml文件存放在resources/mappers中,以下代码可省略

<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.xml</include>
		</includes>
	</resource>
</resources>

修改web.xml的DTD,支持JSP2.0

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
			
</web-app>

6. 创建Spring核心配置文件

在resources中创建Spring核心配置文件applicationContext.xml,由其配置Spring MVC及MyBatis进行管理。

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


    <!--1. 注解驱动 mvc-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--2. 自动扫描com.zhibang包下所有类中的注解 context-->
    <context:component-scan base-package="com.zhibang"></context:component-scan>

    <!--3. 配置静态资源访问 -->
    <!--静态资源的访问都通过servlet的默认处理器进行处理-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
    <mvc:resources mapping="/images/**" location="/images/"></mvc:resources>

    <!--4. 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置前后缀 -->
        <!-- prefix表示jsp路径的前缀,suffix表示jsp路径的后缀 -->
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--5. 加载外部配置文件properties-->
    <context:property-placeholder location="classpath*:jdbc.properties"></context:property-placeholder>

    <!--6. 配置druid数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--配置数据源四要素-->
        <property name="driverClassName" value="${db.driverClass}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="username" value="${db.username}"></property>
        <property name="password" value="${db.pwd}"></property>

        <!--配置druid连接池参数-->
        <!-- 最大并发连接数 -->
        <property name="maxActive" value="${pool.maxActive}" />
        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${pool.initialSize}" />
    </bean>

    <!--7. 创建sqlSessionFactory,加载mybatis的配置文件,注入数据源 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--引入数据源-->
        <property name="dataSource" ref="dataSource"></property>
        <!--加载XxxxxMapper.xml映射文件-->
        <property name="mapperLocations" value="classpath*:mappers/*.xml"></property>
        <!--为实体包下的类设置别名-->
        <property name="typeAliasesPackage" value="com.zhibang.model"></property>
        <!--加载mybatis-config.xml-->
        <!--<property name="configLocation" value="classpath*:mybatis-config.xml"></property>-->
    </bean>

    <!--8. 向dao层接口注入sqlSessionFactory-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定SqlSessionFactory-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!--指定自动装配的路径:cn.zhibang.dao包下面所有的类(接口)自动装配sqlSessionFactory-->
        <property name="basePackage" value="com.zhibang.dao"></property>
    </bean>
        
    <!--9. 配置事务管理器  在service的impl中可以使用事务-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--配置注解式事务@Transactional  或  非注解式事务<aop:-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>


</beans>

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="logImpl" value="LOG4J2"/>
<!-- 二级缓存开启 -->
<setting name="cacheEnabled" value="true"/>
<!-- 禁用懒加载 -->
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/>
</settings>

<!--设置别名-->
<typeAliases>
    <package name="com.zhibang.ssmname.model"></package>
</typeAliases>

</configuration>

7. 创建持久类

根据数据库表t_student,在com.zhibang.model包中创建映射持久类student。

@Component
public class Student implements Serializable {
    private Integer userId;
    private String userName;
    private String password;
    private Integer age;
    //封装set/get方法
}

8. 创建Dao层接口

在com.zhibang.dao包中创建student类的接口,编写CRUD方法。

@Repository
public interface StudentMapper {
    /**
    * 查询
    */
    Public List<Student> queryStudent();
}

9. 配置Dao层映射文件

在com.zhibang.model包中创建Student类的Mapper文件:StudentMapper.xml

<?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="com.zhibang.dao.StudentMapper">
//写增删改查
<select id="queryStudent" resultType="Student">
    select * from ta_student 
</select>

</mapper>

10. 创建Service层接口

在com.zhibang.service中创建Service层的接口StudentService,由Biz层继承Dao层接口,如下:

public interface StudentService {
    /**
     * 查询
     * @return
     */
    Public List<Student> queryStudent();
}

11. 创建Service层接口实现类

在com.zhibang.service.impl包中创建Service层的实现类StudentServiceImpl,如下:

@Service
public class StudentServiceimpl implements StudentService {
    @Autowired
    private Student student;
    @Override
    public List<Student> queryStudent() {
        return student.queryStudent();
    }
}

12. 配置web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1"
         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_3_1.xsd">

    <!--欢迎页面-->
    <!--<welcome-file-list>-->
        <!--<welcome-file>index.jsp</welcome-file>-->
        <!--<welcome-file>index.html</welcome-file>-->
        <!--<welcome-file>default.jsp</welcome-file>-->
    <!--</welcome-file-list>-->
    <!--上下文参数-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>
    <!--spring监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--1.配置前端控制器-->
    <servlet>
        <servlet-name>ssm</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化参数,只针对DispatcherServlet-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:applicationContext.xml</param-value>
        </init-param>
        <!--启动加载顺序-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ssm</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--配置druid的servlet-->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

    <!-- 配置请求编码UTF-8(可选)-->
    <filter>
        <filter-name>encode</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>encode</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  </web-app>

13. 编写Controller

Controller类用于对接View层,对接Biz层。

在com.zhibang.controller包中创建StudentController,如下:

@Controller
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/student",method = RequestMethod.GET)
    public String queryStudentTest() throws Exception{
        System.out.println("正常执行!");
        List<Student> models = studentService.queryStudent();
        if(models != null){
            for (Student st:models
            ) {
                System.out.println(st);
            }
            return "redirect:list.jsp";
        }else {
            return "redirect:student";
        }

    }
}

14. View前端

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学生信息</title>
</head>
<body>
  <h2>lll</h2>
  <a href="student">测试</a>
</body>
</html>

15. 乱码问题

乱码,如图所示:
在这里插入图片描述
在这里插入图片描述

配置查询数据库里面数据乱码:-Dfile.encoding=UTF-8

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值