Springmvc+Mybatis整合及api接口编写demo
来源:互联网 发布:爆伤和黄字算法 编辑:程序博客网 时间:2024/06/05 15:15
最近在看java后台,折腾了几天,写了一个springmvc+mybatis的demo,这边提供给初学者一起学习。
首先看下项目结构:
src下面的entity、mapper都是mybatis自动生成的实体、mapper.java及mapper.xml文件,web下面是service和controller层;resources下面则是一些配置文件,下面会一一讲到。
另外说下mybatis自动生成表实体,mapper文件:
可以在网上下载:mybatis-generator.zip,里面包含了的文件如下:
我这里用的是1.3.5的版本,下载之后的lib目录里面应该有mybatis-generator-core-1.3.5.jar、mybatis-generator-core-1.3.5-javadoc.jar、mybatis-generator-core-1.3.5-sources.jar、mysql-connector-java-5.1.29.jar、generatorConfig.xml这些东西,然后自己需要修改generatorConfig.xml里面的内容,src文件夹是我新建的,里面用来装生成的package,我修改的generatorConfig.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> <!-- 引入配置文件 --> <!-- <properties resource="system.properties" /> --> <!-- 指定数据连接驱动jar地址 --> <classPathEntry location="D:\Javaweb\eclipse\eclipse\mybatis-generator-core-1.3.5\lib\mysql-connector-java-5.1.29.jar"/> <!--数据库驱动--> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接地址账号密码--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/sunshine" userId="root" password="root"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成实体类地址 --> <javaModelGenerator targetPackage="com.sm.entity" targetProject="src"> <!-- 是否针对string类型的字段在set的时候进行trim调用 --> <property name="trimStrings" value="true" /> <!-- <property name="rootClass" value="com.sm.entity" /> 继承父类 --> </javaModelGenerator> <!-- 生成mapxml文件 --> <sqlMapGenerator targetPackage="com.sm.mapper" targetProject="src"> </sqlMapGenerator> <!-- 生成mapxml对应client,也就是接口dao --> <javaClientGenerator targetPackage="com.sm.mapper" targetProject="src" type="XMLMAPPER"> </javaClientGenerator> <!-- tables --> <table tableName="answer_thank" domainObjectName="AnswerThank" > <property name="useActualColumnNames" value="true"/> </table> <table tableName="channel_topic" domainObjectName="ChannelTopic" > <property name="useActualColumnNames" value="true"/> </table> <table tableName="private_chat" domainObjectName="PrivateChat" > <property name="useActualColumnNames" value="true"/> </table> <table tableName="shine_channel" domainObjectName="ShineChannel" > <property name="useActualColumnNames" value="true"/> </table> <table tableName="shine_user" domainObjectName="ShineUser" > <property name="useActualColumnNames" value="true"/> </table> <table tableName="topic_answer" domainObjectName="TopicAnswer" > <property name="useActualColumnNames" value="true"/> <generatedKey column="spreadId" sqlStatement="MySql" identity="true" type="post"/> </table> <table tableName="topic_attention" domainObjectName="TopicAttention" > <property name="useActualColumnNames" value="true"/> </table> </context></generatorConfiguration>
这边注意数据连接驱动包的位置,我把生成的mapper.java和mapper.xml 放在同一个package中,数据库是我在本地随便选择的(因为只是做测试),上面都有注释,需要修改自己的xml也很简单。
生成之后的结构如下:
讲解项目的提前,需要用到的jar,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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sm</groupId> <artifactId>spring-mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <!-- base setting --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.locales>zh_CN</project.build.locales> <!-- plugin versions --> <plugin.maven-compiler>3.1</plugin.maven-compiler> <!-- lib versions --> <!-- mybatis版本号 --> <mybatis.version>3.2.4</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <junit.version>4.11</junit.version> <spring.version>4.1.2.RELEASE</spring.version> <httpclient.version>4.1.2</httpclient.version> <jackson.version>2.5.0</jackson.version> <tomcat.jdbc.version>7.0.53</tomcat.jdbc.version> <jstl.version>1.2</jstl.version> <aspectj.version>1.6.12</aspectj.version> <maven-dependency-plugin.version>2.1</maven-dependency-plugin.version> </properties> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- springframe start --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- springframe end --> <!-- jackson core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <!-- jackson annotation --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <!-- jackson databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- mysql驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> <!-- alibaba druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.7</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <!--velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.0</version> </dependency> </dependencies> <build> <plugins> <!-- define the project compile level --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build></project>
下面再一起看配置文件:
使用mybatis肯定需要连接本地数据库,配置文件db.properties
jdbc.driverClass = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/sunshine?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=truejdbc.username = rootjdbc.password = rootjdbc.minPoolSize= 1jdbc.maxPoolSize= 100jdbc.timeout=60000jdbc.initialSize=5removeAbandoned=trueremoveAbandonedTimeout=200connectionProperties=clientEncoding=UTF-8
log4j.properties是日志文件,这边不贴了,网上一大堆。
然后看spring-context.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" xmlns:p="http://www.springframework.org/schema/p" 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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> <!-- 加载配置属性文件 --> <context:property-placeholder ignore-unresolvable="true" location="classpath:/db.properties" /> <!-- 使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。 --> <!-- base-package 如果多个,用“,”分隔 --> <context:component-scan base-package="com.sm.web"/> <import resource="spring-mybatis.xml" /></beans>
加载了db.properties文件,然后 导入了 spring-mybatis.xml文件,可想而知,里面当然是配置数据源,sqlSessionFactory等信息了。一下是 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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- 配置数据库 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driverClass}" /> <property name="url" value="${jdbc.url}" /> <!-- 初始化大小连接 --> <property name="initialSize" value="${jdbc.initialSize}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.timeout}" /> <!-- 自动清除无用连接 --> <property name="removeAbandoned" value="${removeAbandoned}" /> <!-- 清除无用连接的等待时间 --> <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" /> <!-- 连接属性 --> <property name="connectionProperties" value="${connectionProperties}" /> </bean> <!-- mybatis文件配置,扫描所有mapper文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:SqlMapConfig.xml"/> <!-- configLocation为mybatis属性 mapperLocations为所有mapper--> <!-- spring与mybatis整合配置,扫描所有dao --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.sm.mapper" p:sqlSessionFactoryBeanName="sqlSessionFactory"/> <!-- 开启事务注解驱动 --> <tx:annotation-driven /> <!-- 事物管理器 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean></beans>
内容很简单,有注释,这里说下: p:configLocation=”classpath:SqlMapConfig.xml”,SqlMapConfig.xml文件时空的,本应该是mybatis配置数据源的资源文件,然后提供给sqlSessionFactory去引用,我嫌文件配置多,然后就把配置数据源挪到spring-mybatis.xml文件中,而引用的SqlMapConfig.xml则是一个空文件,可以删除。
下面还有spring-servlet.xml文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 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"> <context:component-scan base-package="com.sm.web" /> <!-- 配置Spring视图容器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="contentType" value="text/html;charset=UTF-8" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> </bean></beans>
用于显示前端页面的配置,注意:这里的mappingJacksonHttpMessageConverter必须要配置,否则在编写接口的时候会无法映射,@ResponseBody注解会无效,甚至会报错。
最后配置的web.xml也比较简单:
<?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_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>spring-mybatis</display-name> <welcome-file-list> <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file> </welcome-file-list> <!-- 激活Tomcat的defaultServlet来处理静态文件 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <!-- 配置日志文件 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:/log4j.properties</param-value> </context-param> <!--spring容器初始化--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring-context.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</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>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Spring MVC --> <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:/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>
加载spring容器文件spring-context.xml,还有前端视图容器文件spring-servlet.xml。完成这些,算是整合成功了,下面可以开始写service,controller。
目前在controller层随便写了几种接口调用方式的方法,下面都会贴源码:
service层接口:
package com.sm.web.service.userservice;import java.util.List;import org.springframework.stereotype.Service;import com.sm.entity.ShineUser;public interface UserService { /** * 获取所有的用户数据 * @return * @throws Exception */ List<ShineUser> getUsers() throws Exception; /** * 根据用户名称查询单个用户 */ ShineUser findUserById(ShineUser shineUser) throws Exception; /** * 模糊查询用户数据 */ List<ShineUser> findUsers(String param) throws Exception; /** * 根据用户id更新某个用户的信息 */ void updateUser(ShineUser shineUser) throws Exception; /** * 删除某条用户记录 */ void deleteUser(ShineUser shineUser) throws Exception; /** * 登录操作 */ ShineUser login(ShineUser shineUser) throws Exception;}
service实现类 UserServiceImpl:
package com.sm.web.service.userservice.impl;import java.util.ArrayList;import java.util.List;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.sm.entity.ShineUser;import com.sm.entity.ShineUserExample;import com.sm.mapper.ShineUserMapper;import com.sm.utils.ApiConfig;import com.sm.web.service.userservice.UserService;@Servicepublic class UserServiceImpl implements UserService { private Logger logger = Logger.getLogger(getClass()); @Autowired private ShineUserMapper shineUserMapper; /** * 获取用户数据 */ public List<ShineUser> getUsers() throws Exception { return shineUserMapper.selectByExample(null); } /** * 根据id查询单个用户 */ @Override public ShineUser findUserById(ShineUser shineUser) throws Exception { ShineUser user = new ShineUser(); if (shineUser != null) { user = shineUserMapper.selectByPrimaryKey(shineUser.getUser_id()); } else { logger.debug("用户信息为空!"); } return user; } /** * 根据用户id,更新用户信息 */ @Override public void updateUser(ShineUser shineUser) { if (shineUser != null) { shineUserMapper.updateByPrimaryKey(shineUser); } else { logger.debug("更新-->用户id为空!"); } } /** * 根据用户id,删除某条用户信息 */ @Override public void deleteUser(ShineUser shineUser) { if (shineUser != null) { shineUserMapper.deleteByPrimaryKey(shineUser.getUser_id()); } else { logger.debug("删除-->用户id为空!"); } } /** * 模糊查询 这边主要是用户名和邮箱的模糊搜索 * */ @Override public List<ShineUser> findUsers(String param) throws Exception { List<ShineUser> list = new ArrayList<>(); if (!param.isEmpty() && !param.equals("null")) { ShineUserExample shineUserExample = new ShineUserExample(); shineUserExample.or().andNicknameLike("%" + param + "%"); shineUserExample.or().andEmailLike("%" + param + "%"); list = shineUserMapper.selectByExample(shineUserExample); } else { logger.debug("模糊查询-->参数为空!"); } return list; } /** * 登录 */ @Override public ShineUser login(ShineUser shineUser) throws Exception { List<ShineUser> users = new ArrayList<>(); if (shineUser != null) { ShineUserExample shineUserExample = new ShineUserExample(); shineUserExample.or().andNicknameEqualTo(shineUser.getNickname()); users = shineUserMapper.selectByExample(shineUserExample); // 用户名是否存在 // if (users.size() == 0) { // throw new Exception(ApiConfig.loginMsg[0]); // } // // 密码错误 // if (!users.get(0).getPassword().equals(shineUser.getPassword())) // { // throw new Exception(ApiConfig.loginMsg[1]); // } } else { logger.debug("用户登录-->" + shineUser); } return users != null && users.size() > 0 ? users.get(0) : null; }}
然后再到controller层的UserController:
package com.sm.web.controller;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.sm.entity.ShineUser;import com.sm.utils.ApiConfig;import com.sm.web.service.userservice.UserService;@Controllerpublic class UserController { private Logger logger = Logger.getLogger(getClass()); @Autowired private UserService userService; /** * 获取用户数据 * * @throws Exception */ @RequestMapping(value = "/users", method = RequestMethod.GET) @ResponseBody public List<ShineUser> getUsers() { List<ShineUser> list = new ArrayList<>(); try { list = userService.getUsers(); } catch (Exception e) { logger.debug(e.getMessage()); } return list; } /** * 模糊查询 用户名或者邮箱 */ @RequestMapping(value = "/queryusers", method = RequestMethod.POST, consumes = "application/json") @ResponseBody public List<ShineUser> queryUserData(@RequestParam(value = "data") String param) { logger.debug("先打印下参数:" + param); List<ShineUser> list = new ArrayList<>(); try { list = userService.findUsers(param); } catch (Exception e) { logger.debug(e.getMessage()); } return list; } /** * Map方式 * * @param request * @param response * @return */ @RequestMapping(value = "/usersList", consumes = "application/json") @ResponseBody public Map queryMapUser(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> map = new HashMap<>(); try { String nickName = request.getParameter("data"); logger.debug("http-->" + nickName); if (!nickName.isEmpty() && !nickName.equals("null")) { map.put("list", userService.findUsers(nickName)); } } catch (Exception e) { logger.debug(e.getMessage()); } return map; } /** * 查询单个用户 */ @RequestMapping(value = "/queryUser", method = RequestMethod.POST, consumes = "application/json") @ResponseBody public ShineUser getUser(@RequestParam(value = "userid") String userId) { ShineUser user = new ShineUser(); user.setUser_id(Integer.parseInt(userId)); try { user = userService.findUserById(user); } catch (Exception e) { logger.debug(e.getMessage()); } return user; } /** * 使用body体方式的json请求 * * @param user * @return */ @RequestMapping(value = "/getuser", method = RequestMethod.POST) @ResponseBody public Map getUserToBody(@RequestBody ShineUser user) { Map<String, String> map = new HashMap<>(); ShineUser shineUser = new ShineUser(); shineUser.setNickname(user.getNickname()); shineUser.setPassword(user.getPassword()); try { shineUser = userService.login(shineUser); if (shineUser != null) { if (user.getNickname().equals(shineUser.getNickname()) && user.getPassword().equals(shineUser.getPassword())) { map.put(ApiConfig.config[0], ApiConfig.code[0]); map.put(ApiConfig.config[1], ApiConfig.msg[0]); map.put("username", shineUser.getNickname()); map.put("password", shineUser.getPassword()); } else if (!user.getNickname().equals(shineUser.getNickname())) { map.put(ApiConfig.config[0], ApiConfig.loginCode[0]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[0]); } else if (!user.getPassword().equals(shineUser.getPassword())) { map.put(ApiConfig.config[0], ApiConfig.loginCode[1]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[1]); } } else { map.put(ApiConfig.config[0], ApiConfig.loginCode[0]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[0]); } } catch (Exception e) { e.printStackTrace(); } return map; } /** * 用户登录 * * @param userName * @param password * @return */ @RequestMapping(value = "/userlogin", method = RequestMethod.POST, consumes = "application/json") @ResponseBody public Map userLogin(@RequestParam(value = "username", required = true) String userName, @RequestParam(value = "password", required = true) String password) { Map<String, String> map = new HashMap<>(); if (!userName.isEmpty() && !password.isEmpty()) { ShineUser shineUser = new ShineUser(); shineUser.setNickname(userName); shineUser.setPassword(password); try { shineUser = userService.login(shineUser); if (shineUser != null) { if (userName.equals(shineUser.getNickname()) && password.equals(shineUser.getPassword())) { map.put(ApiConfig.config[0], ApiConfig.code[0]); map.put(ApiConfig.config[1], ApiConfig.msg[0]); map.put("username", shineUser.getNickname()); map.put("password", shineUser.getPassword()); } else if (!userName.equals(shineUser.getNickname())) { map.put(ApiConfig.config[0], ApiConfig.loginCode[0]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[0]); } else if (!password.equals(shineUser.getPassword())) { map.put(ApiConfig.config[0], ApiConfig.loginCode[1]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[1]); } } else { map.put(ApiConfig.config[0], ApiConfig.loginCode[0]); map.put(ApiConfig.config[1], ApiConfig.loginMsg[0]); } } catch (Exception e) { e.printStackTrace(); } } return map; }}
到这里,哎呀,so easy。
最后谈谈我遇到的坑:
①.spring-servlet.xml中的 <context:component-scan base-package="com.sm.web" />
扫描包没写。
②.spring-servlet.xml中的mappingJacksonHttpMessageConverter 没有配置
③.spring-context.xml中的<context:component-scan base-package="com.sm.web"/>
没写,导致@Controller不生效。
④.spring-context.xml中的 sqlSessionFactory配置写错,原来是这样:<property name="sqlSessionFactoryBeanName" ref="sqlSessionFactory"/>
实际是这样:<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
,注意ref和value 的区别,后来写成:p:sqlSessionFactoryBeanName="sqlSessionFactory"
这种方式。
- Springmvc+Mybatis整合及api接口编写demo
- springMVC+mybatis+spring整合 demo
- springmvc + spring + mybatis 整合 demo
- springmvc+spring+mybatis整合demo(maven)
- Maven+SpringMVC+Mybatis整合入门Demo
- springMVC 与mybatis 整合 demo(maven 工程)
- springMVC 与mybatis 整合 demo(maven 工程)
- Intellij-IDEA-maven+springMVC+mybatis整合DEMO
- SpringMVC+Mybatis整合实例及功能分析
- Java开发环境之Spring+SpringMVC+Mybatis整合demo
- SSM(Spring+SpringMVC+Mybatis)框架整合Demo+详细讲解
- SpringMVC整合Mybatis+Maven+Bootstrap的简单Demo
- springmvc+mybatis整合springmvc
- SpringBoot + Mybatis 整合demo
- springMVC + Mybatis +Mysql demo
- springmvc+mybatis整合
- Spring-SpringMVC-Mybatis整合
- springmvc Mybatis 整合
- 浅谈区块链技术
- 257. Binary Tree Paths
- 传统加密技术——置换加密(Py2.7实现)
- tensorflow 模型的持久化
- 自己动手写一个简单的MVC框架(第二版)
- Springmvc+Mybatis整合及api接口编写demo
- 关于响应式布局
- new和数组
- vue之路——单页面管理系统
- mac查看sshkey
- Swift开发:修改app程序图标
- Android O 新特性
- swift (一)
- SQL的基本操作 以及 JDBC连接代码