SpringMVC接口开发

SpringMVC接口开发

创建一个简单的SpringMVC框架,并且通过数据库连接池c3p0访问数据库,通过QueryRunner (使用参考)简化数据的增删改查操作(大佬请绕路,此文章仅供萌新参考)。

项目源码

项目源码和搭建环境所需jar包

项目目录截图

src包的目录结构

数据库文件
CREATE TABLE `student`  (
`id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
sname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
age` int(11) NULL DEFAULT NULL,
sex` int(11) NULL DEFAULT NULL,
mobile` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `student` VALUES ('1', 'zhangsan', 18, 0, 123);
INSERT INTO `student` VALUES ('2', 'lisi', 28, 1, 456);
第一步

创建dynamic web project项目,在WEB-INF的lib中导入相应的 jar包(右键点击jar包->build path->add to build path)

第二步

配置web.xml(在WEB-INF路径下)

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>MySpringMVC</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>
<servlet>
	<servlet-name>springDispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!--配置DispatcherServlet的一个初始化参数:配置springmvc的配置文件的路径和名称 -->
		<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvc.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
	<servlet-name>springDispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
配置c3p0-config.xml(在src路径下)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 如果代码中的config名称不是下面的某一个,就会根据默认配置进行查找,如果也没有默认配置,则按照默认值配置进行查找 -->
<default-config>
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/students_manage?serverTimezone=UTC</property>
	<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">root</property>
	<property name="checkoutTimeout">30000</property>
	<property name="initialPoolSize">10</property>
	<property name="maxIdleTime">30</property>
	<property name="maxPoolSize">100</property>
	<property name="minPoolSize">10</property>
</default-config>

<!-- 配置开发环境的数据库 -->
<named-config name="mysql_dev">
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/students_manage?serverTimezone=UTC</property>
	<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">root</property>
	<property name="checkoutTimeout">30000</property>
	<property name="initialPoolSize">10</property>
	<property name="maxIdleTime">30</property>
	<property name="maxPoolSize">100</property>
	<property name="minPoolSize">10</property>
</named-config>

配置springmvc.xml(在src路径下)

<?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-4.0.xsd
	http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<!--配置自动解析的包 -->
<context:component-scan base-package="com.apan.controller"></context:component-scan>

</beans>

<context:component-scan base-package=“com.apan.controller”>是重点,base-package中放的是spring中controller的包名。
重点!重点!重点!

第三步

创建c3p0Utils用于c3p0数据库连接池的配置

package com.apan.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {

	static private ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql_dev");

	/**
	 * 获取connection
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{	
		return dataSource.getConnection();
	}
	
	/**
	 * 获取连接池对象
	 * @return
	 */
	public static ComboPooledDataSource getDataSource(){
		return dataSource;
	}
	
	/**
	 * 关闭所有连接
	 * @param conn
	 * @param stmt
	 * @param rs
	 */
	public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
		closeAll(conn, stmt);
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}
	
	/**
	 * 关闭 conn stmt
	 * @param conn
	 * @param stmt
	 */
	public static void closeAll(Connection conn, Statement stmt){
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

创建QueryRunnerUtils用于获取QueryRunner对象

package com.apan.utils;
import org.apache.commons.dbutils.QueryRunner;
public class QueryRunnerUtils {
	//创建静态QueryRunner对象
	public static QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
}
第四步

创建封装json相关的工具类

package com.apan.json;

import java.util.Date;

public class AbstractJsonObject {
    //code
	private String code;
	//msg
	private String msg;
 
	private Long time = new Date().getTime();
 
	public String getCode() {
		return code;
	}
 
	public void setCode(String code) {
		this.code = code;
	}
 
	/**
	 * @return the time
	 */
	public Long getTime() {
		return time;
	}
 
	/**
	 * @param time
	 *            the time to set
	 */
	public void setTime(Long time) {
		this.time = time;
	}
 
	public String getMsg() {
		return msg;
	}
 
	public void setMsg(String msg) {
		this.msg = msg;
	}
 
	public void setContent(String code, String msg) {
		this.code = code;
		this.msg = msg;
	}
 
	public void setStatusObject(StatusObject statusObject) {
		this.code = statusObject.getCode();
		this.msg = statusObject.getMsg();
	}
}

package com.apan.json;
public class SingleObject extends AbstractJsonObject {

	private Object object;
 
	public Object getObject() {
		return object;
	}
 
	public void setObject(Object object) {
		this.object = object;
	}
}

package com.apan.json;
/**
 * 状态对象
*/
public class StatusObject {
	// 状态码
	private String code;
 
	// 状态信息
	private String msg;
 
	public StatusObject(String code, String msg) {
		super();
		this.code = code;
		this.msg = msg;
	}
 
	public String getCode() {
		return code;
	}
 
	public void setCode(String code) {
		this.code = code;
	}
 
	public String getMsg() {
		return msg;
	}
 
	public void setMsg(String msg) {
		this.msg = msg;
	}
 
}

package com.apan.json;

public class StatusCode {
	public static final String CODE_SUCCESS = "1";
	public static final String CODE_FAIL = "0";
}

package com.apan.json;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JackJsonUtils {
	static ObjectMapper objectMapper;
	/**
	 * 解析json
	 * 
	 * @param content
	 * @param valueType
	 * @return
	 */
	public static <T> T fromJson(String content, Class<T> valueType) {
		if (objectMapper == null) {
			objectMapper = new ObjectMapper();
		}
		try {
			return objectMapper.readValue(content, valueType);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
 
	/**
	 * 生成json
	 * 
	 * @param object
	 * @return
	 */
	public static String toJson(Object object) {
		if (objectMapper == null) {
			objectMapper = new ObjectMapper();
		}
		try {
			return objectMapper.writeValueAsString(object);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

package com.apan.json;

import java.util.List;

public class ListObject extends AbstractJsonObject {
 
	// 列表对象
	private List<?> items;
 
	public List<?> getItems() {
		return items;
	}
 
	public void setItems(List<?> items) {
		this.items = items;
	}
 
}

package com.apan.json;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

/**
 * HttpServletResponse帮助类
 */
public class ResponseUtils {
 
public static void renderJson(HttpServletResponse response, String text) {
		// System.out.print(text);
		render(response, "text/plain;charset=UTF-8", text);
	}
 
 
/**
	 * 发送内容。使用UTF-8编码。
	 * 
	 * @param response
	 * @param contentType
	 * @param text
	 */
	public static void render(HttpServletResponse response, String contentType, String text) {
		response.setContentType(contentType);
		response.setCharacterEncoding("utf-8");
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		try {
			response.getWriter().write(text);
		} catch (IOException e) {
		}
	}
	
	/**
	 * 发送内容。使用UTF-8编码。
	 * 
	 * @param response
	 * @param contentType
	 * @param text
	 */
	public static void render(HttpServletResponse response, String text) {
		response.setContentType("txt");
		response.setCharacterEncoding("utf-8");
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		try {
			response.getWriter().write(text);
		} catch (IOException e) {
		}
	}
}
第五步

创建student实体类

package com.apan.model;
public class Student {
	private int id;
	private String sname;
	private int age;
	private int sex;
	private int mobile;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	public int getMobile() {
		return mobile;
	}
	public void setMobile(int mobile) {
		this.mobile = mobile;
	}
	@Override
	public String toString() {
		return "Students [id=" + id + ", sname=" + sname + ", age=" + age + ", sex=" + sex + ", mobile=" + mobile + "]";
	}
}
第六步

创建student数据库操作的dao接口并实现dao.impl

package com.apan.dao;
import java.util.HashMap;
import java.util.List;

import com.apan.model.Student;

public interface IStudentDao {

	//获取所有学生信息
	public List<Student> getAllStudent();
	
	//根据字段查找学生信息
	public List<Student> getStudentById(String key, String values);
	
	//插入学生信息
	public int insertStudent(List<Student> students);
	
	//修改学生信息
	public int updateStudent(Student students);
	
	//修改学生信息
	public int updateStudent(String key, String value, int id);
	
	//删除学生信息
	public int deleteStudent(int id);
}

dao.impl实现

package com.apan.dao.impl;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.apan.dao.IStudentDao;
import com.apan.model.Student;
import com.apan.utils.QueryRunnerUtils;

public class StudentDaoImpl implements IStudentDao {

	QueryRunner qr = QueryRunnerUtils.qr;

	@Override
	public List<Student> getAllStudent() {
		// TODO Auto-generated method stub
		
		String sql = "select * from student";
		
		try {
			List<Student> Students = qr.query(sql, new BeanListHandler<Student>(Student.class));
			
			return Students;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}


	@Override
	public List<Student> getStudentById(String key, String values) {
		// TODO Auto-generated method stub
		
		String sql = "select * from student where " + key + " = ?";
		
		System.out.println(sql);
		List<Student> students = null;
		try {
			students = qr.query(sql, new BeanListHandler<Student>(Student.class), values);
			return students;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}


	@Override
	public int insertStudent(List<Student> students) {
		// TODO Auto-generated method stub
		int sign = 0;
		
	//		INSERT INTO student VALUES(null, 'lisi', 28, 1, 456);
		String sql = "INSERT INTO student VALUES(null, ?, ?, ?, ?)";
		for (Student temp : students) {
			try {
				sign += qr.update(sql, temp.getSname(), temp.getAge(), temp.getSex(), temp.getMobile());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return sign;
	}


	@Override
	public int updateStudent(Student student) {
		// TODO Auto-generated method stub
	//		update student set sname = '1', age = 10, sex = 1, mobile = 123 where id = 3;
		int sign = 0;
		String sql = "update student set sname = ?, age = ?, sex = ?, mobile = ? where id = ?";
		try {
			sign = qr.update(sql, student.getSname(), student.getAge(), student.getSex(), student.getMobile(), student.getId());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sign;
	}
	
	@Override
	public int updateStudent(String key, String value, int id) {
		// TODO Auto-generated method stub
		int sign = 0;
	//		update student set sname = '2' where id = 3;

		String sql = "update student set " + key + " = ? where id = ?";
		try {
			sign = qr.update(sql, value, id);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sign;
	}


	@Override
	public int deleteStudent(int id) {
		// TODO Auto-generated method stub
		int sign = 0;
	//		delete from student where id = 3;
		String sql = "delete from student where id = ?";
		try {
			sign = qr.update(sql, id);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sign;
	}
}
第七步

创建student查询结果逻辑处理service并实现service.impl

package com.apan.service;

import java.util.List;

import com.apan.model.Student;

public interface StudentService {
	//获取所有学生信息
		public List<Student> getAllStudent();
		
		//根据字段查找学生信息
		public List<Student> getStudentById(String key, String values);
		
		//插入学生信息
		public int insertStudent(List<Student> students);
		
		//修改学生信息
		public int updateStudent(Student students);
		
		//修改学生信息
		public int updateStudent(String key, String value, int id);
		
		//删除学生信息
		public int deleteStudent(int id);
}

实现service.impl

package com.apan.service.impl;

import java.util.List;

import com.apan.dao.IStudentDao;
import com.apan.dao.impl.StudentDaoImpl;
import com.apan.model.Student;
import com.apan.service.StudentService;

public class StudentServiceImpl implements StudentService{
	
	IStudentDao studentDaoImpl = new StudentDaoImpl();
 
	@Override
	public List<Student> getAllStudent() {
		// TODO Auto-generated method stub
		return studentDaoImpl.getAllStudent();
	}

	@Override
	public List<Student> getStudentById(String key, String values) {
		// TODO Auto-generated method stub
		return studentDaoImpl.getStudentById(key, values);
	}

	@Override
	public int insertStudent(List<Student> students) {
		// TODO Auto-generated method stub
		return studentDaoImpl.insertStudent(students);
	}

	@Override
	public int updateStudent(Student students) {
		// TODO Auto-generated method stub
		return studentDaoImpl.updateStudent(students);
	}

	@Override
	public int updateStudent(String key, String value, int id) {
		// TODO Auto-generated method stub
		return studentDaoImpl.updateStudent(key, value, id);
	}

	@Override
	public int deleteStudent(int id) {
		// TODO Auto-generated method stub
		return studentDaoImpl.deleteStudent(id);
	}
 
}
第八步

实现student的servlet

package com.apan.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.apan.json.AbstractJsonObject;
import com.apan.json.JackJsonUtils;
import com.apan.json.ListObject;
import com.apan.json.ResponseUtils;
import com.apan.json.StatusCode;
import com.apan.model.Student;
import com.apan.service.StudentService;
import com.apan.service.impl.StudentServiceImpl;


@Controller
@RequestMapping("student")
public class StudentServlet {
	
	public StudentService studentServiceImpl = new StudentServiceImpl();
 
 
//	http://localhost:8080/SpringMVCModel/student/getAllStudent
	@RequestMapping("/getAllStudent")
	public void getAllStudent(HttpServletRequest request, HttpServletResponse response) {
		List<Student> list = studentServiceImpl.getAllStudent();
		
		
		ListObject listObject = new ListObject();
		listObject.setItems(list);
		listObject.setCode(StatusCode.CODE_SUCCESS);
		listObject.setMsg("访问成功");
		
		
		ResponseUtils.renderJson(response, JackJsonUtils.toJson(listObject));
	}
	
	//http://localhost:8080/SpringMVCModel/student/getStudentById?key=id&value=1
	@RequestMapping("/getStudentById")
	public void getStudentById(HttpServletRequest request, HttpServletResponse response) {
		String key = request.getParameter("key");
		String values = request.getParameter("value");
		System.out.println("key: " + key + " | value: " + values);
		List<Student> list = studentServiceImpl.getStudentById(key, values);
		
		ListObject listObject = new ListObject();
		listObject.setItems(list);
		listObject.setCode(StatusCode.CODE_SUCCESS);
		listObject.setMsg("访问成功");
		
		
		ResponseUtils.renderJson(response, JackJsonUtils.toJson(listObject));

	}
	
//	http://localhost:8080/SpringMVCModel/student/insertStudent?id=4&sname=4&age4&sex1&mobile=345
//	http://localhost:8080/SpringMVCModel/student/insertStudent?sname=4&age4&sex1&mobile=345
	@RequestMapping("/insertStudent")
	public void insertStudent(HttpServletRequest request, HttpServletResponse response, Student students) {
		
		List<Student> students2 = new ArrayList<Student>();
		students2.add(students);
		int sign = studentServiceImpl.insertStudent(students2);
		
		AbstractJsonObject obj = new AbstractJsonObject();
		obj.setCode(StatusCode.CODE_SUCCESS);
		obj.setMsg(String.valueOf(sign));;
		
		
		ResponseUtils.renderJson(response, JackJsonUtils.toJson(obj));

	}
	
//	http://localhost:8080/SpringMVCModel/student/updateStudent?key=age&value=111&id=4
	@RequestMapping("/updateStudent")
	public void updateStudent(HttpServletRequest request, HttpServletResponse response, String key, String value,int id) {
		
		int sign = studentServiceImpl.updateStudent(key, value, id);
		
		AbstractJsonObject obj = new AbstractJsonObject();
		obj.setCode(StatusCode.CODE_SUCCESS);
		obj.setMsg(String.valueOf(sign));;
		
		
		ResponseUtils.renderJson(response, JackJsonUtils.toJson(obj));
	}
	
//	http://localhost:8080/SpringMVCModel/student/deleteStudent?id=4
	@RequestMapping("/deleteStudent")
	public void deleteStudent(HttpServletRequest request, HttpServletResponse response, int id) {
		int sign = studentServiceImpl.deleteStudent(id);
		
		AbstractJsonObject obj = new AbstractJsonObject();
		obj.setCode(StatusCode.CODE_SUCCESS);
		obj.setMsg(String.valueOf(sign));;
		
		
		ResponseUtils.renderJson(response, JackJsonUtils.toJson(obj));
	}
	
	
	@RequestMapping("/test")
	public void method01(HttpServletRequest req, HttpServletResponse response) {
		String name = req.getParameter("name");
		if(name == null) {
			name = "参数错误";
		}
		
		System.out.println("name:" + name);
		ResponseUtils.render(response, name);
	}
 
}

查询结果如下:
查询所有学生接口
这只是一个简单的SpringMVC接口开发的封装,仅供初学者参考

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值