您的位置:首页 > 编程语言 > Java开发

Maven+SSM框架项目实例

2018-01-17 17:33 555 查看

一、项目环境

开发系统:Window10

开发工具:IDEA

JDK:1.8

框架:Maven+Spring+SpringMVC+Mybatis

数据库:Mysql

二、项目结构

项目文件架构:



三、Maven配置

pom.xml:

<properties>
<!-- spring版本号 -->
<spring.version>4.0.2.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 导入java ee jar 包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志文件管理包 -->
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>

<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- 上传组件包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>


四、SSM的配置文件

mybatis-config.xml:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 只需配置别名,其他的配置使用其他的方法进行配置 -->
<typeAliases>
<typeAlias type="com.model.entity.Student" alias="Student"/>
<typeAlias type="com.model.entity.Teacher" alias="Teacher"/>
<typeAlias type="com.model.entity.Classes" alias="Classes"/>
</typeAliases>
</configuration>


spring-mybatis.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
<!-- 导入jdbc配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 注解的扫描路径 -->
<context:component-scan base-package="com.*"/>
<!-- 连接池 -->
<!-- 配置1个阿里连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<property name="driverClassName">
<value>${jdbc_driverClassName}</value>
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
<property name="username">
<value>${jdbc_username}</value>
</property>
<property name="password">
<value>${jdbc_password}</value>
</property>
<!-- 连接池最大使用连接数 -->
<property name="maxActive">
<value>20</value>
</property>
<!-- 初始化连接大小 -->
<property name="initialSize">
<value>1</value>
</property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait">
<value>60000</value>
</property>
<!-- 连接池最大空闲 -->
<property name="maxIdle">
<value>20</value>
</property>
<!-- 连接池最小空闲 -->
<property name="minIdle">
<value>3</value>
</property>
<!-- 自动清除无用连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout">
<value>180</value>
</property>
<!-- 连接属性 -->
<property name="connectionProperties">
<value>clientEncoding=UTF-8</value>
</property>
</bean>

<!-- mybatis的sessionfatory -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:mybatis-config.xml"
p:mapperLocations="classpath:/mapping/*.xml"/>

<!-- dao的实现类对象,既mapper对象 。从上面的session工厂中,自动创建出所有mapper文件下的实现类对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.model.dao"
p:sqlSessionFactoryBeanName="sqlSessionFactory"/>

<!-- 事务管理器,用于注解注入事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>

</beans>


springmvc-servlet.xml:

<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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
<!-- 注解的扫描路径 -->
<context:component-scan base-package="com.controller"/>
<mvc:annotation-driven/>
<!-- springmvc的视图解析器 -->
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="prefix" value="/WEB-INF/JSP/"></property>
<property name="suffix" value=".jsp"></property>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
</bean>

</beans>


jdbc.properties:

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/xxxx?characterEncoding=utf-8
jdbc_username=xxxx
jdbc_password=xxxx


五、数据库表

student表:



classes表:



teacher表:



六、各层代码

实体类

Classes:

package com.model.entity;

