众所周知,eclipse由于免费,各方面的方便程度确实不如idea,但是这时候老板偏偏让你用eclipse运行ssm项目,咱还是得会呀,卷死那些不会的!
先初始化一个dynamic web project ,在这里我就遇到了我的第一个bug。因为我没有这个所谓的动态web工程,不过还好,略微一百度,就解决了。
都知道eclipse 下载的有多慢,我等的很无语,甚至都在思考为什么eclipse为什么打开内置网页可以这么慢,没有缓存吗?为Eclipse以后可以快一点而学习ssm’项目?
3.然后这时候基本上就有一个Dynamic web project的选项,没找到的在other里面找找,new一下子,随便起个名字。
这是大致的工程目录,可能有不同,因为我删了一点,但是本质一些就行,有web目录,也有java目录。记得有些文件要左键->build path->as a source folder.
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>MybatisTestSSM</display-name>
<!--
// spring configure needer for ContextLoaderListener
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- BootStraps the root web application context before servlet -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springMVC配置 -->
<!-- The front controller of the spring web application , res -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframe.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
注意:Spring和SpringMVC中的servlet-name应相同
SpringMVC的配置文件spring-servlet.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd" >
<!--
-->
<!-- SpringMVC controll all websites jump logic-->
<!-- 只扫描控制器 -->
<context:component-scan base-package="com.company" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:annotation-driven></mvc:annotation-driven>
<mvc:default-servlet-handler/>
</beans>
Spring的配置文件applicationContext.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"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
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/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
">
<!-- Spring manage all services 除了控制器的其他组件-->
<context:component-scan base-package="com.company">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:property-placeholder location="classpath:dbconfig.properties"/>
<!-- Spring控制业务逻辑 数据源 事务控制 aop-->
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driver}"> </property>
</bean>
<!-- 事务管理器:使用事务管理器管理数据库-->
<bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"> </property>
</bean>
<!-- 开启基于注解的事务-->
<tx:annotation-driven transaction-manager="DataSourceTransactionManager"/>
<!-- create sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
</bean>
<!-- 扫描所有mapper接口的实现,让mapper能够自动注入-->
<mybatis-spring:scan base-package="com.company.dao"></mybatis-spring:scan>
<!-- comvbined with mybatis
-->
</beans>
这里有一个小bug,一般情况下,在.xml页面下应该还有一个namespace,可以选择引入的命名空间,但是我没有,我只有design和source,我略微百度了一下,说是要下载sts工具,废了很大劲头的终于下载了,但是他妈的还是没有这个所谓的namespace。我很无语。
因为这个sts工具需要与eclipse版本对应,不同版本的sts还不同(这无语的设计…),而且还没有一个完整的页面记录了所有版本的sts工具(或许我没搜到,别人放上去的页面都404了)。而且下载的后缀是update.zip,我用别的博主的方法,获取最新版本的超链接后更改到自己的版本上,但是一直404,可能是根本没有这个版本,反正很无语,我建议如果下载sts工具,直接百度自己eclipse对应的sts工具,这样比自己改来改去改了个404要靠谱,多搜几个网页肯定有,我是这个方法获取的。我的版本是e4.20.0。
链接:https://pan.baidu.com/s/1nfB3iYo0ZuC9cXFOw_rdnA
提取码:9lba
直接下载后不用解压,在install new software中离线打开再一顿next即可。
但是下载了还是没有namespace,可无语我当时的心情,但是有总比没有好吧…
不过也没事,只不过namespace我要一个一个引,还不算太关键。
补(2021.11.6):
引入成功了,具体还是在于sts工具和eclipse marketplace的三个关于spring的插件,下载成功后 模块处于WEB 在file association中设置xml的默认格式为spring config.那个就可
如果eclipse下载速度太慢,建议更改镜像而不是干等,改成国内镜像,稍微一百度就有了。
找到namespace设置了,右键项目点properties
mybatis-config.xml mybatis全局配置文件
<?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="dbconfig.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
<setting name="cacheEnabled" value="true"></setting>
</settings>
<typeAliases>
<typeAlias type="com.company.mybatis.bean.Employee"
alias="emp"></typeAlias><!-- 默认别名为类名,可以使用alias属性值设置 -->
<!-- 对于同一个包下的多个文件批量起别名 默认为类名 -->
<package name='com.company.mybatis.bean'></package>
<!-- 如果包下的包下的文件与包下的文件聪明 可以使用@Alias注解来起别名 -->
</typeAliases>
<databaseIdProvider type="DB_VENDOOR">
<property name="MySQL" value="mysql" />
<property name="Oracle" value="oracle" />
<property name="SQL Server" value="sql server" />
</databaseIdProvider>
</configuration>
dbconfig.properties 数据库的相关配置
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=88888888
jdbc.driver=com.mysql.jdbc.Driver
配置文件OK了,接下来就是写三层代码了。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>首页</title>
</head>
<body>
<a href="getEmp">查看列表</a>
</body>
</html>
首页被控制器拦截后,进入index.jsp页面
package com.company.controller;
@Controller
public class EmployeeController {
@Autowired
EmployeeService service;
@RequestMapping("/")
public String index() {
return "index";
}
@RequestMapping("getEmp")
public String getEmp(Map<String,Object> map) {
List<Employee> list = service.getEmps();
map.put("emp", list);
return "list"
}
}
sevice层方法
@Service
public class EmployeeService {
@Autowired
private EmployeeMapper mapper;
public List<Employee> getEmps() {
return mapper.getEmp();
}
}
dao层接口
package com.company.dao;
import java.util.List;
import com.company.bean.Employee;
@Repository
public interface EmployeeMapper {
public List<Employee> getEmp();
}
对应的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">
<!-- namespace:名称空间 id:唯一标识 resultType:返回值类型,查询记录封装的类型 #{id}从传递过来的参数中取出id
public Employee getEmpById(Integer id); -->
<mapper namespace="com.company.mybatis.dao.EmployeeMapper"><!-- 指定为接口的全类名 -->
<select id="getEmp" resultType="list">
select * from tbl_employee
</select>
</mapper>
对应的Employee方法类
package com.company.bean;
import java.io.Serializable;
public class Employee implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String lastName;
private String email;
private String gender;
//alt+shift+s
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public Employee(Integer id, String lastName, String email, String gender) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
}
}
运行的时候遇到了第三个bug–>>Tomcat程序启动不起来。报错信息模糊不清,我当时可能也犯困了,闷着头找了可多,都没找到点,睡觉去了。
第二天清醒了,看了看console,他妈的,缘来问题在console输出,我傻逼了。
-Djava.endorsed.dirs=D:\Tomcat 9.0\endorsed is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
意思就是我的Tomcat版本和我的jdk版本不对应,因此不行。他妈的,又是版本问题。然后就自己找配置。
windows=>properties=>Server=>Runtime Environment这是Tomcat
windows=>properties=>Java=>Installed JRES
windows=>properties=>Java=>compiler
我修改过了,jdk8和Tomcat9v是可以的,但是我最开始配置的是jdk16 很无语。
去官网又下jdk8,然后配置一下,就可以了,但是有个问题就是…java下载后会有个弹窗询问你是否允许自更新,妈的,不允许!我应该是之前以为电脑管家又自作主张把项目当病毒删除,所以没看就点确定了。家人们,不要允许自更新。
一系列操作后,我还是不行,运行的时候报错方式确实变了,但是会提醒我java 9 is not supported.java9? tmd哪来的java9.
来来来,右键项目,打开properties,点击java,点开java Complier,哈哈,他妈的,项目自己给自己配了个java9,一整个无语住了。改呗,顺便把java build path中的java9移除,换上自己的。
好了,一顿操作猛如虎,这样Tomcat就可以咯。对了对了,还有最后一个配置。双击server
把location改成自己的,deploy path改一改,ok。开始开心的ssm吧。
《开心的ssm》
全他妈报错…
找到报错原因了,一般都在第一个caused by 吃饭去了家人们