分页

导入pom

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>

mybatis-config.xml

1
2
3
4
5
6
7
8
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 选择mysql数据库的分页方式 -->
<property name="helperDialect" value="mysql"/>
<property name="rowBoundsWithCount" value="true"/>
</plugin>
</plugins>

使用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Test
public void limitTest(){
SqlSession session = MyBatisMapperUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);

//1. 开启分页 : pageNum 第几页,从1开始, pageSize 每页显示条数
PageHelper.startPage(1,3);

//2. 条件查询
List<User> users = mapper.selectAll();

//3. 将查询结果交给PageInfo处理
PageInfo<User> pageInfo = new PageInfo<>(users);

//分页相关结果
long total = pageInfo.getTotal(); //总条数
int pageNum = pageInfo.getPageNum(); //当前页
int pages = pageInfo.getPages(); //总页数
List<User> pageInfoList = pageInfo.getList(); //当前页数据

System.out.println("总条数:"+total+" 当前页:"+pageNum+" 总页数"+pages);
System.out.println("当前页数据....");
for (User user : pageInfoList) {
System.out.println(user);
}

MyBatisMapperUtils.closeSession();
}

SQL分页:limit {startIndex} {pageSize}

  • startIndex:查询结果的开始索引 = (当前页数 -1)* 每页显示条数
  • pageSize:每页显示条数

springMVC

spring是框架,baimvc是一种设计模式。,M代表model;duV代表View;C代表controller从字面意思你也可以看出来M是指模型一般dao指DAO和service ;view代表显示一般指页面eg:jsp、html 等,c指的是控制器

一些配置

pom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>4.2.4.RELEASE</spring.version>
</properties>

<dependencies>

<!-- spring start -->

<!--spring core start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring core end-->

<!--spring aop start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spirng aop end-->

<!--spring aspects start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring aspects end-->

<!--spring instrumentation start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring instrumentation end-->

<!--spring messaging start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring messaging end-->

<!--spring data access start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</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-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring data access end-->

<!--spring web start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</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-webmvc-portlet</artifactId>
<version>${spring.version}</version>
</dependency>

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

<!--spring test start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>

<!--spring test end -->
<!-- spring end -->


<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>

resource/springmvc.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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: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-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">

<!-- 扫描注解包 -->
<context:component-scan base-package="com.ls.controller" />
</beans>

WEB-INF/web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<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_4_0.xsd"
version="4.0">

<display-name>Archetype Created Web Application</display-name>


<!-- 设置核心配置器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

</web-app>

创建项目

aFVpfP

注意要选对了东西!!!!

aFEjwd

项目刚开始的时候只给了你个pom文件,里面的东西大部分不能要,删除掉name标签下面的所有标签,然后导入我上面的pom

创建包名,项目资源目录,如下:

aFVSYt

写代码的(java)弄成纯蓝色的,写配置的(resources)资源目录 弄成三道杠的

resouces下创建 springmvc.xml 更改为上面的配置

WEB-INF下的web.xml 更改为上面的配置

项目该有的样子:

aFEvTA

入门程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.ls.controller;

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

@Controller
public class HelloWorld {


@RequestMapping("/show")
public String show(){
System.out.println("你好 死狗");
return "WEB-INF/hello.jsp";
}
}

@Controller 标注在类上,表示当前类交给Spring容器管理,对象的创建和销毁由容器负责,默认以单例模式管理

@RequestMapping(“/show”) 类或者方法上 描述URL的请求路径

return “WEB-INF/hello.jsp”; 默认是servlet跳转,都知道web-inf下文件无法访问,但是站内跳转则可以访问

准备访问的文件

hello.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%--
Created by IntelliJ IDEA.
User: qidai
Date: 2020/7/27
Time: 14:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>社会青年</title>
</head>
<body>

我看我几分 像从前
</body>
</html>

然后配置tomcat,这个每个人的ide不一样位置不同

aFEzFI

aFVCSf

之后就可以开启tomcat了

如果你觉得return那个默认为页面跳转的内容要多写很多英文,很麻烦,又很容易手误出错,可以在 springmvc.xml 配置视图解析器:

