1.使用框架为SSM(spring,springMVC,MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
MyBatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
2.使用的数据库是MySQL数据库,后期会简单说明安装使用pgsql数据库和oracle数据库;
3.使用的开发工具是idea,项目管理工具是maven
4.主要实现的功能是 登陆页面,然后连接数据库实现CRUD
5.ORM对象关系映射思想,三层架构思想(表现层,业务逻辑层,持久层)
6.我会在最后放pom.xml的配置信息和依赖
7.整合策略
先整合Spring、Mybatis框架,Mybatis整合Spring后整合SpringMVC
然后在已有整合的基础上开发一个SpringMVC的入门案例而已
8.整合目标(原来Mybatis中的一些配置等交给Spring去管理)
1.数据库连接池以及事务管理都交给Spring容器来完成
2.SqlSessionFactory对象应该放到Spring容器中作为单例对象管理
3.Mapper动态代理对象交给Spring管理,我们从Spring容器中直接获得Mapper的代理对象(sqlSession.getMapper(XXX.class),现在直接从Spring容器中获得需要使用的dao层mapper代理对象【直接注入对象使用】)
9.整合所需jar分析
1.Junit测试jar
2.Mybatis的jar
3.Spring相关jar(spring-context、spring-test、spring-jdbc、spring-tx、spring-aop、aspectjweaver)
4.Mybatis/Spring整合包jar Mybatis-spring-xxx.jar(mybatis官方维护的一个jar)
5.Mysql数据库驱动jar
6.druid数据库连接池的jar
7.Log4j日志jar
一、框架环境的搭建
1.直接使用maven的骨架创建一个webapp的项目




刚开始进来,会加载一下,成功之后就是这样

目前目录是下面这样的

现在开始补全包哈 创建一个java包 一定记得去添加属性


整体项目的结构
一、实体类pojo的编写:Student.java,之前这里我们每次都会引用setter和getter,包括tostring的方法,可是用了这个spring的框架之后,这里就可以省略,是的代码看起来更舒服,更加的简洁。
package com.myssm.pojo;
/**
* @author lj
* @Create 2020-12-22-15:12
* @description 实体类
*/
public class Student {
private int id;
private String name;
private String sex;
private String address;
// 因为spring的@Autowired注释来做依赖注入 ,所以这里省略了 setter和getter tostring的方法
}
二、写业务层的StudentService接口
package com.myssm.service;
import com.myssm.pojo.Student;
import java.util.List;
/**
* @author lj
* @Create 2020-12-22-15:13
* @description 业务层 增删改查是数据库的学生信息
*/
public interface StudentService {
// 1.根据学生的id查询一条信息
Student selectById(int id);
// 2.插入一条学生信息
void insertData(Student student);
//更新一条数据
void updata(Student student);
//3.查询所有学生的信息
List<Student> findAll();
//4.根据学生id删除一条数据
void deleteById(int id);
}

二、写DAO层 持久层 StudentMapper接口(其实这里就是和实体类之间做了映射)
package com.myssm.dao;
import com.myssm.pojo.Student;
import java.util.List;
/**
* @author lj
* @Create 2020-12-22-15:12
* @description
*/
public interface StudentMapper {
// 1.根据学生的id查询一条信息
Student selectById(int id);
// 2.插入一条学生信息
void insertData(Student student);
//更新一条数据
void updata(Student student);
//3.查询所有学生的信息
List<Student> findAll();
//4.根据学生id删除一条数据
void deleteById(int id);
}

四、写业务层 StudentService接口的实现类:StudentServiceImpl
package com.myssm.service.impl;
import com.myssm.dao.StudentMapper;
import com.myssm.pojo.Student;
import com.myssm.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author lj
* @Create 2020-12-22-15:33
* @description
*/
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public Student selectById(int id) {
return studentMapper.selectById(id);
}
@Override
public void insertData(Student student) {
studentMapper.insertData(student);
}
@Override
public void updata(Student student) {
studentMapper.updata(student);
}
@Override
public List<Student> findAll() {
return studentMapper.findAll();
}
@Override
public void deleteById(int id) {
studentMapper.deleteById(id);
}
}

五、写控制类
StudentController类就是一个controller
备注:由于StudentController类加了value="/student"的“@RequestMapping”的注解,所有相关路径都要加上"/student",即请求的url分别为:
http://127.0.0.1:8080/student/title
http://127.0.0.1:8080/student/content
“@RequestMapping"的value值前后是否有“/”对请求的路径没有影响,即value=“student”
、”/student"、"/student/"其效果是一样的“@RequestMapping” 的属性
value: 指定请求的实际url
- 普通的具体值。如前面的value="/student"。
- 含某变量的一类值 @RequestMapping(value="/get/{studentId}")
public String getStudentById(@PathVariable String studentId,Model model){
model.addAttribute(“studentId”, studentId);
return “student”;
} 路径中的StudentId可以当变量,@PathVariable 注解即提取路径中的变量值
使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring
MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。具体作用:
1、返回指定页面
ModelAndView构造方法可以指定返回的页面名称,
也可以通过setViewName()方法跳转到指定的页面 ,
2、返回所需数值
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。

