SSM高級整合-----CRUD

SSM-CRUD

1、環境搭建

​ 使用IDEA創建MavenWeb項目:並導入項目需要的依賴

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8tSfcLM4-1592193726130)(SSM高級整合-----CRUD.assets/image-20191227145718386.png)]

<dependencies>
    <!--pageHelper 分頁插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.0.0</version>
    </dependency>

    <!--引入項目依賴包-->
    <!--spring mvc-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- spring jdbc-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>

    <!-- spring 測試-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.7.RELEASE</version>
        <scope>compile</scope>
    </dependency>

    <!--Spring 面向切面編程-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>

    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.2</version>
    </dependency>

    <!--mybatis 整合spring的適配包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>

    <!--數據庫連接池-->
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>

    <!--數據庫-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>

    <!--jstl-->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!--servlet api-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!--mybatis 逆向工程-->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.5</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.8</version>
    </dependency>

    <!--JSR303 數據校驗支持,tomcat7以上-->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>
    </dependency>

    <!--測試類-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.10</version>
    </dependency>
</dependencies>

​ 數據庫結構:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QLskaKwN-1592193726151)(SSM高級整合-----CRUD.assets/image-20191227152951262.png)]

2、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
		http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         id="WebApp_ID"
         version="4.0">

    <!--1、啓動spring的容器-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!--監聽器-->
    <!-- 讀取Spring上下文的監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--2、springmvc的前端控制器,攔截所有請求-->
    <servlet>
        <servlet-name>springDispatcherServlet</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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--3、字符編碼過濾器-->
    <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>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 進行消息頭的設置,用來解決ajax跨域的問題 -->
    <filter>
        <filter-name>cors</filter-name>
        <filter-class>com.zhangyong.filter.HeaderFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>cors</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--4、使用rest風格的URI,將頁面普通的post請求轉爲指定的delete或者put請求-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 5、ajax 可以發送put請求 -->
    <filter>
        <filter-name>HttpPutFormContentFilter</filter-name>
        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpPutFormContentFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

3、配置applicationContext.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:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!--spring 的配置文件-->
    <!--數據源,事務控制-->
    <!--spring不需要掃描控制器-->
    <context:component-scan base-package="com.zhangyong">
        <!--不掃描controller層-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <!--引入外部配置文件-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--=============數據源=====================-->
    <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--==================配置與mybatis整合=====================-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定mybatis全局配置文件的位置-->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="dataSource" ref="pooledDataSource"></property>
        <!--指定mybatis,mapper文件的位置-->
        <property name="mapperLocations" value="classpath:mapper/*.xml" ></property>
    </bean>

    <!--配置掃描器,將mybatis接口的實現加入到ioc容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
        <!--掃描所有的dao接口實現,加入到ioc容器中-->
        <property name="basePackage" value="com.zhangyong.dao"></property>
    </bean>

    <!--配置一個可以進行批量處理的sqlSession-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <constructor-arg name="executorType" value="BATCH"/>
    </bean>

    <!--=======================事務控制===========================-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--控制數據源-->
        <property name="dataSource" ref="pooledDataSource"></property>
    </bean>

    <!--開啓基於註解的事務-->
    <aop:config>
        <!--切入點表達式-->
        <aop:pointcut id="txPoint" expression="execution(* com.zhangyong.service..*(..))" ></aop:pointcut>
        <!--配置事務增強-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    </aop:config>

    <!--配置事務增強,事務如何切入-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--所有方法都是事務方法-->
            <tx:method name="*" />
            <tx:method name="get*" read-only="true"/>
        </tx:attributes>
    </tx:advice>

</beans>

4、配置dbconfig.properties

jdbc.jdbcUrl=jdbc:mysql:///ssm_crud?useSSL=false&serverTimezone=UTC&user=root&password=&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=521521

