zoukankan      html  css  js  c++  java
  • SSM 起步 (二)

    Spring SpringMVC MyBatis 起步(二)

    在项目中整合Mybatis

    1.在pom.xml中添加mybatis相关的依赖

     1         
     2         <!-- jdbc包连接数据库 -->
     3         <dependency>
     4             <groupId>org.springframework</groupId>
     5             <artifactId>spring-jdbc</artifactId>
     6             <version>${spring.version}</version>
     7         </dependency>
     8 
     9         <!-- mybatis核心包 -->
    10         <dependency>
    11             <groupId>org.mybatis</groupId>
    12             <artifactId>mybatis</artifactId>
    13             <version>${mybatis.version}</version>
    14         </dependency>
    15         <!-- mybatis/spring包 -->
    16         <dependency>
    17             <groupId>org.mybatis</groupId>
    18             <artifactId>mybatis-spring</artifactId>
    19             <version>1.3.2</version>
    20         </dependency>
    21 
    22         <!-- 导入Mysql数据库链接jar包 -->
    23         <dependency>
    24             <groupId>mysql</groupId>
    25             <artifactId>mysql-connector-java</artifactId>
    26             <version>5.1.36</version>
    27         </dependency>
    28         <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
    29         <dependency>
    30             <groupId>commons-dbcp</groupId>
    31             <artifactId>commons-dbcp</artifactId>
    32             <version>1.2.2</version>
    33         </dependency>

    2.进行相关配置

      在resources目录下新建配置文件applicationContext.xml配置数据库连接以及mybatis

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <beans xmlns="http://www.springframework.org/schema/beans"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xmlns:p="http://www.springframework.org/schema/p"  
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xmlns:mvc="http://www.springframework.org/schema/mvc"
     8     xsi:schemaLocation="
     9     http://www.springframework.org/schema/beans
    10     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    11     http://www.springframework.org/schema/mvc
    12     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    13     http://www.springframework.org/schema/context
    14     http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    15 
    16     <context:annotation-config></context:annotation-config>
    17 
    18     <context:component-scan base-package="com.xcz" />
    19     
    20     <!-- 引入配置文件 -->
    21     <bean id="propertyConfigurer"
    22         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    23         <property name="location" value="classpath:jdbc.properties" />
    24     </bean>
    25 
    26     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    27         <property name="driverClassName" value="${driver}" />
    28         <property name="url" value="${url}" />
    29         <property name="username" value="${username}" />
    30         <property name="password" value="${password}" />
    31         <!-- 初始化连接大小 -->
    32         <property name="initialSize" value="${initialSize}"></property>
    33         <!-- 连接池最大数量 -->
    34         <property name="maxActive" value="${maxActive}"></property>
    35         <!-- 连接池最大空闲 -->
    36         <property name="maxIdle" value="${maxIdle}"></property>
    37         <!-- 连接池最小空闲 -->
    38         <property name="minIdle" value="${minIdle}"></property>
    39         <!-- 获取连接最大等待时间 -->
    40         <property name="maxWait" value="${maxWait}"></property>
    41     </bean>
    42 
    43     <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    44     <bean id="sqlSessionFactory"
    45         class="org.mybatis.spring.SqlSessionFactoryBean">
    46         <property name="dataSource" ref="dataSource" />
    47         <!-- 自动扫描mapping.xml文件 -->
    48         <property name="mapperLocations" value="classpath*:com/xcz/mapping/*.xml"></property>
    49     </bean>
    50 
    51     <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    52     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    53         <property name="basePackage" value="com.xcz.dao" />
    54         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    55     </bean>
    56 
    57     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    58     <bean id="transactionManager"
    59         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    60         <property name="dataSource" ref="dataSource" />
    61     </bean>  
    62 </beans>

      在resources目录下新建jdbc.properties,将参数修改为你的mysql的数据库地址、用户名、密码

     1 driver=com.mysql.jdbc.Driver
     2 url=jdbc:mysql://localhost:3306/eshop
     3 username=root
     4 password=123456
     5 #定义初始连接数  
     6 initialSize=0  
     7 #定义最大连接数  
     8 maxActive=20  
     9 #定义最大空闲  
    10 maxIdle=20  
    11 #定义最小空闲  
    12 minIdle=1  
    13 #定义最长等待时间  
    14 maxWait=60000 

    3.从数据库中查询一条用户数据并输出

     3.1 使用mybatis-generator创建UserMapper.xml, UserMapper.java, User.java

      [ 参考:https://www.cnblogs.com/smileberry/p/4145872.html ]

      准备: mybatis-generator-core-1.3.7.jar,mysql-connector-java-5.1.46.jar,mysql-connector-java-5.1.46-bin.jar

      讲这三个jar包放在同一目录下,新建generatoConfig.xml,内容如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 <generatorConfiguration>
     6     <!-- 数据库驱动 -->
     7     <classPathEntry location="mysql-connector-java-5.1.46-bin.jar" />
     8     <context id="DB2Tables" targetRuntime="MyBatis3">
     9         <commentGenerator>
    10             <property name="suppressDate" value="true" />
    11             <!-- 是否去除自动生成的注释 true:是 : false:否 -->
    12             <property name="suppressAllComments" value="true" />
    13         </commentGenerator>
    14         <!--数据库链接URL,用户名、密码 -->
    15         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    16             connectionURL="jdbc:mysql://127.0.0.1:3306/eshop" userId="root"
    17             password="123456">
    18         </jdbcConnection>
    19         <javaTypeResolver>
    20             <property name="forceBigDecimals" value="false" />
    21         </javaTypeResolver>
    22         <!-- 生成模型的包名和位置 -->
    23         <javaModelGenerator targetPackage="com.xcz.model"
    24             targetProject="src">
    25             <property name="enableSubPackages" value="true" />
    26             <property name="trimStrings" value="true" />
    27         </javaModelGenerator>
    28         <!-- 生成映射文件的包名和位置 -->
    29         <sqlMapGenerator targetPackage="com.xcz.mapping"
    30             targetProject="src">
    31             <property name="enableSubPackages" value="true" />
    32         </sqlMapGenerator>
    33         <!-- 生成DAO的包名和位置 -->
    34         <javaClientGenerator type="XMLMAPPER"
    35             targetPackage="com.xcz.dao" targetProject="src">
    36             <property name="enableSubPackages" value="true" />
    37         </javaClientGenerator>
    38         <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 -->
    39         <table tableName="t_users" domainObjectName="User"
    40             enableCountByExample="false" enableUpdateByExample="false"
    41             enableDeleteByExample="false" enableSelectByExample="false"
    42             selectByExampleQueryId="false"></table>
    43     </context>
    44 </generatorConfiguration>

      在根目录处打开控制命令行或power shell

      运行 java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite

      得到如下提示则已成功生成代码

      生成的代码会按照配置中的路径进行放置

      在目录【src/com/xcz/】下可以看到文件夹和文件

      然后将其中的文件复制到项目中对应的文件夹内就完成这一步了。

     


     

    3.2 编写Service层和Controller层

      在【com/xcz/service】中新建文件UserService.java

     1 package com.xcz.service;
     2 
     3 import org.springframework.stereotype.Service;
     4 
     5 import com.xcz.model.User;
     6 
     7 @Service
     8 public interface UserService {
     9     
    10 
    11     User getUserByUserId(Integer userId);
    12 
    13 }

      然后创建一个impl文件夹,里面放置实现接口的类UserServicImpl.java

     1 package com.xcz.service.impl;
     2 
     3 import javax.annotation.Resource;
     4 
     5 import org.springframework.stereotype.Service;
     6 
     7 import com.xcz.dao.UserMapper;
     8 import com.xcz.service.UserService;
     9 import com.xcz.model.User;
    10 
    11 @Service("userService")
    12 public class UserServiceImpl implements UserService{
    13     
    14     @Resource
    15     private UserMapper userDao;
    16     
    17     public User getUserByUserId(Integer userId) {
    18         return this.userDao.selectByPrimaryKey(userId);
    19     }
    20 }

      在【com/xcz/controller】中新建文件UserController.java

     1 package com.xcz.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RequestParam;
     7 import org.springframework.web.bind.annotation.ResponseBody;
     8 
     9 import com.xcz.model.User;
    10 import com.xcz.service.UserService;
    11 
    12 @Controller
    13 @RequestMapping(value = "/user")
    14 public class UserController {
    15 
    16     @Autowired
    17     private UserService userService;
    18     
    19     @RequestMapping("/get")
    20     public @ResponseBody User getUserInfo(@RequestParam("userId") Integer userId) {
    21         User user = userService.getUserByUserId(userId);
    22         return user;
    23     }
    24 }

    3.3 在浏览器中访问

      访问 [ http://localhost:8080/fileReportary/user/get?userId=1 ]

      得到结果如下

      

      此时已经成功的获取到了用户ID为1的用户信息

    4.过程中可能遇到的问题

    4.1 NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

      原因:pom.xml中没有引入jstl相关的库

      解决办法:加入jstl的依赖

      备注:这个地方要注意过滤掉一些包,因为tomcat中已经包含,可能会产生冲突导致项目无法启动

     1         <dependency>
     2             <groupId>javax.servlet.jsp.jstl</groupId>
     3             <artifactId>jstl-api</artifactId>
     4             <version>1.2</version>
     5             <exclusions>
     6                 <exclusion>
     7                     <groupId>javax.servlet</groupId>
     8                     <artifactId>servlet-api</artifactId>
     9                 </exclusion>
    10                 <exclusion>
    11                     <groupId>javax.servlet.jsp</groupId>
    12                     <artifactId>jsp-api</artifactId>
    13                 </exclusion>
    14             </exclusions>
    15         </dependency>
    16         <dependency>
    17             <groupId>org.glassfish.web</groupId>
    18             <artifactId>jstl-impl</artifactId>
    19             <version>1.2</version>
    20             <exclusions>
    21                 <exclusion>
    22                     <groupId>javax.servlet</groupId>
    23                     <artifactId>servlet-api</artifactId>
    24                 </exclusion>
    25                 <exclusion>
    26                     <groupId>javax.servlet.jsp</groupId>
    27                     <artifactId>jsp-api</artifactId>
    28                 </exclusion>
    29                 <exclusion>
    30                     <groupId>javax.servlet.jsp.jstl</groupId>
    31                     <artifactId>jstl-api</artifactId>
    32                 </exclusion>
    33             </exclusions>
    34         </dependency>

    4.2 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

      原因:依赖包没有引入

      解决办法:右键项目-》properties-》Add-》Java Build Path Entries-》Maven Dependenciees

      添加成功后如下图,此时再运行就不会报错了

      

    4.3 mybatis-generator 的坑

      原因:mybatis-generator 生成的mapper.xml中可能会有重复的内容,会导致编译错误

      解决办法:删除掉重复的内容

  • 相关阅读:
    Spring学习总结(3)——Spring配置文件详解
    Hadoop学习总结(1)——大数据以及Hadoop相关概念介绍
    华为云文字识别关键技术和特别需要注意的事宜
    如何不用BPM配置时间
    华为云DevCloud为开发者提供高效智能的可信开发环境
    【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
    在modelarts上部署mask-rcnn模型
    独立物理机和虚拟机比较有什么优势?
    解惑Python模块学习,该如何着手操作...
    sar命令,linux中最为全面的性能分析工具之一
  • 原文地址:https://www.cnblogs.com/leiyuxiang/p/9555935.html
Copyright © 2011-2022 走看看