SSM+Mysql+EasyUI增删改查案例
来源:互联网 发布:c 知乎 编辑:程序博客网 时间:2024/05/16 15:50
目录结构
表结构
CREATE TABLE `user` ( `id` int(10) NOT NULL auto_increment, `username` varchar(50) default NULL, `password` varchar(50) default NULL, `sex` varchar(10) default NULL, `age` int(10) default NULL, `birthday` varchar(50) default NULL, `city` int(10) default NULL, `salary` varchar(50) default NULL, `starttime` varchar(100) default NULL, `endtime` varchar(100) default NULL, `description` varchar(500) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=151 DEFAULT CHARSET=utf8;
1.导入相关依赖
父工程的pom文件,用来集中管理版本
<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>cn.zto.parent</groupId><artifactId>zto-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><!-- 集中定义依赖版本号 --><properties><junit.version>4.12</junit.version><spring.version>4.1.3.RELEASE</spring.version><mybatis.version>3.2.8</mybatis.version><mybatis.spring.version>1.2.2</mybatis.spring.version><mybatis.paginator.version>1.2.15</mybatis.paginator.version><mysql.version>5.1.32</mysql.version><slf4j.version>1.6.4</slf4j.version><jackson.version>2.4.2</jackson.version><druid.version>1.0.9</druid.version><httpclient.version>4.3.5</httpclient.version><jstl.version>1.2</jstl.version><servlet-api.version>2.5</servlet-api.version><jsp-api.version>2.0</jsp-api.version><joda-time.version>2.5</joda-time.version><commons-lang3.version>3.3.2</commons-lang3.version><commons-io.version>1.3.2</commons-io.version><quartz.version>2.2.1</quartz.version></properties><dependencyManagement><dependencies><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-beans</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-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.0.6.RELEASE</version> </dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- Jackson Json处理工具包 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!-- 连接池 --><dependency><groupId>com.jolbox</groupId><artifactId>bonecp-spring</artifactId><version>0.8.0.RELEASE</version></dependency><!-- httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version></dependency><!-- JSP相关 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>${servlet-api.version}</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>${jsp-api.version}</version><scope>provided</scope></dependency><!-- 时间操作组件 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>${joda-time.version}</version></dependency><!-- Apache工具组件 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency><!-- 阿里云开放搜索opensearch --><dependency> <groupId>com.aliyun.opensearch</groupId> <artifactId>aliyun-sdk-opensearch</artifactId> <version>2.1.3</version> </dependency><!-- 定时任务 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency></dependencies></dependencyManagement><!--设置deploy地址 依赖包发布到私服,将开发的包上传到宿主仓库--><distributionManagement> <!-- 上传到宿主仓库的releases --> <repository> <id>releases</id> <name>Internal Releases</name> <url>http://10.10.4.90:8081/nexus/content/repositories/releases/</url> </repository> <!-- 上传到宿主仓库的snapshots --><snapshotRepository> <id>snapshots</id> <name>Internal Snapshots</name> <url>http://10.10.4.90:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement><build><finalName>${project.artifactId}</finalName><plugins><!-- 资源文件拷贝插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><encoding>UTF-8</encoding></configuration></plugin><!-- java编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin></plugins><pluginManagement><plugins><!-- 配置Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins></pluginManagement></build></project>
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.xyc.ssm</groupId><artifactId>zto-ssm</artifactId><parent><groupId>cn.zto.parent</groupId><artifactId>zto-parent</artifactId><version>0.0.1-SNAPSHOT</version></parent><packaging>war</packaging><dependencies><!--如果用命令生成的话 这个依赖是不需要的--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.1.3.RELEASE</version></dependency><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId></dependency><!-- 分页助手 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>3.7.5</version></dependency><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>0.9.1</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency><!-- Jackson Json处理工具包 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- 连接池 --><dependency><groupId>com.jolbox</groupId><artifactId>bonecp-spring</artifactId></dependency><!-- JSP相关 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><scope>provided</scope></dependency><!-- Apache工具组件 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId></dependency></dependencies><build><plugins><!-- 配置Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><port>80</port><path>/</path></configuration></plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin></plugins></build></project>
2.搭建SSM环境
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"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="MyWebApp" version="2.5"><display-name>zto-ssm</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext*.xml</param-value></context-param><!--Spring的ApplicationContext 载入 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 编码过滤器,以UTF8编码,解决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>UTF8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>ssm</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 自定义SpringMVC配置文件路径 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/zto-ssm.xml</param-value></init-param><!-- 随容器自动启动完成初始化 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>ssm</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=truejdbc.username=rootjdbc.password=123456
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:p="http://www.springframework.org/schema/p"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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 使用spring自带的占位符替换功能 --><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><!-- 允许JVM参数覆盖 --><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /><!-- 忽略没有找到的资源文件 --><property name="ignoreResourceNotFound" value="true" /><!-- 配置资源文件 --><property name="locations"><list><value>classpath:jdbc.properties</value></list></property></bean><context:component-scan base-package="cn.xyc" /><bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"destroy-method="close"><!-- 数据库驱动 --><property name="driverClass" value="${jdbc.driver}" /><!-- 相应驱动的jdbcUrl --><property name="jdbcUrl" value="${jdbc.url}" /><!-- 数据库的用户名 --><property name="username" value="${jdbc.username}" /><!-- 数据库的密码 --><property name="password" value="${jdbc.password}" /><!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 --><property name="idleConnectionTestPeriod" value="60" /><!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 --><property name="idleMaxAge" value="30" /><!-- 每个分区最大的连接数 --><property name="maxConnectionsPerPartition" value="150" /><!-- 每个分区最小的连接数 --><property name="minConnectionsPerPartition" value="5" /></bean></beans>
applicationContext-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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 定义Mybatis的SqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 定义数据源 --><property name="dataSource" ref="dataSource" /><!-- 指定mybatis全局配置文件 --><property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/><!-- 扫描mappers目录以及子目录下的所有xml文件 --> <property name="mapperLocations" value="classpath:mybatis/mappers/**/*.xml" /> <!-- 别名扫描包 --> <property name="typeAliasesPackage" value="cn.xyc.ssm.pojo"/></bean><!-- 定义Mapper接口扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.xyc.ssm.mapper" /></bean></beans>applicationContext-transaction.xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 定义事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 定义事务策略 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--所有以query开头的方法都是只读的 --><tx:method name="query*" read-only="true" /><!--其他方法使用默认事务策略 --><tx:method name="*" /></tx:attributes></tx:advice><aop:config><!--pointcut元素定义一个切入点,execution中的第一个星号 用以匹配方法的返回类型,这里星号表明匹配所有返回类型。 com.abc.dao.*.*(..)表明匹配cn.xyc.ssm.service包下的所有类的所有 方法 --><aop:pointcut id="myPointcut" expression="execution(* cn.xyc.ssm.service.*.*(..))" /><!--将定义好的事务处理策略应用到上述的切入点 --><aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" /></aop:config></beans>
mybatis-config.xml
<?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><!-- 配置分页插件 --><plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> </plugin></plugins></configuration>
zto-ssm.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: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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 注解驱动 --><mvc:annotation-driven /><!-- 定义Controller的扫描包 --><context:component-scan base-package="cn.xyc.ssm.controller" /><!-- 定义视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean><!-- 处理静态资源被“/”所拦截的问题 --><mvc:default-servlet-handler /></beans>
ok,框架搭建完成,可以启动一下看看是否正常,当然配置文件中扫描的包必须创建好
因为上面配置了mapper扫描的xml,但是目前还没有xml,所有会报错。注释掉就不会报错了
2.mybatis逆向生成实体映射等.
init.properties
#Mybatis Generator configurationproject = E:/eclipse/workspace/zto-ssm/src/main/java#classPath=D:/maven/Reposeitory/com/oracle/ojdbc6/11.2.0.3.0/ojdbc6-11.2.0.3.0.jarclassPath = D:/repository/mysql/mysql-connector-java/5.1.32/mysql-connector-java-5.1.32.jarjdbc_driver = com.mysql.jdbc.Driverjdbc_url = jdbc:mysql://127.0.0.1:3306/mybatisjdbc_user = rootjdbc_password = 123456
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="init.properties"/><!-- 指定数据连接驱动jar地址 --><classPathEntry location="${classPath}" /><!-- 一个数据库一个context --><context id="infoGuardian"><!-- 注释 --><commentGenerator ><property name="suppressAllComments" value="true"/><!-- 是否取消注释 --></commentGenerator><!-- jdbc连接 --><jdbcConnection driverClass="${jdbc_driver}"connectionURL="${jdbc_url}" userId="${jdbc_user}"password="${jdbc_password}" /><!-- 类型转换 --><javaTypeResolver><!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 生成实体类地址 --><javaModelGenerator targetPackage="cn.xyc.ssm.pojo"targetProject="${project}" ><!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --><property name="enableSubPackages" value="false"/><!-- 是否针对string类型的字段在set的时候进行trim调用 --><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成mapxml文件 --><sqlMapGenerator targetPackage="cn.xyc.ssm.mapper"targetProject="${project}" ><!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- 生成mapxml对应client,也就是接口dao --><javaClientGenerator targetPackage="cn.xyc.ssm.mapper"targetProject="${project}" type="XMLMAPPER" ><!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --><property name="enableSubPackages" value="false" /></javaClientGenerator><!-- 配置表信息 --><table schema="" tableName="user"domainObjectName="User" enableCountByExample="true"enableDeleteByExample="true" enableSelectByExample="true"enableUpdateByExample="true" selectByExampleQueryId="true"><!-- schema即为数据库名 tableName为对应的数据库表 domainObjectName是要生成的实体类 enable*ByExample 是否生成 example类 --><!-- 忽略列,不生成bean 字段 <ignoreColumn column="CLASS" />--><!-- 指定列的java数据类型 <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />--></table></context></generatorConfiguration>
pom文件中必须加上相关插件,上面已经有了.
运行maven命令:mybatis-generator:generate 会生成相关文件,将映射文件移动到mybatis/mappers下面
3.Junit测试SSM框架
先添加日志
log4j.properties
log4j.rootLogger=DEBUG,A1log4j.logger.org.mybatis = DEBUGlog4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
TestSSM.java
package cn.xyc.ssm;import java.util.List;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import cn.xyc.ssm.mapper.UserMapper;import cn.xyc.ssm.pojo.User;/** * * @ClassName: TestMyBatis * @Description: 测试ssm框架 * @author: xyc * @date: 2017年2月13日 下午7:53:09 * */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:spring/*.xml" })public class TestSSM { @Autowired private UserMapper userMapper; /** * @throws Exception */ @Before public void setUp() throws Exception { // 初始化SPring容器 //ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml", // "applicationContext-mybatis.xml"); // 从容器中获取SqlSessionFactory // SqlSessionFactory sqlSessionFactory = // applicationContext.getBean(SqlSessionFactory.class); // SqlSession sqlSession = sqlSessionFactory.openSession(true); // this.userMapper = sqlSession.getMapper(UserMapper.class); //this.userMapper = applicationContext.getBean(UserMapper.class); } @Test public void test1() { List<User> queryAll = userMapper.queryAll(); for (User user : queryAll) { System.out.println(user); } }}
结果:
4.EasyUI
导入jquery-easyui-1.2.6类库就可以直接使用easyUI了
commons.js
// 自定义的校验器$.extend($.fn.validatebox.defaults.rules, {midLength : {validator : function(value, param) {return value.length >= param[0] && value.length <= param[1];},message : ''},equalLength : {validator : function(value, param) {return value.length == param[0];},message : '密码必须为4个字符!'}});$.extend($.fn.datagrid.defaults.editors, {datetimebox : {init : function(container, options) {var box = $('<input />').appendTo(container);box.datetimebox(options);return box;},getValue : function(target) {return $(target).datetimebox('getValue');},setValue : function(target, value) {$(target).datetimebox('setValue', value);},resize : function(target, width) {var box = $(target);box.datetimebox('resize', width);},destroy : function(target) {$(target).datetimebox('destroy');}}});
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><script type="text/javascript" src="/js/jquery-easyui-1.2.6/jquery-1.7.2.min.js"></script><link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.2.6/themes/default/easyui.css" /><link rel="stylesheet" type="text/css" href="/js/jquery-easyui-1.2.6/themes/icon.css" /><script type="text/javascript" src="/js/jquery-easyui-1.2.6/jquery.easyui.min.js"></script><script type="text/javascript" src="/js/jquery-easyui-1.2.6/locale/easyui-lang-zh_CN.js"></script><script type="text/javascript" src="/js/commons.js"></script><script type="text/javascript">$(function(){//-----------------------------对于form表单的验证 ---------------------------------------------------------------------------$('#username').numberbox({min:0 , //允许的最小值max:150 , //允许的最大值required:true , //必填字段 定义是否字段应被输入missingMessage:'用户名必填!' , //当文本框是空时出现的提示文字precision:0 //显示在小数点后面的最大精度});//数值验证组件 $('#age').numberbox({min:0 , //允许的最小值max:150 , //允许的最大值required:true , //必填字段 定义是否字段应被输入missingMessage:'年龄必填!' , //当文本框是空时出现的提示文字precision:0 //显示在小数点后面的最大精度});//日期组件$('#birthday').datebox({required:true , //必填字段 定义是否字段应被输入missingMessage:'生日必填!' , //当文本框是空时出现的提示文字editable:false //定义是否用户可以往文本域中直接输入文字});$('#salary').numberbox({min:1000 , max:20000 ,required:true , missingMessage:'薪水必填!' ,precision:2});//日期时间组件$('#startTime,#endTime').datetimebox({required:true , missingMessage:'时间必填!' ,editable:false //定义是否用户可以往文本域中直接输入文字});var flag ;//undefined 判断新增和修改方法 ///---------------------datagrid部分----------------------------------------------------------------------------------$('#tt').datagrid({idField: 'id', //只要创建数据表格 就必须要加 ifFieldurl: 'user/queryUserByPage',title: '用户信息',//width: '1000',height:450 ,fitColumns: true,//宽度自适应striped: true ,//隔行变色特性rownumbers:true,//显示行号//singleSelect:true ,//单选模式 loadMsg: '数据正在加载,请耐心的等待...' ,frozenColumns:[[//冻结列特性 ,不要与fitColumns 特性一起使用 {//如果需要多选,需要禁止单选模式 field:'ck' ,width:50 ,checkbox: true}]],columns:[[{field:'id',title:'编号',width:120},{field:'username',title:'用户名',width:120,align:'center' , //居中显示styler:function(value , record){if(value == 'admin'){//return 'background:blue;'; //如果用户名为admin,变蓝色}}},{field:'password',title:'密码',width:120,hidden: true //将密码隐藏},{field:'sex',title:'性别',width:120,formatter:function(value , record , index){if(value == 1){return '<span style=color:red; >男</span>' ;} else if( value == 2){return '<span style=color:green; >女</span>' ; }//console.info(value);//console.info(record);//console.info(index); }},{field:'age',title:'年龄',width:120},{field:'birthday',title:'生日',width:120},{field:'city',title:'城市',width:120,formatter:function(value , record , index){/*if(value==1){return '北京';} else if(value == 2){return '上海';} else if(value == 3){return '深圳';} else if(value == 4){return '长春';}*/var str = '';$.ajax({type:'post' , url : 'user/getCityName' ,/* url : 'user/getCityName2' , */cache:false ,async: false ,//同步请求data:{id:value},dataType:'json' ,success:function(result){ //str = result ; //dataType:'text' str = result.name ; //dataType:'json' }});return str ;}},{field:'salary',title:'薪资',width:120},{field:'starttime',title:'创建日期',width:120},{field:'endtime',title:'结束日期',width:120},{field:'description',title:'描述',width:120,formatter:function(value , record , index){return '<span title='+value+'>'+value+'</span>';}},]],pagination: true , //在底部显示分页栏pageSize: 10 , //每页显示多少个pageList:[5,10,15,20,50], //初始化页面尺寸的选择列表toolbar:[{ iconCls:"icon-add",//按钮上的图标 text:"添加用户", //按钮的文字 handler:function(){ flag = 'add'; //改变flag的值 //$('#myform').find('input[name!=sex]').val("");$('#myform').get(0).reset();//$('#myform').form('clear'); $("#mydialog").dialog("open"); }},{ iconCls:"icon-edit",//按钮上的图标 text:"编辑用户",//按钮的文字 handler:function(){ flag = 'edit'; //改变flag的值var arr =$('#tt').datagrid('getSelections'); //获取被选中的行,返回的是数组if(arr.length != 1){$.messager.show({title:'提示信息!',msg:'只能选择一行记录进行修改!'});} else {$('#mydialog').dialog({title:'修改用户'});$('#mydialog').dialog('open'); //打开窗口$('#myform').get(0).reset(); //清空表单数据 $('#myform').form('load',{ //调用load方法把所选中的数据load到表单中,非常方便id:arr[0].id ,username:arr[0].username ,password:arr[0].password ,sex:arr[0].sex ,age:arr[0].age ,birthday:arr[0].birthday ,city:arr[0].city ,salary:arr[0].salary ,starttime:arr[0].starttime,endtime:arr[0].endtime ,description:arr[0].description});} }},{ iconCls:"icon-remove",//按钮上的图标 text:"删除用户",//按钮的文字 handler:function(){ //console.log('删除'); //在浏览器控制台打印日志 var arr =$('#tt').datagrid('getSelections');if(arr.length <=0){$.messager.show({title:'提示信息!',msg:'至少选择一行记录进行删除!'});} else {$.messager.confirm('提示信息' , '确认删除?' , function(r){if(r){var ids = '';for(var i =0 ;i<arr.length;i++){ids += arr[i].id + ',' ;}ids = ids.substring(0 , ids.length-1);$.post('user/delete' , {ids:ids} , function(result){//1 刷新数据表格 $('#tt').datagrid('reload');//2 清空idField $('#tt').datagrid('clearSelections'); //unselectAll取消选中当前页所有的行。 clearSelections清除所有的选择。//3 给提示信息 $.messager.show({title:result.status , msg:result.message});});} else {return ;}});} }},{ iconCls:"icon-search",//按钮上的图标 text:"查询用户",//按钮的文字 handler:function(){ //console.log('查询'); //在浏览器控制台打印日志 $('#lay').layout('expand' , 'north'); }}]});//-----------提交表单方法-------------------------------------------------------------------------------------------------------------$('#btn1').click(function(){if($('#myform').form('validate')){$.ajax({type: 'post' ,url: flag=='add'?'user/save':'user/update' , //url:'user/save',cache:false ,data:$('#myform').serialize() ,dataType:'json' ,success:function(result){//1 关闭窗口$('#mydialog').dialog('close');//2刷新datagrid $('#tt').datagrid('reload');//3 提示信息$.messager.show({title:result.status , msg:result.message});} ,error:function(result){$.meesager.show({title:result.status , msg:result.message});}});} else {$.messager.show({title:'提示信息!' ,msg:'数据验证不通过,不能保存!'});}});/** * 关闭窗口方法 */$('#btn2').click(function(){$('#mydialog').dialog('close');});$('#searchbtn').click(function(){$('#tt').datagrid('load' ,serializeForm($('#mysearch')));});//查询时清空按钮$('#clearbtn').click(function(){$('#mysearch').form('clear');$('#tt').datagrid('load' ,{}); //清空数据});});//js方法:序列化表单 function serializeForm(form){var obj = {};$.each(form.serializeArray(),function(index){if(obj[this['name']]){obj[this['name']] = obj[this['name']] + ','+this['value'];} else {obj[this['name']] =this['value'];}});return obj;}</script></head><body><div id="lay" class="easyui-layout" fit=true style="width: 100%; height: 1000px"><!-- 用户搜索部分 --> <div region="north" title="用户查询" split="true" collapsed=true style="height: 100px;"> <div style="margin-left: 100px;margin-top: 20px;"> <form id="mysearch" method="post">用户名:<input name="username" class="easyui-validatebox" value="" /> 开始时间:<input name="starttime" class="easyui-datetimebox" editable="false" style="width:160px;" value="" />结束时间:<input name="endtime" class="easyui-datetimebox" editable="false" style="width:160px;" value="" /> <a id="searchbtn" class="easyui-linkbutton">查询</a> <a id="clearbtn" class="easyui-linkbutton">清空</a></form> </div> </div><!-- 用户列表部分 --> <div region="center" style="padding: 5px; background: #eee;"><table id="tt"></table> </div></div><!-- modal:模态窗口 draggable:窗口不可拖动 closed:默认关闭--><div id="mydialog" title="新增用户" modal=true draggable=false class="easyui-dialog" closed=true style="width:300px;"> <form id="myform" action="" method="post"> <input type="hidden" name="id" value="" /> <table> <tr> <td>用户名:</td> <td><input type="text" name="username" class="easyui-validatebox" required=true validType="midLength[2,5]" missingMessage="用户名必填!" invalidMessage="用户名必须在2到5个字符之间!" value="" /></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password" class="easyui-validatebox" required=true validType="equalLength[4]" missingMessage="密码必填!" value="" /></td> </tr> <tr> <td>性别:</td> <td> 男<input type="radio" checked="checked" name="sex" value="1" /> 女<input type="radio" name="sex" value="2" /> </td> </tr> <tr> <td>年龄:</td> <td><input id="age" type="text" name="age" value="" /></td> </tr> <tr> <td>出生日期:</td> <td><input id="birthday" style="width:160px;" type="text" name="birthday" value="" /></td> </tr> <tr> <td>所属城市:</td> <td> <input name="city" class="easyui-combobox" url="user/getCity" valueField="id" textField="name" value="" /> </td> </tr> <tr> <td>薪水:</td> <td><input id="salary" type="text" name="salary" value="" /></td> </tr> <tr> <td>开始时间:</td> <td><input id="startTime" style="width:160px;" type="text" name="starttime" value="" /></td> </tr> <tr> <td>结束时间:</td> <td><input id="endTime" style="width:160px;" type="text" name="endtime" value="" /></td> </tr> <tr> <td>个人描述:</td> <td><input type="text" name="description" class="easyui-validatebox" required=true validType="midLength[5,50]" missingMessage="个人描述必填!" invalidMessage="描述必须在5到50个字符之间!" value="" /></td> </tr> <tr align="center"> <td colspan="2"> <a id="btn1" class="easyui-linkbutton">确定</a> <a id="btn2" class="easyui-linkbutton">关闭</a> </td> </tr> </table> </form> </div></body></html>
5.业务逻辑层代码
IndexController.java
package cn.xyc.ssm.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class IndexController { /** * * @Title: toIndex * @Description: 通用页面跳转 * @param: @param index * @param: @return * @return: String * @throws */ @RequestMapping("/{index}") public String toIndex(@PathVariable("index")String index){ return index; }}
UserController.java
package cn.xyc.ssm.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;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 cn.xyc.ssm.common.EasyUIResult;import cn.xyc.ssm.common.ResponseEntity;import cn.xyc.ssm.pojo.City;import cn.xyc.ssm.pojo.User;import cn.xyc.ssm.service.UserService;@Controller@RequestMapping("user")public class UserController { @Autowired private UserService userService; @RequestMapping(value="queryUser",method=RequestMethod.POST) @ResponseBody public EasyUIResult queryUser(){ EasyUIResult result = this.userService.queryUser(); return result; } @RequestMapping(value="queryUserByPage",method=RequestMethod.POST) @ResponseBody public EasyUIResult queryUserByPage(@RequestParam(value="page",defaultValue="1")Integer page, @RequestParam(value="rows",defaultValue="5")Integer rows, @RequestParam(value="username",defaultValue="")String username, @RequestParam(value="starttime",defaultValue="")String starttime, @RequestParam(value="endtime",defaultValue="")String endtime){ EasyUIResult result = this.userService.queryUserByPage(page,rows,username,starttime,endtime); return result; } /** * * @Title: getCityName * @Description: 根据id名称获取城市名称 * @param: @param id * @param: @return * @return: City * @throws */ @RequestMapping(value="getCityName",method=RequestMethod.POST) @ResponseBody public City getCityName(@RequestParam(value="id")Integer id){ City city = this.userService.getCityName(id); return city; } //produces={"text/html;charset=UTF-8;","application/json;" 可以返回json或text,如果返回text不设置会出现乱码,如果返回json可以不设置.如上方法 @RequestMapping(value="getCityName2",method=RequestMethod.POST,produces={"text/html;charset=UTF-8;","application/text;"}) @ResponseBody public String getCityName2(@RequestParam(value="id")Integer id){ /*City city = this.userService.getCityName(id);*/ String cityName2 = this.userService.getCityName2(id); return cityName2; } /** * * @Title: getCity * @Description: 获取所有城市 * @param: @return * @return: List<City> * @throws */ @RequestMapping(value="getCity",method=RequestMethod.POST) @ResponseBody public List<City> getCity(){ List<City> clist = this.userService.getCity(); return clist; } /** * * @Title: save * @Description: 新增用户信息 * @param: @param user * @param: @return * @return: ResponseEntity * @throws */ @RequestMapping(value="save",method=RequestMethod.POST) @ResponseBody public ResponseEntity save(User user){ Integer count = this.userService.saveUser(user); if(count == 1){ return new ResponseEntity("ok", "新增用户成功!"); } return new ResponseEntity("ok", "新增用户失败!"); } /** * * @Title: save * @Description: 修改用户信息 * @param: @param user * @param: @return * @return: ResponseEntity * @throws */ @RequestMapping(value="update",method=RequestMethod.POST) @ResponseBody public ResponseEntity update(User user){ Integer count = this.userService.updateUser(user); if(count == 1){ return new ResponseEntity("ok", "修改用户成功!"); } return new ResponseEntity("ok", "修改用户失败!"); } /** * * @Title: save * @Description: 修改用户信息 * @param: @param user * @param: @return * @return: ResponseEntity * @throws */ @RequestMapping(value="delete",method=RequestMethod.POST) @ResponseBody public ResponseEntity delete(@RequestParam("ids")List<Integer> ids){ Integer count = this.userService.delete(ids); if(count > 0){ return new ResponseEntity("ok", "删除用户成功!"); } return new ResponseEntity("ok", "删除用户失败!"); }}
EasyUIResult.java
package cn.xyc.ssm.common;import java.util.List;/** * * @ClassName: EasyUIResult * @Description: 数据表格返回格式 * @author: xyc * @date: 2017年2月15日 下午2:06:30 * */public class EasyUIResult { private Long total; private List<?> rows; public EasyUIResult() {} public EasyUIResult(Long total, List<?> rows) { this.total = total; this.rows = rows; } public Long getTotal() { return total; } public void setTotal(Long total) { this.total = total; } public List<?> getRows() { return rows; } public void setRows(List<?> rows) { this.rows = rows; } }
ResponseEntity.java
package cn.xyc.ssm.common;public class ResponseEntity { private String status ; private String message; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public ResponseEntity(String status, String message) { this.status = status; this.message = message; } }City.java
package cn.xyc.ssm.pojo;public class City { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public City(Integer id, String name) { super(); this.id = id; this.name = name; } }
UserService.java
package cn.xyc.ssm.service;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import cn.xyc.ssm.common.EasyUIResult;import cn.xyc.ssm.mapper.UserMapper;import cn.xyc.ssm.pojo.City;import cn.xyc.ssm.pojo.User;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;@Servicepublic class UserService { @Autowired private UserMapper userMapper; /** * * @Title: queryUser * @Description: 查询所有用户 * @param: @return * @return: List<User> * @throws */ public EasyUIResult queryUser() { // TODO Auto-generated method stub //PageHelper.startPage(1, 5); List<User> ulist = this.userMapper.queryAll(); PageInfo<User> pageInfo = new PageInfo<User>(ulist); return new EasyUIResult(pageInfo.getTotal(), ulist); } /** * @param endtime * @param starttime * @param username * @param rows * @param page * * @Title: queryUser * @Description: 查询所有用户带分页 * @param: @return * @return: EasyUIResult * @throws */ public EasyUIResult queryUserByPage(Integer page, Integer rows, String username, String starttime, String endtime) { // TODO Auto-generated method stub PageHelper.startPage(page, rows); List<User> ulist = this.userMapper.queryUserByPage(username,starttime,endtime); PageInfo<User> pageInfo = new PageInfo<User>(ulist); return new EasyUIResult(pageInfo.getTotal(), ulist); } public City getCityName(Integer id){ Map<Integer,City> map = new HashMap<Integer, City>(); map.put(1, new City(1,"北京")); map.put(2, new City(2,"上海")); map.put(3, new City(3,"天津")); map.put(4, new City(4,"重庆")); return map.get(id); } public String getCityName2(Integer id){ Map<Integer,String> map = new HashMap<Integer, String>(); map.put(1, "北京"); map.put(2, "上海"); map.put(3, "天津"); map.put(4, "重庆"); return map.get(id); } public List<City> getCity() { List<City> clist = new ArrayList<City>(); clist.add(new City(1,"北京")); clist.add(new City(2,"上海")); clist.add(new City(3,"天津")); clist.add(new City(4,"重庆")); return clist; } /** * * @Title: saveUser * @Description: 新增用户 * @param: @param user * @param: @return * @return: Integer * @throws */ public Integer saveUser(User user) { return this.userMapper.insert(user); } /** * * @Title: updateUser * @Description: 修改用户信息 * @param: @param user * @param: @return * @return: Integer * @throws */ public Integer updateUser(User user) { // TODO Auto-generated method stub return this.userMapper.updateByPrimaryKey(user); } /** * * @Title: delete * @Description: 删除用户 * @param: @param ids * @return: void * @throws */ public Integer delete(List<Integer> ids) { int count = 0; for (Integer id : ids) { count = this.userMapper.deleteByPrimaryKey(id); count += count; } return count; }}UserMapper.java接口中添加方法
public List<User> queryAll() ; List<User> queryUserByPage(@Param("username")String username,@Param("starttime") String starttime, @Param("endtime")String endtime) ;
UserMapper.xml映射中添加
<select id="queryAll" resultType="User"> select * from user </select> <select id="queryUserByPage" resultType="User"> select * from user <where> <if test="username !=null and username != ''"> AND username LIKE '%${username}%' </if> <if test="starttime !=null and starttime != ''"> AND starttime > #{starttime} </if> <if test="endtime !=null and endtime != ''"> AND endtime < #{endtime} </if> </where> </select>
其它的不变
ok搭建完成。
0 0
- SSM+Mysql+EasyUI增删改查案例
- SSM框架搭建+easyui增删改查
- ssm+easyui+sqlserver2008(增删改查实现)
- easyUi的简单增删改查案例
- SSM 增删改查
- SSM框架搭建+easyui增删改查实现
- ssm框架搭建+easyui增删改查实现
- ssm框架搭建+easyui增删改查实现
- ssm框架搭建+easyui增删改查实现
- ssm框架搭建+easyui增删改查实现
- SSM+EasyUI整合,简单实现后台增删改查操作
- easyui增删改查
- easyui增删改查
- mysql 增删查改与案例
- SSM整合--增删改查
- SSM框架---增删查改
- SSM整合(增删改查)
- SSM整合--增删改查
- MyBatis和Spring相结合-环境搭建
- SpringMVC详细示例实战教程
- CSS学习笔记8:实操——运用浮动简单布局网页
- C++函数新亮点
- Nginx配置静态文件服务
- SSM+Mysql+EasyUI增删改查案例
- Android通过AIDL远程调用service
- HEXO+Github,搭建属于自己的博客
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)
- UVA 156 Ananagrams(stl,map,set)
- 字幕文件批量重命名脚本(二) —— Linux
- 项目及人员管理系统
- What is purpose of @ConditionalOnProperty annotation?
- 解决viewpager自动轮播速度变快的问题