步骤分解:
1.用eclipse创建一个web项目
2.在本地mysql数据库中创建一个名为springdb的数据库,创建一个名为student的表,主键id(int,自增),name(String),age(int),虚拟几个假数据
3.在eclipse导入项目,或者仿写
4.用eclipse的tomcat测试
详情如下:
如图:
1.实体类
Student.java
package com.dongbao.beans;
/**
* 实体类
* @author zhang
*
*/
public class Student {
//主键id,自增
private Integer id;
//名字
private String name;
//年龄
private Integer age;
public Integer getId() {
return id;
}
//setId 不用设置是因为数据库id主键自增
/*public void setId(Integer id) {
this.id = id;
}*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.dao层
StudentDao.java
package com.dongbao.dao;
import java.util.List;
import com.dongbao.beans.Student;
/**
* 学生dao层
* @author zhang
*
*/
public interface StudentDao {
/**
* 插入学生
* @param student
* @return
*/
int insertStudent(Student student);
/**
* 查询所有学生
* @return
*/
List<Student> selectAllStudents();
}
StudentDao.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.dongbao.dao.StudentDao">
<!-- 插入学生 -->
<insert id="insertStudent">
insert into student(name,age) values(#{name},#{age})
</insert>
<!-- 查询所有学生 -->
<select id="selectAllStudents" resultType="Student">
select id,name,age from student order by id desc
</select>
</mapper>
3.service层
StudentService.java
package com.dongbao.services;
import java.util.List;
import com.dongbao.beans.Student;
/**
* 学生service层
* @author zhang
*
*/
public interface StudentService {
/**
* 插入新学生
* @param student
* @return
*/
int addStudent(Student student);
/**
* 查找所有学生
* @return
*/
List<Student> findAllStudents();
}
StudentServiceImpl.java
package com.dongbao.services.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dongbao.dao.StudentDao;
import com.dongbao.beans.Student;
import com.dongbao.services.StudentService;
/**
* 学生对象实现类
* @author zhang
*
*/
@Service //扫描这个service
public class StudentServiceImpl implements StudentService{
//引用类型 使用注解给引用类型赋值 : @Autowired, @Resource. 可以byType ,byName
//byType
//注入dao层
@Autowired
private StudentDao stuDao;
@Override
public int addStudent(Student student) {
int r = stuDao.insertStudent(student);
return r;
}
@Override
public List<Student> findAllStudents() {
//List<Student> students = stuDao.selectAllStudents();
//处理集合数据 ,在返回
//return students;
return stuDao.selectAllStudents();
}
}
4.controller层
JumpController.java
package com.dongbao.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 跳转controller
* @author zhang
*
*/
@Controller
@RequestMapping("jump")
public class JumpController {
//定义方法实现跳转
@RequestMapping("topage.do")
public String topage(String target){
//有视图解析器,使用逻辑名称.
//return "addStudent"; //执行forward
return target;
}
}
StudentController.java
package com.dongbao.controllers;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.dongbao.beans.Student;
import com.dongbao.services.StudentService;
/**
* 学生controller层
* @author zhang
*
*/
@Controller
@RequestMapping("student")
public class StudentController {
//定义引用类型
//使用注解给引用类型赋值 : @Autowired, @Resource. 可以byType ,byName
//byType
@Autowired
private StudentService stuService;
/**
* 添加学生
*/
@RequestMapping(value="addStudent.do")
public ModelAndView addStudent(Student student){
ModelAndView mv = new ModelAndView();
int rows = stuService.addStudent(student);
if( rows > 0 ){
mv.addObject("msg", "注册成功!!!");
//mv.setViewName("success");
//使用重定向,不能访问/WEB-INF/
//mv.setViewName("redirect:/WEB-INF/views/listStudent.jsp");
//mv.setViewName("redirect:listStudent.do");
mv.setViewName("redirect:tojsp.do");
} else {
mv.addObject("msg", "注册失败!!!");
mv.setViewName("fail");
}
return mv;
}
@RequestMapping("tojsp.do")
public String toJsp(){
return "listStudent";//forward可以访问 /WEB-INF/
}
/**
* 浏览学生,响应Ajax
*/
@RequestMapping("listStudent.do")
@ResponseBody
public List<Student> listStudent(){
List<Student> mylist = stuService.findAllStudents();
//为了避免null的情况
if( mylist ==null || mylist.size() < 1) {
mylist = new ArrayList<>();
}
return mylist;
}
}
5.在src/resources/下,写入4个配置文件
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"
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">
<!-- spring配置文件, 管理Service和Dao的对象. 非视图层的对象 -->
<!-- 创建Service对象,使用注解,注册组件扫描器
base-package="@Service的所在包名"
-->
<context:component-scan base-package="com.dongbao.services" />
<!-- 创建Mybatis对象交给spring框架管理 -->
<!-- 引入属性配置文件 -->
<context:property-placeholder location="classpath:resources/dbconfig.properties"/>
<!-- 注册数据源,使用c3p0 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.pwd}" />
</bean>
<!-- 注册SqlSessionFacotryBean,创建SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:resources/mybatis.xml" />
</bean>
<!-- 注册mybatis的扫描器,使用mybatis的动态代理技术,创建Dao接口的是实现类对象.
框架是在MapperScannerConfigurer,通过sqlSessionFactoryBeanName获取到SqlSessionFactory对象
然后在通过SqlSessionFactory对象openSession()获取到SqlSession对象. 框架使用SqlSession对象循环
basePackage值的包 com.dongbao.dao 把包中每个Dao接口,都调用 SqlSession.getMapper(Dao接口的class)
for(com.dongbao.dao的每个接口){
StudentDao studentDao = SqlSession.getMapper(StudentDao.class);
//把studentDao存放到Spring的Map中. Map<接口名的首字母小写,dao对象)
}
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定SqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 指定Dao接口的包名 -->
<property name="basePackage" value="com.dongbao.dao"></property>
</bean>
</beans>
dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.pwd=root
dispatcherServlet.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.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">
<!-- springmvc的配置文件,定义视图层的对象 -->
<!-- 注册组件扫描器, 创建处理器对象 -->
<context:component-scan base-package="com.dongbao.controllers" />
<!-- 注册视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 注册注解驱动(先写上) -->
<mvc:annotation-driven />
</beans>
mybatis.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>
<!-- 别名 -->
<typeAliases>
<package name="com.dongbao.beans"/>
</typeAliases>
<!-- sql映射文件的位置 -->
<mappers>
<package name="com.dongbao.dao"/>
</mappers>
</configuration>
6.最后在WebContent\WEB-INF目录下更改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>dongbao_ssm</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 注册spring的监听器ContextLoaderListener, 目的是创建spring的容器对象,
加载配置文件, 创建配置文件中的所有java对象 -->
<!-- 指定自定义的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:resources/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 注册中央调度器,创建springmvc的容器,加载springmvc配置文件,创建文件中的视图层对象 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:resources/dispatcherServlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 注册字符集过滤器,解决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>
<!-- 指定强制请求使用encoding的值 -->
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<!-- 指定强制应答使用encoding的值 -->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
7.基本就好了,剩下的可以自行下载源代码,本人学艺不精,请各位大神轻喷
8.效果图
下载地址: