SpringMVC与MyBatis整合(一)——查询人员列表

      从今天开始,一点点的记录做毕设和学习的过程。

      寒假才开始接触SpringMVC和MyBatis,之前对框架的概念理解并不到位,也没学过Spring。目前学习起来思路并不很清晰,有些东西我还不能理解,只是参考别人的代码然后自己调试修改,在不断的查资料、编写代码和调试错误中学习。

      这篇博客更新的是整合SpringMVC和MyBatis来查询所有的人员列表以及一些学习笔记。这些代码后期还需要大量的修改,仅作为入门程序,当做练习。

     一、SpringMVC+mybatis的系统架构:

    

     二、工程架构:

      

 

三、数据库文件

四、整合过程

    第一、整合持久层:mybatis和spring整合,通过spring管理mapper接口。

     使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

  1. 编写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;
    }
    
    
}
View Code

      2. 编写mapper.java和mapper.xml,两者名称一致。

  •  PersonMapper.java
package mapper;
import java.util.List;
import po.Person;
public interface PersonMapper
{
    List<Person> findAllPerson();
}
View Code
  •  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>
View Code

     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>
View Code

  【注】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();
}
View Code
  • 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;
    }
}
View Code

 第三、表现层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>
View Code

    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>
View Code

   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";
    }
}
View Code

  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>
View Code

  第四、在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>
View Code

五、功能测试

输入http://localhost:8080/test01/findAllPerson

六、测试成功!

[PS]:遗留日期格式转换问题待解决。

 

转载于:https://www.cnblogs.com/dadawei/p/5176172.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介:历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、MybatisMybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值