public class Classes {
private int cid;
private String cname;

@Override
public String toString() {
return "Classes{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}

public Classes() {
}

public Classes(int cid, String cname) {

this.cid = cid;
this.cname = cname;
}

public int getCid() {

return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public String getCname() {
return cname;
}

public void setCname(String cname) {
this.cname = cname;
}
}


Student:

package com.model.entity;

public class Student {
private int sid;//学号
private String sname;//姓名
private Classes classes;//所属班级
private String sex;//性别
private String birthplace;//出生地

@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", classes=" + classes +
", sex='" + sex + '\'' +
", birthplace='" + birthplace + '\'' +
'}';
}

public Student() {
}

public Student(int sid, String sname, Classes classes, String sex, String birthplace) {

this.sid = sid;
this.sname = sname;
this.classes = classes;
this.sex = sex;
this.birthplace = birthplace;
}

public int getSid() {

return sid;
}

public void setSid(int sid) {
this.sid = sid;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public Classes getClasses() {
return classes;
}

public void setClasses(Classes classes) {
this.classes = classes;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getBirthplace() {
return birthplace;
}

public void setBirthplace(String birthplace) {
this.birthplace = birthplace;
}
}


Teacher:

package com.model.entity;

public class Teacher {
private int tid;//教师编号
private String tname;//姓名
private Classes classes;//所教班级(student的cid外键)

public Teacher() {
}

@Override
public String toString() {
return "Teacher{" +
"tid=" + tid +
", tname='" + tname + '\'' +
", classes=" + classes +
'}';
}

public Teacher(int tid, String tname, Classes classes) {
this.tid = tid;
this.tname = tname;
this.classes = classes;
}

public int getTid() {

return tid;
}

public void setTid(int tid) {
this.tid = tid;
}

public String getTname() {
return tname;
}

public void setTname(String tname) {
this.tname = tname;
}

public Classes getClasses() {
return classes;
}

public void setClasses(Classes classes) {
this.classes = classes;
}
}


持久层(Dao类)

StudentDao:

package com.model.dao;

import com.model.entity.Student;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentDao {

public List<Student> findAll();//查找所有学生

public void add(@Param("sname") String sname, @Param("cid") int cid,
@Param("sex") String sex, @Param("birthplace") String birthplace);//添加学生

public Student findBySid(int sid);//根据学号查学生

}


业务层(Service类)

StudentService:

import com.model.entity.Student;

import java.util.List;

public interface StudentService {
public List<Student> findAll();

public void add(String sname, int cid, String sex, String birthplace);//添加学生

public Student findBySid(int sid);//根据学号查学生
}


StudentServiceImpl:

package com.service.Impl;

import com.model.dao.StudentDao;
import com.model.entity.Student;
import com.model.service.StudentService;

import org.springframework.stereotype.Service;

import java.util.List;

import javax.annotation.Resource;

@Service
public class StudentServiceImpl implements StudentService {

//这里的自动装配会报错,可以忽视,因为在spring-mybatis.xml中有进行配置,通过mapper映射从Session工厂中获取
@Resource
private StudentDao studentDao;

public List<Student> findAll() {
return studentDao.findAll();
}

public void add(String sname, int cid, String sex, String birthplace) {

}

public Student findBySid(int sid) {
return studentDao.findBySid(sid);
}
}


控制器(Controller)

StudentAction:

package com.controller;

import com.model.entity.Student;
import com.model.service.StudentService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class StudentAction {

@Autowired
private StudentService service;//持有一个业务层对象

@RequestMapping("/findall")
public String findAll(Model model) {
List<Student> list = service.findAll();
model.addAttribute("studentlist", list);
return "show";
}

//ajax查询数据
@ResponseBody
@RequestMapping("/findbysid")
public Student findBySid(@RequestParam("sid") int sid) {
return service.findBySid(sid);
}
}


七、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml;
classpath:springmvc-servlet.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<display-name>ssm_student</display-name>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


八、JSP页面

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>

<script language="JavaScript">
$(function () {
$("#search").click(function () {
$.ajax({
type: "post",
url: "findbysid.action",
data: $("#sid"),
dataType: "json",
success: function (data) {
var html = "";
html +=
"<td>" + data.sid + "</td><td>" + data.classes.cname + "</td><td>" + data.sname
+ "</td><td>" + data.sex + "</td><td>" + data.birthplace + "</td>";
$("#student").html(html);
},
//null值不会被success回调函数捕获,因此可以通过error来实现该功能
error: function () {
alert("请输入正确的学号!");
}
})
})
})
</script>
<body>
<center>
<div style="margin-top: 25px">
请输入所要查询的学号:<input type="text" id="sid" name="sid"/><input id="search" style="margin-left: 10px" type="button" value="搜索"><br/>
</div>
<div style="margin-top: 50px">
<table border="1">
<tr>
<td>学号</td>
<td>班级</td>
<td>姓名</td>
<td>性别</td>
<td>出生地</td>
</tr>
<tr id="student">

</tr>
</table>
</div>
</center>
</body>
</html>


九、Tomcat测试

测试结果(成功):



输入1,没有对应学号,则弹出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis maven spring