基于SpringMVC+Mybatis搭建简单的前后台交互系统
一、摘要
1、所需软件列表:
1) tomcat : apache-tomcat-7.0.54 服务端容器
2) Intellij: Intellij IDEA 2016.3.1 开发工具
3) Syslog: SQLyog Community 数据库工具
2. 步骤简述:
1) 新建一个 Java 项目, 依次选择Spring—>Spring MVC—>Finish;
2) web目录下新建前台页面相关目录(css/js/page等);
3) WEB-INF文件夹下新建如下两个文件夹:
lib: 用于存放项目相关jar包,项目如已导入maven可无视该步骤;
resources: 用于存放Spring,Mybatis等相关配置文件。
4)src目录下用于存放服务端相关代码
完成后的工程目录如下:
二、Spring配置:
1、需要导入的包如下:
2、 相关配置文件
1)web.xml配置(用于配置Spring 相关配置项:上下文、日志、字符集、监听器等)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 告知javaEE容器,哪些内容需要添加到上下文中去 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param> <!-- 加载LOG4J --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.xml</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- 动态设置项目的运行路径 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>mvc.root</param-value> </context-param> <!-- 配置静态资源 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> <!-- 配置springmvc的前端控制器 --> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 默认情况下:DispatcherServlet会寻找WEB-INF下,命名规范为[servlet-name]-servlet.xml文件。 如:在上例中,它就会找/WEB-INF/mvc-servlet.xml 如果需要修改,需要在web.xml中的<servlet>标记中增加 <init-param>。。。</init-param>:--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:mvc-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- spring框架提供的字符集过滤器 --> <!-- spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码问题 --> <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> <!-- 监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <welcome-file-list> <welcome-file>/page/index.html</welcome-file> </welcome-file-list> </web-app>
2)spring-servlet.xml配置(用于配置SpringMVC相关: 注解、视图解析器、自动扫描等)
<?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-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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <!-- 输出key时是否使用双引号 --> <value>QuoteFieldNames</value> <!-- 是否输出值为null的字段 --> <value>WriteMapNullValue</value> <!-- 数值字段如果为null,输出为0,而非null --> <value>WriteNullNumberAsZero</value> <!-- List字段如果为null,输出为[],而非null --> <value>WriteNullListAsEmpty</value> <!-- 字符类型字段如果为null,输出为"",而非null --> <value>WriteNullStringAsEmpty</value> <!-- Boolean字段如果为null,输出为false,而非null --> <value>WriteNullBooleanAsFalse</value> <!-- null String不输出 --> <value>WriteNullStringAsEmpty</value> <!-- Date的日期转换器 --> <value>WriteDateUseDateFormat</value> </list> </property> </bean> <!-- 启动注解,注册服务,如验证框架、全局类型转换器--> <mvc:annotation-driven> <mvc:message-converters> <ref bean="fastJsonHttpMessageConverter" /> </mvc:message-converters> </mvc:annotation-driven> <!-- 静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean, 是spring MVC为@Controllers分发请求所必须的。 并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持, 读写XML的支持(JAXB,读写JSON的支持(Jackson --> <mvc:default-servlet-handler/> <!-- 启动自动扫描 --> <context:component-scan base-package="com.test"> <!-- 制定扫包规则 ,只扫描使用@Controller注解的JAVA类 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 配置视图解析器 --> <!--prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀), 比如传进来的逻辑视图名为WEB-INF/page/hello,则该该jsp视图页面应该存放在“WEB-INF/page/hello.html”; --> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/page"></property> <property name="suffix" value=".html"></property> </bean> </beans>
3) datasource.properties(用于配置数据库文件)
jdbc.driver= com.mysql.jdbc.Driver jdbc.url= jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 jdbc.username= root jdbc.password= root
4) log4j.xml(用于配置记录日志文件)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "F:\SpringMybatis测试\SpringMVC_Mybatis\src\webapp\WEB-INF\conf\log4j.dtd"> <log4j:configuration xmlns:log4j=\'http://jakarta.apache.org/log4j/\' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jakarta.apache.org/log4j/ "> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n"/> </layout> </appender> <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${ssm.root}/ssm-debug.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="1000"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="DEBUG"/> <param name="LevelMax" value="DEBUG"/> </filter> </appender> <appender name="INFO" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${ssm.root}/ssm-info.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="1000"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="INFO"/> <param name="LevelMax" value="INFO"/> </filter> </appender> <appender name="WARN" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${ssm.root}/ssm-warn.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="1000"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="WARN"/> <param name="LevelMax" value="WARN"/> </filter> </appender> <appender name="ERROR" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${ssm.root}/ssm-error.log"/> <param name="Append" value="true"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="1000"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%c %d{yyyy-MM-dd HH:mm:ss} -- %p -- %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="ERROR"/> <param name="LevelMax" value="ERROR"/> </filter> </appender> <root> <priority value="INFO"/> <appender-ref ref="STDOUT"/> <appender-ref ref="DEBUG"/> <appender-ref ref="INFO"/> <appender-ref ref="WARN"/> <appender-ref ref="ERROR"/> </root> </log4j:configuration>
5) log4j,dtd(主要是对相应.xml进行约束验证用的)
<?xml version="1.0" encoding="UTF-8" ?> <!ELEMENT log4j:configuration (renderer*, throwableRenderer?, appender*,plugin*, (category|logger)*,root?, (categoryFactory|loggerFactory)?)> <!ATTLIST log4j:configuration xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/" threshold (all|trace|debug|info|warn|error|fatal|off|null) "null" debug (true|false|null) "null" reset (true|false) "false" > <!ELEMENT renderer EMPTY> <!ATTLIST renderer renderedClass CDATA #REQUIRED renderingClass CDATA #REQUIRED > <!ELEMENT throwableRenderer (param*)> <!ATTLIST throwableRenderer class CDATA #REQUIRED > <!ELEMENT appender (errorHandler?, param*, rollingPolicy?, triggeringPolicy?, connectionSource?, layout?, filter*, appender-ref*)> <!ATTLIST appender name CDATA #REQUIRED class CDATA #REQUIRED > <!ELEMENT layout (param*)> <!ATTLIST layout class CDATA #REQUIRED > <!ELEMENT filter (param*)> <!ATTLIST filter class CDATA #REQUIRED > <!ELEMENT errorHandler (param*, root-ref?, logger-ref*, appender-ref?)> <!ATTLIST errorHandler class CDATA #REQUIRED > <!ELEMENT root-ref EMPTY> <!ELEMENT logger-ref EMPTY> <!ATTLIST logger-ref ref CDATA #REQUIRED > <!ELEMENT param EMPTY> <!ATTLIST param name CDATA #REQUIRED value CDATA #REQUIRED > <!ELEMENT priority (param*)> <!ATTLIST priority class CDATA #IMPLIED value CDATA #REQUIRED > <!ELEMENT level (param*)> <!ATTLIST level class CDATA #IMPLIED value CDATA #REQUIRED > <!ELEMENT category (param*,(priority|level)?,appender-ref*)> <!ATTLIST category class CDATA #IMPLIED name CDATA #REQUIRED additivity (true|false) "true" > <!ELEMENT logger (param*,level?,appender-ref*)> <!ATTLIST logger class CDATA #IMPLIED name CDATA #REQUIRED additivity (true|false) "true" > <!ELEMENT categoryFactory (param*)> <!ATTLIST categoryFactory class CDATA #REQUIRED> <!ELEMENT loggerFactory (param*)> <!ATTLIST loggerFactory class CDATA #REQUIRED> <!ELEMENT appender-ref EMPTY> <!ATTLIST appender-ref ref CDATA #REQUIRED > <!-- plugins must have a name and class and can have optional parameters --> <!ELEMENT plugin (param*, connectionSource?)> <!ATTLIST plugin name CDATA #REQUIRED class CDATA #REQUIRED > <!ELEMENT connectionSource (dataSource?, param*)> <!ATTLIST connectionSource class CDATA #REQUIRED > <!ELEMENT dataSource (param*)> <!ATTLIST dataSource class CDATA #REQUIRED > <!ELEMENT triggeringPolicy ((param|filter)*)> <!ATTLIST triggeringPolicy name CDATA #IMPLIED class CDATA #REQUIRED > <!ELEMENT rollingPolicy (param*)> <!ATTLIST rollingPolicy name CDATA #IMPLIED class CDATA #REQUIRED > <!ELEMENT root (param*, (priority|level)?, appender-ref*)> <!ELEMENT log4j:eventSet (log4j:event*)> <!ATTLIST log4j:eventSet xmlns:log4j CDATA #FIXED "http://jakarta.apache.org/log4j/" version (1.1|1.2) "1.2" includesLocationInfo (true|false) "true" > <!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, log4j:locationInfo?, log4j:properties?) > <!ATTLIST log4j:event logger CDATA #REQUIRED level CDATA #REQUIRED thread CDATA #REQUIRED Date CDATA #REQUIRED time CDATA #IMPLIED > <!ELEMENT log4j:message (#PCDATA)> <!ELEMENT log4j:NDC (#PCDATA)> <!ELEMENT log4j:throwable (#PCDATA)> <!ELEMENT log4j:locationInfo EMPTY> <!ATTLIST log4j:locationInfo class CDATA #REQUIRED method CDATA #REQUIRED file CDATA #REQUIRED line CDATA #REQUIRED > <!ELEMENT log4j:properties (log4j:data*)> <!ELEMENT log4j:data EMPTY> <!ATTLIST log4j:data name CDATA #REQUIRED value CDATA #REQUIRED >
6)applicationContext.xml(Mybatis sqlSessionFactoryBuilder相关配置及Spring AOP等)
<?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: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.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 开启自动扫包 --> <context:component-scan base-package="com.test"> <!--制定扫包规则,不扫描@Controller注解的JAVA类,其他的还是要扫描 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 启动AOP支持 --> <aop:aspectj-autoproxy/> <!-- 引入外部数据源配置信息 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:datasource.properties</value> </property> </bean> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置Session工厂 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 加载mybatis.mapper.xml文件 --> <property name="mapperLocations" value="classpath*:UserMapper.xml"></property> <!-- 自动扫描需要定义类别名的包,将包内的JAVA类的类名作为类别名 --> <property name="typeAliasesPackage" value="com.test.pojo"></property> </bean> <!-- 自动扫描所的Mapper接口与文件 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test.dao"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 配置事务管理器 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 定义操作通知,指定事务管理器 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="insert*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" /> <tx:method name="load*" propagation="SUPPORTS" read-only="true"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="search*" propagation="SUPPORTS" read-only="true"/> <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <!-- 配置一个切入点 --> <aop:pointcut id="serviceMethods" expression="execution(* com.test.service.impl.*ServiceImpl.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /> </aop:config> </beans>
7) UserMapper.xml(Mybatis 配置文件,用于生成所需的SQL)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.dao.UserDAO"> <!-- 自定义返回结果集 --> <resultMap id="userMap" type="com.test.pojo.UserBean" > <id property="id" column="id" javaType="java.lang.Integer"></id> <result property="name" column="name" javaType="java.lang.String"></result> <result property="age" column="age" javaType="java.lang.Integer"></result> </resultMap> <!--查--> <select id="selectAllUser" resultMap="userMap"> select * from user </select> <!--#{}:占位符,可用于替换动态内容,防止SQL注入 %{}:拼接sql串,可用于替换静态内容,如表名,数据库连接方式等,不能防止sql注入--> <!--根据id查询单个用户--> <select id="selectSingleUser" parameterType="java.lang.Integer" resultMap="userMap"> select * from user <if test=" id != null"> where id=#{id,jdbcType=INTEGER} </if> </select> <select id="countUsers" resultType="int"> select count(*) from user where 1=1 </select> <!--choose, when, otherwise: 等价于swicth case条件执行查询语句 bind: 用于执行左右模糊匹配字段的查询--> <select id="selectOneUserInfo" resultMap="userMap"> select * from user <!--<choose>--> <!--<when test="id != null">--> <!--where id=#{id,jdbcType=INTEGER}--> <!--</when>--> <!--<when test="name != null">--> <!--where name like #{name}--> <!--</when>--> <!--<otherwise>--> <!--where 1=1--> <!--</otherwise>--> <!--</choose>--> <where> <if test="id != null"> id=#{id,jdbcType=INTEGER} </if> <if test="name != null"> <bind name="username" value="\'%\' + name + \'%\'" /> and name like #{username} </if> </where> </select> <!--增--> <!--如果数据库支持自动生成主键的字段,可以使用useGeneratedKys+keyProperty字段来制定主键--> <insert id="insertUser" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> insert into user (id, name, age) values <foreach collection="list" item="user" separator=","> (#{user.id},#{user.name},#{user.age}) </foreach> </insert> <!--改--> <update id="updateUserInfo"> update user <set> <if test="user.id != null">id=#{user.id},</if> <if test="user.name != null">name=#{user.name},</if> <if test="user.age != null">age=#{user.age}</if> </set> where id=#{id} </update> <!--删--> <delete id="deleteUser"> delete from user <trim prefix="WHERE" prefixOverrides="AND | OR"> <if test="id != null"> WHERE id = #{id,jdbcType=INTEGER} </if> <!--<if test="name != null and name.length()>0">--> <!--AND WHERE name = #{name}--> <!--</if>--> </trim> </delete> </mapper>
三、 服务端代码
服务端代码使用MVC模式,使得视图(界面显示)、模型(数据)及控制器(业务逻辑)三者分离的方式组织代码,将业务逻辑聚集到一个部件里,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
具体的编码实现如下:
1)User实体类:
package com.test.pojo; public class UserBean{ private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "UserBean{" + "id=" + id + ", name=\'" + name + \'\\'\' + ", age=" + age + \'}\'; } }
2) 控制器类:
package com.test.controller; import com.test.pojo.UserBean; import com.test.service.UserService; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.jws.WebMethod; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.Collections; import java.util.List; @RestController() public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/getUserInfo", method = RequestMethod.GET) public List getUserInfo() throws Exception { return userService.getAllUsers(); } @RequestMapping(value = "/getSingleUser", method = RequestMethod.GET) public UserBean getSingleUser(@Param("id") String id) throws Exception { //return userService.getSingleUsers(id); return userService.getUserInfo(id); } @RequestMapping(value = "/getOneUserInfo", method = RequestMethod.GET) public UserBean getSingleUser(@Param("id") String id, @Param("name") String name) throws Exception { return userService.getOneUserInfo(id, name); } @RequestMapping(value = "/getUserCount", method = RequestMethod.GET) public int getUserCountForAllUsers() throws Exception { return userService.getUsersCount(); } @RequestMapping(value = "updateUser") public void updateUserInfo(){ userService.updateUserInfo(); } @RequestMapping(value = "/addUsers", method = RequestMethod.GET) public void addUsers(List<UserBean> list) throws Exception { List<UserBean> users = new ArrayList<>(); UserBean user1 = new UserBean(); user1.setAge(28); user1.setId(12); user1.setName("Mr One"); UserBean user2 = new UserBean(); user2.setAge(31); user2.setId(11); user2.setName("Mr Two"); users.add(user1); users.add(user2); userService.addUsers(list); } @RequestMapping(value = "/deleteUser", method = RequestMethod.GET) public void deleteUser(@Param("id") String id, @Param("name")String name) throws Exception { userService.deleteUser(id, name); } }
3) 数据库操作类UserDAO:(定义为接口方式,serviceImpl用来实现具体的增删改查操作,可以使用Mybatis映射器方式直接拼写SQL(注释掉的@Select(“”)等), 也可以定义UserMapper.xml文件用来通过配置文件生成SQL)
package com.test.dao; import com.test.pojo.UserBean; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import java.util.List; public interface UserDAO { List<UserBean> selectAllUser() throws Exception; //@Select("select * from user where id=#{id}") ---映射器方式:入参需要改为String类型 UserBean selectSingleUser(@Param("id") Integer id); //@Select("select * from user where id=#{id} and name=#{name}") ---映射器方式:入参需要改为String类型 UserBean selectOneUserInfo(@Param("id") Integer id, @Param("name") String name); int countUsers(); void insertUser(@Param("list") List<UserBean> list); // @Delete("delete from user where id=#{id}") void deleteUser(@Param("id") Integer id, @Param("name") String name) throws Exception; void updateUserInfo(@Param("id")Integer id, @Param("user") UserBean user); @Select("select * from user where id=#{id}") UserBean getUserInfo(@Param("id") String id); }
4) UserService(数据库操作接口类)
package com.test.service; import com.test.pojo.UserBean; import java.util.List; public interface UserService { List<UserBean> getAllUsers() throws Exception; void addUsers(List<UserBean> list); void deleteUser(String id, String name) throws Exception; UserBean getSingleUsers(String id); int getUsersCount(); UserBean getOneUserInfo(String id, String name); void updateUserInfo(); UserBean getUserInfo(String id); }
5)UserServiceImpl(UserService的实现类)
package com.test.service.impl; import com.test.dao.UserDAO; import com.test.pojo.UserBean; import com.test.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("user") public class UserServiceImpl implements UserService { @Autowired(required = false) UserDAO userDAO; @Override public List<UserBean> getAllUsers() throws Exception { return userDAO.selectAllUser(); } @Override public UserBean getSingleUsers(String id) { return userDAO.selectSingleUser(Integer.parseInt(id)); } @Override public int getUsersCount() { return userDAO.countUsers(); } @Override public void addUsers(List<UserBean> list) { userDAO.insertUser(list); } @Override public void deleteUser(String id, String name) throws Exception { userDAO.deleteUser(Integer.parseInt(id), name); } @Override public UserBean getOneUserInfo(String id, String name) { if(id != null && !"".equals(id)){ if(name != null){ return userDAO.selectOneUserInfo(Integer.parseInt(id), name); }else{ return userDAO.selectOneUserInfo(Integer.parseInt(id), null); } }else { return userDAO.selectOneUserInfo(null, name); } } @Override public void updateUserInfo() { UserBean user = new UserBean(); user.setId(3); user.setAge(33); user.setName("haha"); userDAO.updateUserInfo(1, user); } @Override public UserBean getUserInfo(String id) { return userDAO.getUserInfo(id); } }
四、客户端文件:
本例只使用了静态页面作为初始化加载的界面展示,路径为:web/page/index.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>This is a test Page for Spring Test</h1> </body> </html>
本例中的返回信息使用了Alibaba的fastJson作为返回对象(未使用视图解析器),故界面ajax请求返回数据可根据返回值作为数据填充,具体的界面设计需要自由发挥。
五、 Tomcat配置:
两种方式查看:
1. 配置Tomcat文件:
1)将web文件夹放入 tomcat 解压包的 apache-tomcat-7.0.54\webapps\ 目录下;
2) 将编译后的jar包放入 WEB-INF 目录下的lib文件夹下
3)启动Tomcat
2. IntelliJ 集成了Tomcat 插件,可以直接启动,具体配置路径如下:
Run—>Edit Configurations—>”+”—>Tomcat Server—>Local 或者 Remote选项配置
(注意Deployment Tab页下要将对应的war包导入)
然后启动即可