从今天开始,一点点的记录做毕设和学习的过程。
寒假才开始接触SpringMVC和MyBatis,之前对框架的概念理解并不到位,也没学过Spring。目前学习起来思路并不很清晰,有些东西我还不能理解,只是参考别人的代码然后自己调试修改,在不断的查资料、编写代码和调试错误中学习。
这篇博客更新的是整合SpringMVC和MyBatis来查询所有的人员列表以及一些学习笔记。这些代码后期还需要大量的修改,仅作为入门程序,当做练习。
一、SpringMVC+mybatis的系统架构:
二、工程架构:
三、数据库文件
四、整合过程
第一、整合持久层:mybatis和spring整合,通过spring管理mapper接口。
使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
- 编写po类。
package po;
import java.util.Date;
public class Person
{
private int id;
private String username;
private String sex;
private int age;
private String card_id;
private String actor;
private String depart;
private Date in_time;
private String phoneNum;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getCard_id()
{
return card_id;
}
public void setCard_id(String card_id)
{
this.card_id = card_id;
}
public String getActor()
{
return actor;
}
public void setActor(String actor)
{
this.actor = actor;
}
public String getDepart()
{
return depart;
}
public void setDepart(String depart)
{
this.depart = depart;
}
public Date getIn_time()
{
return in_time;
}
public void setIn_time(Date in_time)
{
this.in_time = in_time;
}
public String getPhoneNum()
{
return phoneNum;
}
public void setPhoneNum(String phoneNum)
{
this.phoneNum = phoneNum;
}
}
2. 编写mapper.java和mapper.xml,两者名称一致。
- PersonMapper.java
package mapper;
import java.util.List;
import po.Person;
public interface PersonMapper
{
List<Person> findAllPerson();
}
- PersonMapper.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">
<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址
-->
<mapper namespace="mapper.PersonMapper">
<!-- 解决表名与字段不匹配 -->
<resultMap type="Person" id="personResultMap">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<result property="card_id" column="card_id"/>
<result property="actor" column="actor"/>
<result property="depart" column="depart"/>
<result property="in_time" column="in_time"/>
<result property="phoneNum" column="phone_num"/>
</resultMap>
<!-- select的id和PersonMapper.java的函数名一致 -->
<select id="findAllPerson" resultMap="personResultMap" resultType="Person">
select * from personnel
</select>
</mapper>
3. mybatis配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置别名 -->
<typeAliases>
<!-- 批量扫描别名 -->
<typeAlias alias="Person" type="po.Person"/>
</typeAliases>
<!-- 配置mapper
必须遵循:mapper.xml和mapper.java文件同名且在一个目录
-->
<mappers>
<mapper resource="mapper/PersonMapper.xml"/>
</mappers>
</configuration>
【注】mapper代理开发规范:
- 在mapper.xml中namespace等于mapper接口地址;
- mapper.java接口中的方法名和mapper.xml中statement的id一致;
- mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致;
- mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
第二、整合业务层Service:通过spring管理 service接口。使用配置方式将service接口配置在spring配置文件中。
- PersonService.java
package service; import java.util.List; import po.Person; public interface PersonService { List<Person> findAllPerson(); }
- PersonServiceImpl.java继承PersonService。(其中@后的注解内容不能省)
package service; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import mapper.PersonMapper; import po.Person; import service.PersonService; @Service @Transactional public class PersonServiceImpl implements PersonService { @Resource public PersonMapper personMapper; public List<Person> findAllPerson() { List<Person> findAllPerson = personMapper.findAllPerson(); return findAllPerson; } }
第三、表现层SpringMVC:由于springmvc是spring的模块,故不需要整合。
1.创建spring-mvc.xml文件,配置处理器映射器、适配器、视图解析器。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-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/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <!--对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> <context:component-scan base-package="controller"></context:component-scan> <context:component-scan base-package="service"></context:component-scan> <!-- 视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
2.创建db.properties文件,配置数据库连接参数。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/personnelmanagesys jdbc.username=root jdbc.password=admin
3.创建spring-common.xml文件,配置数据源,SqlSessionFactory,mapper扫描器。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-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/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 --> <context:property-placeholder location="classpath:config/db.properties" /> <!-- 1. 配置数据源 ,dbcp --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="30" /> <property name="maxIdle" value="5" /> </bean> <!-- 2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源 MyBatis定义数据源,同意加载配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configLocation" value="classpath:config/mybatis-config.xml" /> </bean> <!-- 3.mapper扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 --> <property name="basePackage" value="mapper"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> </beans>
4.开发Controller。
- PersonController.java
package controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import po.Person; import service.PersonService; @Controller public class PersonController { @Autowired private PersonService personService; @RequestMapping("/findAllPerson") public String findAllPerson(HttpServletRequest request) { List<Person> listPerson = personService.findAllPerson(); request.setAttribute("listPerson",listPerson); return "/allPerson"; } }
5.编写jsp。
- allPerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'allPerson.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <table border="1"> <tbody> <tr> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>卡号</th> <th>角色</th> <th>部门</th> <th>入职时间</th> <th>电话号码</th> </tr> <c:if test="${!empty listPerson }"> <c:forEach items="${listPerson}" var="list"> <tr> <td>${list.username }</td> <td>${list.sex }</td> <td>${list.age }</td> <td>${list.card_id }</td> <td>${list.actor }</td> <td>${list.depart }</td> <td>${list.in_time }</td> <td>${list.phoneNum }</td> </tr> </c:forEach> </c:if> </tbody> </table> </body> </html>
第四、在web.xml中加载Spring容器。
<?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" 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" version="2.5"> <!-- 加载Spring容器配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 设置Spring容器加载所有的配置文件的路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/spring-*.xml</param-value> </context-param> <!-- 配置SpringMVC核心控制器 --> <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*:config/spring-mvc.xml</param-value> </init-param> <!-- 启动加载一次 --> <load-on-startup>1</load-on-startup> </servlet> <!--为DispatcherServlet建立映射 --> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <display-name></display-name> </web-app>
五、功能测试
输入http://localhost:8080/test01/findAllPerson
六、测试成功!
[PS]:遗留日期格式转换问题待解决。