自己记录一下~
1技术:SpringMvc+Spring+maven+jdbc+c3p0)
2 工具:idea
1 项目结构
2 具体说明
1 controller包中的 控制层 用于连接页面和业务层
StudentCon 控制层接口
StudentConImp 控制层接口实现类
2 server层 业务层 用于连接控制层和持久层
StudentServer 业务层接口
StudentServerImp 业务层接口实现类
3 dao 层 持久层 用于实际操作数据库和实体类的
StudentDao 持久层接口
StudentDaoImp 持久层接口实现类
4 bean层 实体类
5 配置文件
文件要放在resources层下 可以访问得到
db.properties 数据库配置文件
application.xml 配置数据库文件映射
springmvc.xml 用于配置mvc 中具体信息 视图解析器 开启注解等
pom.xml maven方式下载的jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SpringMvc0314</groupId>
<artifactId>com</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>com Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<!--spring结合jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.14.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.14.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>com</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3 数据库表
/*PRIMARY KEY 主键为id,NOT NULL不为空 ,AUTO_INCREMENT 代表主键自增长 在数据库student里面创建表stu*/
/*使用数据库*/
use DATABASE student;
CREATE TABLE stu(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
sname VARCHAR(30) NOT NULL,
discri VARCHAR(30) NOT NULL,
price DOUBLE NOT NULL
)
4 数据库参数配置文件 db.properties
密码 用户名 jdbc后面的名字是自定义的
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=1234
5 数据库配置文件 application.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"
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">
<!--开启扫描 就是这个数据库用到那个类上-->
<context:component-scan base-package="com.dao"/>
<!--加载数据库文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置数据库文件用到了c3p0连接池 将文件中的参数配置到具体的数据库连接池中-->
<bean id="ds"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.connectionURL}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置SpringJDBC的JdbcTemplate模板 将配置完参数的数据库文件给到模板 用于数据库操作 -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
</beans>
6 spring结合mvc配置文件 springmvc.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:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--视图解析器 也就是静态资源的路径-->
<bean id="internal"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀后缀-->
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
<!--开启框架注解 就是让@号好用 个人理解-->
<mvc:annotation-driven/>
<!--扫描包 这个包下的类就可以用注解了 所有带@号的注解-->
<context:component-scan base-package="com"/>
<!--开启静态资源访问-->
<mvc:default-servlet-handler/>
</beans>
7 核心配置文件 web.xml
<?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_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<!--1 将数据库文件加载到ContextLoader中*************************************-->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param>
<!--2将springmvc.xml加载到dispatcherServlet中******************************-->
<!--将DispatcherServlet 映射为dispatcherServlet 为代表-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--将具体的springMvc通过contextConfigLocation配置加载-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有的类都应用dispatcherServlet-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--3 配置解决中文乱码的过滤器*************************************-->
<filter>
<!--将过滤的类映射为characterEncodingFilter 并且为他配置utf-8编码-->
<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>
<!--将上面配置的utf-8应用到所有的文件里面-->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
8 实体类
package com.db
import org.springframework.stereotype.Repository;
/**
* 实体类
*/
@Repository
public class StudentBean {
private int id;//序号
private String sname;//姓名
private String discri;//描述
private double price;//价格
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDiscri() {
return discri;
}
public void setDiscri(String discri) {
this.discri = discri;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "BeanStu{" +
"id=" + id +
", sname='" + sname + '\'' +
", discri='" + discri + '\'' +
", price=" + price +
'}';
}
}
9 持久层接口和实现类
package com.dao;
import java.util.List;
import java.util.Map;
/**
* 数据持久层接口
*/
public interface StudentDao {
/*
查询所有
*/
List<Map<String, Object>> selectAllDao();
}
/
package com.dao;
import com.db.StudentBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;
/**
* 数据持久层接口实现类 @Component 通用层注解
*/
@Component
public class StudentDaoImp implements StudentDao {
//注入template模板 数据库操作语句模板
@Autowired
public JdbcTemplate jdbcTemplate;
//单纯jdbc
@Override
public List<Map<String, Object>> selectAllDao() {
String sql="select * from stu";
//返回map 集合
List<Map<String, Object>> stus =
jdbcTemplate.queryForList(sql);
//测试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
System.out.println("jdbcTemplate "+jdbcTemplate.getDataSource());
System.out.println("stus.size()"+stus.size());
for (Map<String, Object> map:stus) {
for (String str: map.keySet()) {
System.out.println("StudentDaoImp str----"+str);
}
}
//测试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
return stus;
}
}
10 业务层接口和实现类
package com.server;
import com.db.StudentBean;
import java.util.List;
import java.util.Map;
/**
*业务层接口类
*/
public interface StudentServer {
//查询所有
List<Map<String, Object>> selectAllSer()
}
package com.server;
import com.dao.StudentDao;
import com.db.StudentBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* 业务实现类 @Service业务层注解
*/
@Service
public class StudentServerImp implements StudentServer{
/*
注入数据库层接口 @Autowired 注入的注解
相当于创建一个StudentDao 类 (相当于配置文件中的bean) 就是把这个动作交给spring容器了 被注入的类上必须有相应的注解 例如@Component
*/
@Autowired
public StudentDao studentDaoImp;
/*
注入同学类
*/
@Autowired
public StudentBean stu;
/*
得到所有同学
*/
@Override
public List<Map<String, Object>> selectAllSer() {
return studentDaoImp.selectAllDao();
}
}
11控制器接口和实现类
//接口类
package com.controller;
public interface StudentCon {
String cc();
}
//接口实现类
//*******************************
package com.controller;
import com.db.StudentBean;
import com.server.StudentServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/user")
public class StudentConImp implements StudentCon{
/*
注入业务层
*/
@Autowired
public StudentServer studentServerImp;
@RequestMapping("/hello")
@Override
public String cc()
{
//输出得到的同学map集合 方法一
List<Map<String, Object>> maps = studentServerImp.selectAllSer();
for (Map<String, Object> map:maps) {
for (String str: map.keySet()) {
System.out.println("StudentConImpstr----"+str);
}
}
System.out.println("..........................");
//输出得到的同学map集合 方法二
for (Map<String, Object> map : maps) {
for (Map.Entry<String, Object> m : map.entrySet()) {
System.out.print(m.getKey() + " ");
System.out.println(m.getValue());
}
}
return "success";
}
}
12 index.jsp 程序运行时访问的页面
<html>
<body>
<h2>Hello World!</h2>
<!--对应con层的类映射路径 和方法映射路径 前面不要加斜杠哈-->
<a href="user/hello">dudu</a>
</body>
</html>
13 success.jsp页面 成功时访问的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h4>success</h4>
</body>
</html>
14 运行页面
欢迎页面 index.jsp
成功页面 success.jsp
这张是后台输出的 我用于测试数据是否得到的 之后就会把这个数据显示在页面上
参考链接:https://blog.youkuaiyun.com/lswaone/article/details/102814868