5、配置mybatis-config.xml(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>
    <!--駝峯命名規則-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--別名-->
    <typeAliases>
        <package name="com.zhangyong.bean"></package>
    </typeAliases>

    <!-- 註冊pagehelper,注意位置,在別名後-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--調節參數合理化-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

</configuration>

6、配置spring-mvc.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: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">

    <!--spring mvc 配置;包含網站跳轉的邏輯-->
    <context:component-scan base-package="com.zhangyong" use-default-filters="false">
        <!--只掃描控制器-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
    </context:component-scan>

    <!--配置視圖解析器,方便返回-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--兩個標準配置-->
    <!--將springmvc不能處理的請求交給tomcat-->
    <mvc:default-servlet-handler/>

    <!--能支持springmvc更高級的功能,JSR303校驗-->
    <mvc:annotation-driven/>
</beans>

7、使用mybatis.generator生成實體類以及數據庫接口和實現類

​ a、配置生成文件mbj.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!--不要文中的註釋-->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 配置數據庫連接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm_crud"
                        userId="root"
                        password="521521">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- 指定javaBean生成的位置 -->
        <javaModelGenerator targetPackage="com.zhangyong.bean"
                            targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--指定sql映射文件生成的位置 \src\main\resources\mapper-->
        <sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 指定dao接口生成的位置,mapper接口 生成的位置 \src\main\java\com.zhangyong.crud.dao-->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.zhangyong.dao" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- table指定每個表的生成策略 -->
        <table tableName="tbl_emp" domainObjectName="Employee"></table>
        <table tableName="tbl_dept" domainObjectName="Department"></table>
    </context>
</generatorConfiguration>

​ b、測試代碼並生成MBGTest:

/**
 * 生成bean,mapper
 */
public class MBGTest {
    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        List<String> warnings = new ArrayList<>();
        boolean overwrite = true;
        File configFile = new File("mbg.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}
 	c、設置SpringMVC前後端分離的ajax的跨域:
public class HeaderFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) resp;
        //解決跨域訪問報錯
        response.setHeader ("Access-Control-Allow-Origin", "*");
        response.setHeader ("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        //設置過期時間
        response.setHeader ("Access-Control-Max-Age", "3600");
        response.setHeader ("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
        // 支持HTTP 1.1.
        response.setHeader ("Cache-Control", "no-cache, no-store, must-revalidate");
        // 支持HTTP 1.0. response.setHeader("Expires", "0");
        response.setHeader ("Pragma", "no-cache");
        chain.doFilter (request, resp);
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }
}

​ d、整個代碼結構和生成的代碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vP4Yn8WS-1592193726157)(SSM高級整合-----CRUD.assets/image-20200127124608332.png)]

8、生成的EmployeeMapper.xml不滿足需求,我們希望查詢員工的同時部門信息也是查詢出來

更改實體類:Employee

/**
 * @author 張勇
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
public class Employee {
    private Integer empId;

    private String empName;

    private String gender;

    private String email;

    private Integer dId;

    /**
     * 希望查詢員工的同時部門信息也是查詢出來
     */
    private Department department;
}

添加employeeMapper

	/**
     * 帶條件的查詢,並且查出部門信息
     */
    List<Employee> selectByExampleWithDept(EmployeeExample example);

    /**
     * 根據Id查詢,並且查出部門信息
     *
     * @param empId
     * @return
     */
    Employee selectByPrimaryKeyWithDept(Integer empId);

添加employeeMapper.xml

<resultMap id="WithDeptResultMap" type="com.zhangyong.bean.Employee">
    <id column="emp_id" jdbcType="INTEGER" property="empId" />
    <result column="emp_name" jdbcType="VARCHAR" property="empName" />
    <result column="gender" jdbcType="CHAR" property="gender" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="d_id" jdbcType="INTEGER" property="dId" />
    <!-- 指定聯合查詢出的部門字段的封裝 -->
    <association property="department" javaType="com.zhangyong.bean.Department">
      <id column="dept_id" property="deptId"/>
      <result column="dept_name" property="deptName"/>
    </association>
  </resultMap>
  <!--查出關聯表的信息-->
  <!-- List<Employee> selectByExampleWithDept(EmployeeExample example);
   	   Employee selectByPrimaryKeyWithDept(Integer empId);-->
  <select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="WithDept_Column_List" />
    from tbl_emp e
    left join tbl_dept d on e.d_id = d.dept_id
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause == null">
      order by /*${orderByClause}*/ e.emp_id
    </if>
  </select>
  <select id="selectByPrimaryKeyWithDept" parameterType="java.lang.Integer" resultMap="WithDeptResultMap">
    select
    <include refid="WithDept_Column_List" />
    from tbl_emp e
    left join tbl_dept d on e.d_id = d.dept_id
    where emp_id = #{empId,jdbcType=INTEGER}
  </select>

