用方框框起来的一定不能选错了
在这里填写GAV
在这里会发现src/main目录下没有java目录 如下解决 (这里是从别人的博客中复制下来的 原文地址 http://blog.csdn.net/u014756827/article/details/52497572)
选择File->Project Structure...
选择Modules选项卡下面的Sources项,在main文件夹上右键,选择New Folder...并点击OK
输入要创建的文件夹名称java,并点击OK继续
在创建好的java文件夹上右键选择Sources项将该文件夹标记为源文件夹
我们发现java文件夹已经由黄色变成了蓝色,我们点击OK按钮表示设置完成。
7.设置完成后的项目结构如下:
这正是我们标准Maven项目的结构,完美!至此我们就解决了Idea创建maven-archetype-webapp项目无java目录的问题。
index.jsp界面右键出现如下界面
直接运行就好了 运行成功的话 在浏览器中会出现
Hello World!
有的不会出现运行这里可以看到解决办法 http://m.blog.csdn.net/article/details?id=53239160
下面配置mybatis 主要做一个查询所有学生的页面 (分页)
数据库表数据如下 学生表
班级表
目录结构如下
下面依次贴出代码
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lovo</groupId>
<artifactId>shop</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shop Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<finalName>shop</finalName>
</build>
</project>
web.xml
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 当服务器启动的时候需要读取spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mybatis.xml</param-value>
</context-param>
<!-- 配置 ContextLoaderListener 初始化spring 容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
spring_mvc
<?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.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">
<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
<context:component-scan base-package="com.my.*" />
<!-- mvc的注解驱动 -->
<mvc:annotation-driven />
<!-- 处理静态资源 -->
<mvc:default-servlet-handler />
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!--视图前缀 -->
<!--<property name="prefix" value="/jsp/" />-->
<!--视图后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
spring_mybatis.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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<context:property-placeholder location="classpath:config.properties" />
<context:component-scan base-package="com.my.*" />
<!-- 配置数据源 这里使用druid数据库-->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}" />
<property name="password" value="${jdbc_password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="0" />
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="20" />
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="20" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="0" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="25200000" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="1800" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
<!-- 监控数据库 -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" />
</bean>
<!-- 配置sqlsesssionFactory -->
<bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.my.model" />
<property name="mapperLocations" value="classpath:mapping/*.xml" />
</bean>
<!-- 配置映射接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.my.*" />
<!-- 注意: 配置 sqlSessionFactoryBeanName 是使用 value 不是使用ref -->
<property name="sqlSessionFactoryBeanName" value="sqlsessionFactory" />
</bean>
<!--配置事务管理器(jdbc的事务管理器) -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
config.properties
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
jdbc_password=123456
log4j.properties
log4j.rootLogger=DEBUG,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c]%m%n
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=mybatis.log
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
ClassBean
package com.my.model;
public class ClassBean {
private Integer cId;
private String cName;
public Integer getcId() {
return cId;
}
public void setcId(Integer cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName == null ? null : cName.trim();
}
}
StudentBean
package com.my.model;
public class StudentBean {
private Integer id;
private String name;
private String sex;
private ClassBean cls;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
public ClassBean getCls() {
return cls;
}
public void setCls(ClassBean cls) {
this.cls = cls;
}
}
PageBean
package com.my.model;
import java.io.Serializable;
import java.util.List;
/**
* Created by heyongjie on 2017/2/25.
*/
// 分页bean 用于在显示的时候进行分页显示
public class PageBean<E> implements Serializable{
private int pageNo; // 当前页数
private int showNo; // 每页显示的条数
private int CountNo; // 总共有多少页
private List<E> lists;// 这一页的数据
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getShowNo() {
return showNo;
}
public void setShowNo(int showNo) {
this.showNo = showNo;
}
public int getCountNo() {
return CountNo;
}
public void setCountNo(int countNo) {
CountNo = countNo;
}
public List<E> getLists() {
return lists;
}
public void setLists(List<E> lists) {
this.lists = lists;
}
}
StudentBeanMapper
package com.my.dao;
import com.my.model.StudentBean;
import java.util.List;
import java.util.Map;
public interface StudentBeanMapper {
/**
*查询所有的学生信息
* @param infoMap 将pageNo showNo封装到Map中然后传到xml中去
* @return 在dao层暂时只返回集合 不进行分页bean的封装 在服务层在进行封装
*/
public List<StudentBean> getAllStu(Map<String,Integer> infoMap);
/**
* 因为进行了分页处理 所以需要求总条数 利于PageBean封装
* @return 返回总共有多少条
*/
public int getAllStuNum();
}
StudentBeanMapper.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.my.dao.StudentBeanMapper">
<resultMap id="getAllMap" type="StudentBean">
<id column="id" property="id"/>
<result column="name" property="name" />
<result column="sex" property="sex"/>
<association property="cls" javaType="ClassBean">
<result property="cName" column="c_name"/>
</association>
</resultMap>
<!--查询所有的学生 根据分页显示 -->
<!--因为studentBean是由mbtis的反向工程生成的 所以不用给别名 因为列明和属性名相同-->
<select id="getAllStu" parameterType="Map" resultMap="getAllMap">
SELECT ts.name,ts.sex,tc.c_name FROM t_student AS ts LEFT JOIN t_class AS tc ON ts.c_id = tc.c_id limit #{pageNo},#{showNo}
</select>
<select id="getAllStuNum" resultType="int">
SELECT COUNT(*) FROM t_student AS ts LEFT JOIN t_class AS tc ON ts.c_id = tc.c_id
</select>
</mapper>
IStudentServer
package com.my.iserver;
import com.my.model.PageBean;
import java.util.Map;
/**
* Created by heyongjie on 2017/2/25.
*/
public interface IStudentServer {
/**
* 这里进行分页信息的整理
* @param infoMap 封装pageNo shwoNo
* @return 返回pageNo 分页信息
*/
public PageBean getAllStu(Map<String,Integer> infoMap);
}
StudentServer
package com.my.server;
import com.my.dao.StudentBeanMapper;
import com.my.iserver.IStudentServer;
import com.my.model.PageBean;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
/**
* Created by heyongjie on 2017/2/25.
*/
@Service
public class StudentServer implements IStudentServer {
@Resource
private StudentBeanMapper sbm;
public PageBean getAllStu(Map<String, Integer> infoMap) {
PageBean pageBean = new PageBean();
// 首先获得总条数
int countNum = sbm.getAllStuNum();
int showNo = infoMap.get("showNo");
// 判断能不能被整除
if(countNum%showNo == 0){
pageBean.setCountNo(countNum/showNo);
}else{
// 如果不能被整除 那么总页数就需要加1
pageBean.setCountNo(countNum/showNo + 1);
}
pageBean.setPageNo(infoMap.get("pageNo"));
pageBean.setLists(sbm.getAllStu(infoMap));
pageBean.setShowNo(showNo);
return pageBean;
}
}
package com.my.controller;
import com.my.model.PageBean;
import com.my.server.StudentServer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* Created by heyongjie on 2017/2/25.
*/
@Controller
public class StudentController {
@Resource
private StudentServer ss;
@RequestMapping(value = "/{pageNo}/{showNo}/getAllStudent")
@ResponseBody // 使用ajax而不直接返回界面
public PageBean getAllStudent(@PathVariable(value="pageNo") int pageNo,@PathVariable(value="showNo") int showNo){
Map<String,Integer> infoMap = new HashMap<String, Integer>();
System.out.println(pageNo + "====" + showNo);
infoMap.put("showNo",showNo);
infoMap.put("pageNo",(pageNo-1)*showNo);
PageBean page = ss.getAllStu(infoMap);
return page;
}
}
最后是页面
getStudent.jsp
<%--
Created by IntelliJ IDEA.
User: heyongjie
Date: 2017/2/25
Time: 11:19
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查询所有的学生</title>
</head>
<script type="text/javascript" src="jquery-3.1.0.min.js"></script>
<script>
$(function () {
var pageNo = parseInt($(".pageNo").html());
ajax(pageNo);
// 点击上一页
$(".top").click(function(){
var href = $(this).attr("href");
// 获得当前是第几页
var pageNo = parseInt($(".pageNo").html());
if(href == "#"){
// 移除href属性
if((pageNo - 1) == 1){
$(this).removeAttr("href");
}
ajax(pageNo - 1);
$(".pageNo").html(pageNo - 1);
// 为下一页添加href属性
var down = $(".down").attr("href");
if(down == null){
$(".down").attr("href","#");
}
}
});
// 点击下一页
$(".down").click(function(){
var href = $(this).attr("href");
// 获得总共第几页
var pageNo = parseInt($(".pageNo").html());
var countNo = parseInt($(".countNo").html());
if(href == "#"){
if((pageNo +1 )==countNo){
$(this).removeAttr("href");
}
ajax(pageNo + 1);
$(".pageNo").html(pageNo + 1);
// 为下一页添加href属性
var top = $(".down").attr("href");
if(top == null){
$(".top").attr("href","#");
}
}
});
});
function ajax(pageNo){
// 在发送ajax请求的时候就需要从界面得到当前是几页
$.ajax({
url: "/" + pageNo + "/4/getAllStudent",
type: "post",
dataType: "json",
success: function (date) {
console.log(date);
// 拼接表格
var htmlStr = "";
$.each(date.lists, function (i) {
htmlStr += "<tr>" +
"<td>" + date.lists[i].name + "</td>" +
"<td>" + date.lists[i].sex + "</td>" +
"<td>" + date.lists[i].cls.cName + "</td>" +
" </tr>";
});
console.log(htmlStr);
$(".body").html(htmlStr);
$(".countNo").html(date.countNo);
}
});
}
</script>
<body>
<%--这里界面就简单写了 --%>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>班级</th>
</tr>
</thead>
<tbody class="body">
<tr>
<td>fdf</td>
<td>dsf</td>
<td>dfd</td>
</tr>
</tbody>
<br/>
</table>
<a href="#" class="top" >上一页</a>
当前<span class="pageNo">1</span>页
总共<span class="countNo">1</span>页
<a href="#" class="down">下一页</a>
</body>
</html>
最后效果