package com.myssm.controller;
import com.myssm.pojo.Student;
import com.myssm.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* @author lj
* @Create 2020-12-22-15:11
* @description
*
* 在某类前面加上:@Controller ,表明某类是一个controller
* @RequestMapping 请求路径映射,如果标注在某个controller的类级别上,
* 则表明访问此类路径下的方法都要加上其配置的路径;
* 最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求
*/
@Controller
@RequestMapping(value = "/student")
public class StudentController {
@Autowired
private StudentService studentService;
//最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求
@RequestMapping(value = "/findAll")
public ModelAndView findAll(){
List<Student> students = studentService.findAll();
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("student",students);
modelAndView.setViewName("students/findAll");
return modelAndView;
}
}
六、表现层的包补齐如下:
其实就是在pages页面:页面是welcome欢迎的页面,进去页面有一个学生信息的页面students,页面信息展示的是findAll查询到的所有信息返回页面。



<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查看所有学生的信息</title>
</head>
<body>
<!--返回信息以表格的形式 设置表格的变宽和大小-->
<table border="1px solid black" cellspacing="0px">
<!--for循环-->
<c:forEach var="stu" items="${students}">
<tr>
<td>${stu.id}</td>
<td>${stu.stuName}</td>
<td>${stu.sex}</td>
<td>${stu.stuAddress}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
七、创建配置文件,并且开始写配置文件

数据库的配置文件:
> jdbc.driver=com.mysql.cj.jdbc.Driver
> jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
> jdbc.username=root jdbc.password=1234



注意:这里需要修改成自己的包路径,以及自己的配置文件路径
<?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">
<!--扫描service层的类-->
<context:component-scan base-package="com.myssm.service"/>
<!--加载数据库配置文件-->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="locations" value="classpath:config/jdbcConfig.properties"/>
</bean>
<!--druid数据库连接池-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置mybaits的SqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="druidDataSource"/>
<property name="configLocation" value="classpath:config/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!--使用mybaits接口代理开发模式-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--扫描dao接口所在的包-->
<property name="basePackage" value="com.myssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>

mybatis配置文件resources/config/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>
<properties resource="config/jdbcConfig.properties">
<!--<property name="password" value="F2Fa3!33TYyg"/>-->
</properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
这里的springmvc配置文件

<?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
https://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">
<!--开启注解扫描,扫描controller层-->
<context:component-scan base-package="com.myssm.controller"/>
<!--视图解析器-->
<bean id="internalVeiwResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--mvc注解支持-->
<mvc:annotation-driven/>
</beans>
映射文件resources/mapper/StudentMapper.xml

<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.myssm.dao.StudentMapper">
<select id="findAll" resultType="com.myssm.pojo.Student">
select * from t_student
</select>
<select id="selectById" parameterType="int" resultType="com.myssm.pojo.Student">
select * from t_student where id = #{id}
</select>
<insert id="insert" parameterType="com.myssm.pojo.Student"
useGeneratedKeys="true" keyProperty="id">
insert into t_student(stu_name, sex, stu_address) values(#{name}, #{sex}, #{address})
</insert>
<update id="update" parameterType="com.myssm.pojo.Student">
update t_student set
stu_name = #{name},
sex = #{sex},
stu_address = #{address}
where id = #{id}
</update>
<delete id="deleteById" parameterType="int">
delete from t_student where id = #{id}
</delete>
</mapper>
全局配置文件webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--配置监听器,加载/WEB-INF目录下的配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--加载applicationContext.xml-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/applicationContext.xml</param-value>
</context-param>
<!--log4j2-->
<context-param>
<param-name>log4jConfigurationLocation</param-name>
<param-value>classpath:/config/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshIntervel</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<!--解决post请求中文乱码的过滤器-->
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置前端控制器DispatcherServlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/config/springmvc.xml</param-value>
</init-param>
<!--服务器启动的时候,让DispatcherServlet对象创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
创建数据库表
CREATE TABLE
t_student(idint NOT NULL AUTO_INCREMENT,
stu_namevarchar(30) DEFAULT NULL,sexchar(1) DEFAULT NULL,
stu_addressvarchar(30) DEFAULT NULL, PRIMARY KEY (id) )
ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO
t_studentVALUES
(1,‘tom’,‘f’,‘shanghai’),(3,‘lisa’,‘m’,‘tianjin’),(4,‘george’,‘f’,‘hunan’);
开始测试:




本文介绍了如何使用IDEA、Maven搭建SSM(Spring、SpringMVC、MyBatis)框架,并实现MySQL数据库的增删改查功能。详细讲解了Spring的IoC思想、SpringMVC的作用以及MyBatis的数据库操作。同时,文章还涵盖了项目结构、配置文件、数据库表创建以及测试过程。
&spm=1001.2101.3001.5002&articleId=111541351&d=1&t=3&u=0324225c9d2a48ba859a12f3928dccad)
2080

被折叠的 条评论
为什么被折叠?