1
2
3
4
5
6
7
8
9
<!--spring容器的包扫描-->
<context:component-scan base-package="com.czxy.mvc.controller"/>

<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>

prefix是前缀的意思,会作为前缀拼接你的return

suffix是后缀的意思,会作为后缀拼接你的return

接收参数

普通参数

  • 请求路径
1
http://localhost:8080/user/select/id/username.do?id=1001&username=tomcat
  • controller
1
2
3
4
5
@RequestMapping("/select/id/username")
public String testParam(Integer id,String username){
System.out.println("id="+id+" username="+username);
return "success";
}

用 ? 作为参数传递的开始,然后拼接参数 以及数值,参数自动映射,只要key值一样

pojo类接收

User.java

1
2
3
4
5
6
7
public class User {
private Integer id;
private String name;
private Float money;
private Address address;
//get set toString...
}

Address.java

1
2
3
4
5
public class Address {
private String provinceName;
private String cityName;
//get set toString...
}

添加表单页面

user.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/user/collection.do" method="post">
用户名称:<input type="text" name="name" ><br/>
用户余额:<input type="text" name="money" ><br/>
用户地址-省:<input type="text" name="address.provinceName" ><br/>
用户地址-市:<input type="text" name="address.Name" ><br/>
<input type="submit" value="保存">
</form>
</body>
</html>

controller接收参数

1
2
3
4
5
@RequestMapping("/collection.do")
public String saveAccount(User user){
System.out.println(user);
return "success";
}

可以将参数自动封装到实体类中的实体类,格式是:另一个实体类在这个实体类中的成员名字.另一个实体类自己的属性 用上面的例子来说就是:address.cityName

pojo类中各种类型的集合,数组

添加pojo类

1
2
3
4
5
public class Bank {
private String account;
private Double money;
//get set
}

修改User类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class User {
private Integer id;
private String name;
private Float money;
private Address address;

//集合类型属性
private List<Integer> ids;
private List<Bank> bankList;
private Map<String,Integer> sizeMap;
private Map<String,Bank> bankMap;

//get set
}

collection.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<form action="/user/collection.do" method="post">
用户名称:<input type="text" name="name" ><br/>
用户余额:<input type="text" name="money" ><br/>
用户地址-省:<input type="text" name="address.provinceName" ><br/>
用户地址-市:<input type="text" name="address.Name" ><br/>

IdsItegerList:<input type="text" name="ids[0]" ><br/>
IdsItegerList:<input type="text" name="ids[1]" ><br/>
IdsItegerList:<input type="text" name="ids[2]" ><br/>

String[]:<input type="text" name="props" ><br/>
String[]:<input type="text" name="props" ><br/>

bankList[0].account:<input type="text" name="bankList[0].account" ><br/>
bankList[0].money:<input type="text" name="bankList[0].money" ><br/>
bankList[1].account:<input type="text" name="bankList[1].account" ><br/>
bankList[1].money:<input type="text" name="bankList[1].money" ><br/>

sizeMap-S:<input type="text" name="sizeMap['S']" ><br/>
sizeMap-M:<input type="text" name="sizeMap['M']"><br/>
sizeMap-L:<input type="text" name="sizeMap['L']"><br/>

bankMap-bank1-account: <input type="text" name="bankMap['bank1'].account"><br/>
bankMap-bank1-money: <input type="text" name="bankMap['bank1'].money"><br/>
bankMap-bank2-account: <input type="text" name="bankMap['bank2'].account"><br/>
bankMap-bank2-money: <input type="text" name="bankMap['bank2'].money"><br/>
<input type="submit" value="保存">
</form>

controller

1
2
3
4
5
@RequestMapping("/collection.do")
public String collection(User user,String[] props){
System.out.println(user);
return "success";
}

上面已经演示出了所有通过form表单传参的情况了,相信你有了看懂实体类的实力之后,这个也是不在话下了

传参乱码

在你的前端控制器中添加下面的代码(web.xml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- 配置 springMVC编码过滤器 -->
<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>*.do</url-pattern>
</filter-mapping>