Spring MVC 简单查询与修改
一、mvc设计模式,创建 Web 应用程序的模式:
spring mvc : 基于web层(请求处理和响应发送 b/s)的框架. (sturts1,struts2,spring mvc ,spring webFlux等等都属于web层框架)
二、传统的b/s架构与spring mvc的架构有区别
mvc模式:m (model ) v(view--jsp,html) c (control--servlet) 1)传统的b/s架构 客户端------请求-----控制器(servlet)----->封装数据model中 -------响应-----------jsp-------------------------| 缺点: 1. servlet生产周期长,大量servlet的产生。占据大量内存。 2)spring mvc 的b/s架构 优点:1.只有1个servlet。 2.分工明确 中央处理器(servlet):接受请求,分配任务,发送响应 映射器:根据url,确定找谁(处理器),干什么(办什么业务),将其告诉老大 适配器:根据映射器结果,找到对应的处理器,完成任务,并将结果返回给老大 视图解析器:解析处理器返回的结果(model view)---返回哪个jsp,里面要显示什么数据 渲染--->|客户
三、spring mvc开发的流程
第1步: mybatis spring mvc需要的包(spring+ spring-web包+spring-webmvc)
<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-instrument</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.liferay/com.fasterxml.jackson.databind --> <dependency> <groupId>com.liferay</groupId> <artifactId>com.fasterxml.jackson.databind</artifactId> <version>2.10.3.LIFERAY-PATCHED-1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.catalina/com.springsource.org.apache.catalina --> <dependency> <groupId>org.apache.catalina</groupId> <artifactId>com.springsource.org.apache.catalina</artifactId> <version>7.0.26</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-jaxrs-base --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-json-schema-plugin --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-base --> <dependency> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-base</artifactId> <version>2.12.0</version> <type>pom</type> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.12.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson/jackson-bom --> <dependency> <groupId>com.fasterxml.jackson</groupId> <artifactId>jackson-bom</artifactId> <version>2.12.0</version> <type>pom</type> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-oxm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.25</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
第2步:web.xml配置中央处理器(spring 写好的一个servelt)
<?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>SpringWeb_02</display-name> <!--一、spring的ioc容器配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 三、spring的编码过滤器 --> <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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 二、中央处理器(DispatcherServlet):映射器、适配器、视图解析器 --> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-web.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <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> </web-app>
第3步:配置spring-web.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:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 开启注解扫描 .** 所有所有包以及子包--> <context:component-scan base-package="cc.**"/> <!-- 1.处理器映射器 --> <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>--> <!-- 2.处理器适配器 --> <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>--> <!-- 3.试图解析器 --> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 解析jstl标签 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 动态页面的前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 动态页面的后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>
第4步:定义处理器
@Controller
@requestMapping
在定义处理器前把接口实现类mapper都建好
package cc.entity; import java.io.Serializable; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import com.fasterxml.jackson.annotation.JsonFormat; public class Users implements Serializable { /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column users.id * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ private Integer id; /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column users.username * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ private String username; /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column users.birthday * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ // private String birthday; @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday; /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column users.sex * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ private String sex; /** * * This field was generated by MyBatis Generator. This field corresponds to the * database column users.address * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ private String address; /** * This field was generated by MyBatis Generator. This field corresponds to the * database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ private static final long serialVersionUID = 1L; /** * This method was generated by MyBatis Generator. This method returns the value * of the database column users.id * * @return the value of users.id * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public Integer getId() { return id; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column users.id * * @param id the value for users.id * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setId(Integer id) { this.id = id; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column users.username * * @return the value of users.username * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public String getUsername() { return username; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column users.username * * @param username the value for users.username * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setUsername(String username) { this.username = username == null ? null : username.trim(); } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column users.birthday * * @return the value of users.birthday * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ //@JsonFormat(pattern="yyyy-MM-dd") public Date getBirthday() { return birthday; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column users.birthday * * @param birthday the value for users.birthday * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setBirthday(Date birthday) { this.birthday = birthday; } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column users.sex * * @return the value of users.sex * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public String getSex() { return sex; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column users.sex * * @param sex the value for users.sex * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setSex(String sex) { this.sex = sex == null ? null : sex.trim(); } /** * This method was generated by MyBatis Generator. This method returns the value * of the database column users.address * * @return the value of users.address * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public String getAddress() { return address; } /** * This method was generated by MyBatis Generator. This method sets the value of * the database column users.address * * @param address the value for users.address * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setAddress(String address) { this.address = address == null ? null : address.trim(); } /** * This method was generated by MyBatis Generator. This method corresponds to * the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", id=").append(id); sb.append(", username=").append(username); sb.append(", birthday=").append(birthday); sb.append(", sex=").append(sex); sb.append(", address=").append(address); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]\n"); return sb.toString(); } /** * This method was generated by MyBatis Generator. This method corresponds to * the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ @Override public boolean equals(Object that) { if (this == that) { return true; } if (that == null) { return false; } if (getClass() != that.getClass()) { return false; } Users other = (Users) that; return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) && (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername())) && (this.getBirthday() == null ? other.getBirthday() == null : this.getBirthday().equals(other.getBirthday())) && (this.getSex() == null ? other.getSex() == null : this.getSex().equals(other.getSex())) && (this.getAddress() == null ? other.getAddress() == null : this.getAddress().equals(other.getAddress())); } /** * This method was generated by MyBatis Generator. This method corresponds to * the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode()); result = prime * result + ((getBirthday() == null) ? 0 : getBirthday().hashCode()); result = prime * result + ((getSex() == null) ? 0 : getSex().hashCode()); result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode()); return result; } }
package cc.entity; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; public class UsersExample { /** * This field was generated by MyBatis Generator. * This field corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ protected String orderByClause; /** * This field was generated by MyBatis Generator. * This field corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ protected boolean distinct; /** * This field was generated by MyBatis Generator. * This field corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ protected List<Criteria> oredCriteria; /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public UsersExample() { oredCriteria = new ArrayList<Criteria>(); } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setOrderByClause(String orderByClause) { this.orderByClause = orderByClause; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public String getOrderByClause() { return orderByClause; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void setDistinct(boolean distinct) { this.distinct = distinct; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public boolean isDistinct() { return distinct; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public List<Criteria> getOredCriteria() { return oredCriteria; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void or(Criteria criteria) { oredCriteria.add(criteria); } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public Criteria or() { Criteria criteria = createCriteriaInternal(); oredCriteria.add(criteria); return criteria; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public Criteria createCriteria() { Criteria criteria = createCriteriaInternal(); if (oredCriteria.size() == 0) { oredCriteria.add(criteria); } return criteria; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ protected Criteria createCriteriaInternal() { Criteria criteria = new Criteria(); return criteria; } /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public void clear() { oredCriteria.clear(); orderByClause = null; distinct = false; } /** * This class was generated by MyBatis Generator. * This class corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ protected abstract static class GeneratedCriteria { protected List<Criterion> criteria; protected GeneratedCriteria() { super(); criteria = new ArrayList<Criterion>(); } public boolean isValid() { return criteria.size() > 0; } public List<Criterion> getAllCriteria() { return criteria; } public List<Criterion> getCriteria() { return criteria; } protected void addCriterion(String condition) { if (condition == null) { throw new RuntimeException("Value for condition cannot be null"); } criteria.add(new Criterion(condition)); } protected void addCriterion(String condition, Object value, String property) { if (value == null) { throw new RuntimeException("Value for " + property + " cannot be null"); } criteria.add(new Criterion(condition, value)); } protected void addCriterion(String condition, Object value1, Object value2, String property) { if (value1 == null || value2 == null) { throw new RuntimeException("Between values for " + property + " cannot be null"); } criteria.add(new Criterion(condition, value1, value2)); } protected void addCriterionForJDBCDate(String condition, Date value, String property) { if (value == null) { throw new RuntimeException("Value for " + property + " cannot be null"); } addCriterion(condition, new java.sql.Date(value.getTime()), property); } protected void addCriterionForJDBCDate(String condition, List<Date> values, String property) { if (values == null || values.size() == 0) { throw new RuntimeException("Value list for " + property + " cannot be null or empty"); } List<java.sql.Date> dateList = new ArrayList<java.sql.Date>(); Iterator<Date> iter = values.iterator(); while (iter.hasNext()) { dateList.add(new java.sql.Date(iter.next().getTime())); } addCriterion(condition, dateList, property); } protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) { if (value1 == null || value2 == null) { throw new RuntimeException("Between values for " + property + " cannot be null"); } addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property); } public Criteria andIdIsNull() { addCriterion("id is null"); return (Criteria) this; } public Criteria andIdIsNotNull() { addCriterion("id is not null"); return (Criteria) this; } public Criteria andIdEqualTo(Integer value) { addCriterion("id =", value, "id"); return (Criteria) this; } public Criteria andIdNotEqualTo(Integer value) { addCriterion("id <>", value, "id"); return (Criteria) this; } public Criteria andIdGreaterThan(Integer value) { addCriterion("id >", value, "id"); return (Criteria) this; } public Criteria andIdGreaterThanOrEqualTo(Integer value) { addCriterion("id >=", value, "id"); return (Criteria) this; } public Criteria andIdLessThan(Integer value) { addCriterion("id <", value, "id"); return (Criteria) this; } public Criteria andIdLessThanOrEqualTo(Integer value) { addCriterion("id <=", value, "id"); return (Criteria) this; } public Criteria andIdIn(List<Integer> values) { addCriterion("id in", values, "id"); return (Criteria) this; } public Criteria andIdNotIn(List<Integer> values) { addCriterion("id not in", values, "id"); return (Criteria) this; } public Criteria andIdBetween(Integer value1, Integer value2) { addCriterion("id between", value1, value2, "id"); return (Criteria) this; } public Criteria andIdNotBetween(Integer value1, Integer value2) { addCriterion("id not between", value1, value2, "id"); return (Criteria) this; } public Criteria andUsernameIsNull() { addCriterion("username is null"); return (Criteria) this; } public Criteria andUsernameIsNotNull() { addCriterion("username is not null"); return (Criteria) this; } public Criteria andUsernameEqualTo(String value) { addCriterion("username =", value, "username"); return (Criteria) this; } public Criteria andUsernameNotEqualTo(String value) { addCriterion("username <>", value, "username"); return (Criteria) this; } public Criteria andUsernameGreaterThan(String value) { addCriterion("username >", value, "username"); return (Criteria) this; } public Criteria andUsernameGreaterThanOrEqualTo(String value) { addCriterion("username >=", value, "username"); return (Criteria) this; } public Criteria andUsernameLessThan(String value) { addCriterion("username <", value, "username"); return (Criteria) this; } public Criteria andUsernameLessThanOrEqualTo(String value) { addCriterion("username <=", value, "username"); return (Criteria) this; } public Criteria andUsernameLike(String value) { addCriterion("username like", value, "username"); return (Criteria) this; } public Criteria andUsernameNotLike(String value) { addCriterion("username not like", value, "username"); return (Criteria) this; } public Criteria andUsernameIn(List<String> values) { addCriterion("username in", values, "username"); return (Criteria) this; } public Criteria andUsernameNotIn(List<String> values) { addCriterion("username not in", values, "username"); return (Criteria) this; } public Criteria andUsernameBetween(String value1, String value2) { addCriterion("username between", value1, value2, "username"); return (Criteria) this; } public Criteria andUsernameNotBetween(String value1, String value2) { addCriterion("username not between", value1, value2, "username"); return (Criteria) this; } public Criteria andBirthdayIsNull() { addCriterion("birthday is null"); return (Criteria) this; } public Criteria andBirthdayIsNotNull() { addCriterion("birthday is not null"); return (Criteria) this; } public Criteria andBirthdayEqualTo(Date value) { addCriterionForJDBCDate("birthday =", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayNotEqualTo(Date value) { addCriterionForJDBCDate("birthday <>", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayGreaterThan(Date value) { addCriterionForJDBCDate("birthday >", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayGreaterThanOrEqualTo(Date value) { addCriterionForJDBCDate("birthday >=", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayLessThan(Date value) { addCriterionForJDBCDate("birthday <", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayLessThanOrEqualTo(Date value) { addCriterionForJDBCDate("birthday <=", value, "birthday"); return (Criteria) this; } public Criteria andBirthdayIn(List<Date> values) { addCriterionForJDBCDate("birthday in", values, "birthday"); return (Criteria) this; } public Criteria andBirthdayNotIn(List<Date> values) { addCriterionForJDBCDate("birthday not in", values, "birthday"); return (Criteria) this; } public Criteria andBirthdayBetween(Date value1, Date value2) { addCriterionForJDBCDate("birthday between", value1, value2, "birthday"); return (Criteria) this; } public Criteria andBirthdayNotBetween(Date value1, Date value2) { addCriterionForJDBCDate("birthday not between", value1, value2, "birthday"); return (Criteria) this; } public Criteria andSexIsNull() { addCriterion("sex is null"); return (Criteria) this; } public Criteria andSexIsNotNull() { addCriterion("sex is not null"); return (Criteria) this; } public Criteria andSexEqualTo(String value) { addCriterion("sex =", value, "sex"); return (Criteria) this; } public Criteria andSexNotEqualTo(String value) { addCriterion("sex <>", value, "sex"); return (Criteria) this; } public Criteria andSexGreaterThan(String value) { addCriterion("sex >", value, "sex"); return (Criteria) this; } public Criteria andSexGreaterThanOrEqualTo(String value) { addCriterion("sex >=", value, "sex"); return (Criteria) this; } public Criteria andSexLessThan(String value) { addCriterion("sex <", value, "sex"); return (Criteria) this; } public Criteria andSexLessThanOrEqualTo(String value) { addCriterion("sex <=", value, "sex"); return (Criteria) this; } public Criteria andSexLike(String value) { addCriterion("sex like", value, "sex"); return (Criteria) this; } public Criteria andSexNotLike(String value) { addCriterion("sex not like", value, "sex"); return (Criteria) this; } public Criteria andSexIn(List<String> values) { addCriterion("sex in", values, "sex"); return (Criteria) this; } public Criteria andSexNotIn(List<String> values) { addCriterion("sex not in", values, "sex"); return (Criteria) this; } public Criteria andSexBetween(String value1, String value2) { addCriterion("sex between", value1, value2, "sex"); return (Criteria) this; } public Criteria andSexNotBetween(String value1, String value2) { addCriterion("sex not between", value1, value2, "sex"); return (Criteria) this; } public Criteria andAddressIsNull() { addCriterion("address is null"); return (Criteria) this; } public Criteria andAddressIsNotNull() { addCriterion("address is not null"); return (Criteria) this; } public Criteria andAddressEqualTo(String value) { addCriterion("address =", value, "address"); return (Criteria) this; } public Criteria andAddressNotEqualTo(String value) { addCriterion("address <>", value, "address"); return (Criteria) this; } public Criteria andAddressGreaterThan(String value) { addCriterion("address >", value, "address"); return (Criteria) this; } public Criteria andAddressGreaterThanOrEqualTo(String value) { addCriterion("address >=", value, "address"); return (Criteria) this; } public Criteria andAddressLessThan(String value) { addCriterion("address <", value, "address"); return (Criteria) this; } public Criteria andAddressLessThanOrEqualTo(String value) { addCriterion("address <=", value, "address"); return (Criteria) this; } public Criteria andAddressLike(String value) { addCriterion("address like", value, "address"); return (Criteria) this; } public Criteria andAddressNotLike(String value) { addCriterion("address not like", value, "address"); return (Criteria) this; } public Criteria andAddressIn(List<String> values) { addCriterion("address in", values, "address"); return (Criteria) this; } public Criteria andAddressNotIn(List<String> values) { addCriterion("address not in", values, "address"); return (Criteria) this; } public Criteria andAddressBetween(String value1, String value2) { addCriterion("address between", value1, value2, "address"); return (Criteria) this; } public Criteria andAddressNotBetween(String value1, String value2) { addCriterion("address not between", value1, value2, "address"); return (Criteria) this; } } /** * This class was generated by MyBatis Generator. * This class corresponds to the database table users * * @mbg.generated do_not_delete_during_merge Sat Aug 03 10:42:16 CST 2019 */ public static class Criteria extends GeneratedCriteria { protected Criteria() { super(); } } /** * This class was generated by MyBatis Generator. * This class corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ public static class Criterion { private String condition; private Object value; private Object secondValue; private boolean noValue; private boolean singleValue; private boolean betweenValue; private boolean listValue; private String typeHandler; public String getCondition() { return condition; } public Object getValue() { return value; } public Object getSecondValue() { return secondValue; } public boolean isNoValue() { return noValue; } public boolean isSingleValue() { return singleValue; } public boolean isBetweenValue() { return betweenValue; } public boolean isListValue() { return listValue; } public String getTypeHandler() { return typeHandler; } protected Criterion(String condition) { super(); this.condition = condition; this.typeHandler = null; this.noValue = true; } protected Criterion(String condition, Object value, String typeHandler) { super(); this.condition = condition; this.value = value; this.typeHandler = typeHandler; if (value instanceof List<?>) { this.listValue = true; } else { this.singleValue = true; } } protected Criterion(String condition, Object value) { this(condition, value, null); } protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { super(); this.condition = condition; this.value = value; this.secondValue = secondValue; this.typeHandler = typeHandler; this.betweenValue = true; } protected Criterion(String condition, Object value, Object secondValue) { this(condition, value, secondValue, null); } } }
package cc.mapper; import java.util.List; import cc.entity.Users; import cc.entity.UsersExample; import org.apache.ibatis.annotations.Param; public interface UsersMapper { List<Users> selectByExample(UsersExample example); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ Users selectByPrimaryKey(Integer id); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ int updateByExampleSelective(@Param("record") Users record, @Param("example") UsersExample example); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ int updateByExample(@Param("record") Users record, @Param("example") UsersExample example); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ int updateByPrimaryKeySelective(Users record); /** * This method was generated by MyBatis Generator. * This method corresponds to the database table users * * @mbg.generated Sat Aug 03 10:42:16 CST 2019 */ int updateByPrimaryKey(Users record); int deleteByPrimaryKey(Integer id); int deleteBatch(@Param("ids") Integer[] ids); }
定义UsersService接口
package cc.service; import cc.entity.Users; import java.util.List; public interface UsersService { /** * * @Title: list * @Description: 获取所有用户的所有信息 * @param @return * @return List<Users> * @throws */ List<Users> list(); /** * @Title: selectById * @Description: 根据id查询用户信息 * @param @param uid * @param @return * @return Users * @throws */ Users selectById(int uid); /** * @Title: update * @Description: 根据id来修改用户信息 * @param @param user * @param @return * @return int * @throws */ int update(Users user); }
实现impl
package cc.service.impl; import java.util.List; import cc.entity.Users; import cc.mapper.UsersMapper; import cc.service.UsersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UsersServiceImpl implements UsersService { @Autowired private UsersMapper usersMapper; @Override public List<Users> list() { return usersMapper.selectByExample(null); } @Override public Users selectById(int uid) { return usersMapper.selectByPrimaryKey(uid); } @Override public int update(Users user) { return usersMapper.updateByPrimaryKey(user); } }
实现Controller
package cc.web; import java.util.List; import cc.entity.Users; import cc.service.UsersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; //http"://localhost:8080/项目名/user/list @Controller @RequestMapping("/user") public class UsersController { @Autowired private UsersService userService; @RequestMapping("/list") public ModelAndView list() { ModelAndView mv= new ModelAndView(); //1.调用用户的service层的方法获取所有用户所有数据 List<Users> userses = userService.list(); //2.将数据绑定mv上 mv.addObject("userses",userses); //3.设置视图 mv.setViewName("user/list"); //4.放回mv return mv; } /** * @Title: toUpdate * @Description: 去修改页面 * @param @param uid * @param @return * @return ModelAndView * @throws 注意:1.默认情况下这个方法的参数名必须和请求的url请求参数名一致 */ @RequestMapping("/to_edit") public ModelAndView toUpdate(int uid) { System.out.println("====进入toUpdate===uid=>"+uid); ModelAndView mv = new ModelAndView(); //1.查询该用户的所有信息 web--servcice-maper-数据 Users users = userService.selectById(uid); //2.将该用户数据绑定到mv mv.addObject("user", users); //3.将修改页面的jsp名称绑定到mv中 mv.setViewName("user/edit"); //4.返回mv return mv; } /** * @Title: update * @Description: 更新用户信息的方法 * @param @param user * @param @return * @return ModelAndView * @throws 注意:edit.jsp表单元素的name值必须与update的参数实体类 的对应属性名一致!! */ @RequestMapping("/update") public ModelAndView update(Users user) { System.out.println("====进入update===user="+user); ModelAndView mv=new ModelAndView(); //1.调用service更新用户信息 int result = userService.update(user); //2.绑定视图 if(result>0) {//更新成功 //重定向 ,user/list的映射的list()方法,再由list()跳转到user/list.jsp mv.setViewName("redirect:../user/list"); }else {//更新失败 } //3.返回mv return mv; } }
【补充】
@Component这个注解 在后期spring后期版本中进行细化
@Controller ----web层
@Service -----业务层
@Repository -----持久层 spring data jpa spring JDBCTemplate
四:jsp中关于Date类型数据的显示
1、方式:jsp的jstl的format库 (c库)
第1步:<%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>
第2步:<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd HH:mm:ss"/>
将controller传递过来的Date类型数据,格式成指定格式的字符串日期
注:HH是24小时制 hh是12小时制
五:spring mvc 处理器@controller的参数的绑定
5.1 基本类型参数绑定 : 自动绑定 要求:处理器方法的参数必须与url的参数一致。 5.2 pojo对象类型参数绑定: 自动绑定 要求:表达的元素的name必须与pojo的属性名一致
补充: 1)http请求的响应码: 404 找打不资源 500 系统代码错误 200 请求成功 400 Bad Request 请求无法接受--一般参数绑定失败【重点】 405 请求方式不支持 2)spring mvc处理日期参数绑定的问题【重点】 方式一:@DateTimeFormat(pattern="yyyy-MM-dd") 实现 前提:spring-web.xml开启mvc注解配置 <mvc:annotation-driven></mvc:annotation-driven>替换 <!-- 1.映射器:HandlerMapping url==>handler --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <!-- 2.适配器: HandlerAdatper 调用 Handler==>Controller--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> mvc:annotation-driven支持@DateTimeFomat和@NumberFormat 注意:mvc:annotation-driven配置自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter 方法二:@InitBinder只会对当前Controller的String的日期转Date的日期进行自动转换 方法三:spring mvc的扩展插件-HandlerMethodArgumentResovle(了解) :表单----->controller的方法edit(Users users) HandlerMethodArgumentResovle用于处理客户端将请求参数传递给Controller方法 进行参数的自动绑定 第1步:定义一个Date注解 public @Interface 注解名称{ //属性名 } 第2步:在Controller方法中使用Date注解 @RequestMapping("/edit2") public String edit(@Date(params="birthday",pattern="yyyy-MM-dd")Users users) {} 第3步:定义spring mvc参数处理扩展接口HandlerMethodArgumentResovler 第4步:spring mvc扩展插件的实现类 注入到spring mvc中 <mvc:annotation-driven> <mvc:argument-resolvers> <bean class="com.cc.annotation.support.DateHandlerMethodArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven> 第5步:测试 5.3 控制的方法默认参数:request ,response,model,session,application 5.4 集合 1、数组 注意:批量删除不要逐个删,应该通过batch的删除语句 delete from users where id in (33,57) 2、list集合 (自学) 3、参数Map集合(自学) 5.5 Controller参数其他东西 1、@RequestParam @RequestParam(name="pageNum",defaultValue="1") 作用1) 可以设置默认值 作用2) 参数映射 前端传过来的参数名和后端controller接口的参数名不一致 2、restFul风格--参数传递 http://localhost:8080/应用名/user/delete?id=33 非restFul风格传参 http://localhost:8080/应用名/user/delete/33 restFul风格传参 注意:需要@PathVariable 进行参数绑定 特别注意:必须在web.xml中配置spring的编码过滤器,否则乱码。
六:controller的方法返回值的问题
1)返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。 2)String 配合Model参数 String---->视图名称 Model---> 数据 4)void 在controller方法形参上可以定义request和response,使用request或response指定响应结果: 4.1.使用request转向页面,如下: request.getRequestDispatcher("页面路径").forward(request, response); 4.2.通过response页面重定向: response.sendRedirect("url") 4.3.通过response指定响应结果,例如响应json数据如下: response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");
七,编写jsp运行
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <table width="80%" border="1"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>生日</th> <th>地址</th> <th>操作</th> </tr> <c:forEach items="${userses}" var="user"> <tr> <th>${user.id }</th> <th>${user.username}</th> <th>${user.sex}</th> <th>${user.birthday }</th> <th>${user.address}</th> <th> <a href="${pageContext.request. contextPath}/user/to_edit?uid=${user.id}">修改</a> </th> </tr> </c:forEach> </table> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/user/update" method="post"> <table border="1" align="center" width="50%" height="100px"> <caption><h1>Java6班-用户系统</h1></caption> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>生日</th> <th>住址</th> </tr> <tr align="center"> <td ><input value="${user.id }" name="id" readonly="readonly"/></td> <td><input type="text" name="username" value="${user.username }"/> </td> <td><input type="text" name="sex" value="${user.sex }"/> </td> <td> <!-- html5 中新增的标签:日期标签 --> <input type="date" name="birthday" value="<fmt:formatDate value='${user.birthday}' pattern='yyyy-MM-dd'/>"/> </td> <td><input type="text" name="address" value=" ${user.address}"/> </td> </tr> <tr> <td colspan="5" align="center"> <input type="submit" value="更新"/> </td> </tr> </table> </form> </body> </html>
注意:UsersMapper.xml,beans.xml等就没写了。上文有