9、編寫控制層EmployeeController,顯示基本信息

/**
 * @Author 張勇
 * @Date 2019/12/27 22:20
 * @Version 1.0
 * 處理員工的CRUD請求
 */
@Controller
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    /**
     * 查詢員工數據(分頁查詢)
     *
     * @return
     */
    @RequestMapping("/emps")
    public String getEmps(@RequestParam(value = "pn",defaultValue = "1")Integer pn, Model model) {
        //添加分頁查詢:引入PageHelper分頁插件
        //在查詢之前只需要調用,傳入頁碼,以及每頁大小
        PageHelper.startPage (pn,5);
        //startPage後面緊跟的查詢就是一個分頁查詢

        List<Employee> emps = employeeService.getAll ();

        //使用PageInfo來包裝查詢結果,只需要將PageInfo交給頁面就行了
        //PageInfo封裝了很多方法便於我們使用(如:總頁數,上一頁,下一頁……)
        //5表示連續顯示的頁數
        PageInfo page = new PageInfo (emps,5);

        //使用model將值帶入前端
        model.addAttribute ("pageInfo",page);

        return "list";
    }
}

10、編寫EmployeeService層:

/**
 * @Author 張勇
 * @Date 2019/12/27 22:25
 * @Version 1.0
 */
@Service
public class EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;

    /**
     * 查詢所有員工
     * @return
     */
    public List<Employee> getAll() {
        return employeeMapper.selectByExampleWithDept (null);
    }
}

11、EmployeeControllerTest測試代碼:

/**
 * @Author 張勇
 * @Date 2019/12/27 22:52
 * @Version 1.0
 * 使用Spring測試模塊提供的測試請求功能,測試crud請求的準確性
 * spring4測試的時候,需要3.0以上的Servlet Api以上
 */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:applicationContext.xml", "classpath:spring-mvc.xml"})
public class EmployeeControllerTest {

    //傳入SpringMVC的ioc
    @Autowired
    WebApplicationContext context;
    //虛擬MVC請求,獲取到處理結果
    MockMvc mockMvc;

    @Before
    public void initMockMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup (context).build ();
    }

    @Test
    public void getEmps() throws Exception {
        //模擬請求拿到的返回值
        MvcResult result = mockMvc.perform (MockMvcRequestBuilders.get ("/emps").param ("pn", "1"))
                .andReturn ();
        //請求成功以後,請求域中會有PageInfo,取出pageInfo進行驗證
        MockHttpServletRequest request = result.getRequest ();
        PageInfo pi = (PageInfo) request.getAttribute ("pageInfo");
        System.out.println ("當前頁碼:" + pi.getPageNum ());
        System.out.println ("總頁碼" + pi.getPages ());
        System.out.println ("總記錄數" + pi.getTotal ());
        System.out.println ("在頁面需要連續顯示的頁碼");
        int[] nums = pi.getNavigatepageNums ();
        for (int num : nums) {
            System.out.print (" " + num);
        }

        //獲取員工數據
        List<Employee> list = pi.getList ();
        for (Employee employee : list) {
            System.out.println ("ID:" + employee.getEmpId () + "====>Name:" + employee.getEmpName ());
        }
    }
}

kHttpServletRequest request = result.getRequest ();
PageInfo pi = (PageInfo) request.getAttribute (“pageInfo”);
System.out.println (“當前頁碼:” + pi.getPageNum ());
System.out.println (“總頁碼” + pi.getPages ());
System.out.println (“總記錄數” + pi.getTotal ());
System.out.println (“在頁面需要連續顯示的頁碼”);
int[] nums = pi.getNavigatepageNums ();
for (int num : nums) {
System.out.print (" " + num);
}

    //獲取員工數據
    List<Employee> list = pi.getList ();
    for (Employee employee : list) {
        System.out.println ("ID:" + employee.getEmpId () + "====>Name:" + employee.getEmpName ());
    }
}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章