-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Home
- 搭建SSM环境 1.1. 数据库
1.1.1. 使用navicat创建数据库连接
执行SQL脚本:
1.1.2. Tb_user
查看表结构:
表结构:
1.1. 创建工程
1.1.1. 新建工程
1.1.2. 填写项目的Maven坐标
Maven会自动从192.168.50.22的私服下载所需要的依赖。 1.2. 统一管理依赖的版本
需要将多个项目的依赖的版本号统一管理起来。
如何实现? --- 使用Maven的继承实现。 1.2.1. 导入itcast-parent
1.1. 完整pom
4.0.0
cn.itcast.parent
itcast-parent
0.0.1-SNAPSHOT
pom
<junit.version>4.10</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>
junit
junit
1.1.2. 出现小红叉
解决:
原因:
定义的java编译器插件的jdk版本和默认使用的jdk版本不一致,导致。 上面配置使用的jdk1.7,需要配置成本机安装的jdk版本,如我的本机安装使用的是1.8的,因此这个地方需要需改为1.8!
此处也会相应版本更改为1.8! 1.1. 子工程使用依赖
1.1.1. Parent中的依赖管理
1.1. 导入依赖
4.0.0
cn.itcast.parent itcast-parent 0.0.1-SNAPSHOTcn.itcast.manage itcast-usermanage 1.0.0-SNAPSHOT war
junit junit test org.springframework spring-webmvc org.springframework spring-jdbc org.springframework spring-aspects org.mybatis mybatis org.mybatis mybatis-spring com.github.pagehelper pagehelper com.github.jsqlparser jsqlparser com.github.abel533 mapper mysql mysql-connector-java org.slf4j slf4j-log4j12 com.fasterxml.jackson.core jackson-databind com.jolbox bonecp-spring jstl jstl javax.servlet servlet-api provided javax.servlet jsp-api provided joda-time joda-time org.apache.commons commons-lang3 org.apache.commons commons-io org.apache.tomcat.maven tomcat7-maven-plugin 80 / 上面配置的Tomcat插件的好处在于,不需要在本机安装tomcat,只需要下载相应的tomcat maven插件进行配置即可,这样会很方便。上面配置的80 意思就是 访问该应用的时候端口为80端口,而下面配置的/ 表示访问该应用的时候 / 即可! 在本机分访问地址即为 http://127.0.0.1:{port}/{path} 这里配置的插件为tomcat7 1.2. 运行tomcat插件运行出错:
问题:
解决: 需要将itcast-parent安装到本地仓库。
在本地的Maven的repository中就会在相应目录找到发布的maven项目
需要新建WEB-INF文件夹以及在其下创建web.xml(pom文件会提示web.xml缺失)
上图为项目配置结构图,spring文件夹存放spring相关配置文件,mabatis文件夹中存放mybatis配置,其中mappers文件存放mapper.xml 这里使用通用mapper,因此不需要mybatis操作数据库的配置文件,mybatis-config.xml文件用来配置分页助手插件以及通用mapper插件。
Web.xml
ContextLoaderListener 加载应用上下文(bean),负责驱动应用后端的中间层以及数据层组件 DispatcherServlet 也同样加载应用上下文(bean),不过其加载web应用组件,如控制器,试图解析器以及处理器映射。
itcast-usermanage contextConfigLocation classpath:spring/applicationContext*.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF8 encodingFilter / itcast-usermanage org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/itcast-usermanage-servlet.xml 1 itcast-usermanage /rest/ index.jsp Jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true jdbc.username=root jdbc.password=root log4j.properties
log4j.rootLogger=DEBUG,A1 log4j.logger.com.taotao = DEBUG log4j.logger.org.mybatis = DEBUG log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n Spring容器配置文件 applicationContext.xml
加载数据库连接配置文件时,这里使用的较为接近底层的方式进行配置(装逼)。 也可以使用下面这种简单的配置方式,效果一样! <context:property-placeholder location="classpath:persistence-mysql.properties" /> 这里定义数据源的时候使用了 bonecpDatasource 其性能比c3p0更为卓越!
<!-- 使用spring自带的占位符替换功能 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 允许JVM参数覆盖 -->
<!-- java -Djdbc.url=123 -jar xxx.jar -->
<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.itcast"/>
<!-- 定义数据源 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${jdbc.driverClassName}" />
<!-- 相应驱动的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="100" />
<!-- 每个分区最小的连接数 -->
<property name="minConnectionsPerPartition" value="5" />
</bean>
这里使用切面的原理进行定义切点以及通知,出发事务管理器。
<!-- 定义事务管理器 -->
<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.service.*.*(..)表明匹配cn.itcast.mybatis.service包下的所有类的所有方法 -->
<aop:pointcut id="myPointcut" expression="execution(* cn.itcast.manage.service.*.*(..))" />
<!--将定义好的事务处理策略应用到上述的切入点 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
</aop:config>
itcast-usermanage 名字和web.xml中配置的servletname保持一致!
mvc:annotation-driven/
<!-- 扫描Controller -->
<context:component-scan base-package="cn.itcast.usermanage.controller"/>
<!-- 视图解析器 -->
<!--
Example: prefix="/WEB-INF/views/", suffix=".jsp", viewname="test" -> "/WEB-INF/views/test.jsp"
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Mybatis的全局配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<!-- 配置mapper.xml文件 -->
<!-- <property name="mapperLocations" value="classpath:mybatis/mappers/*.xml"/> -->
<!-- 别名包 -->
<property name="typeAliasesPackage" value="cn.itcast.usermanage.pojo"/>
</bean>
<!-- mapper接口的扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itcast.usermanage.mapper"/>
</bean>
配置分页助手插件 以及 通用mapper (两个都是github上针对mybatis提供的方便插件)
根据配置文件及项目结构创建出的项目java目录
测试
创建PageController.java文件并进行配置 package cn.itcast.usermanage.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @RequestMapping("page") @Controller public class PageController {
@RequestMapping(value="{pageName}", method=RequestMethod.GET)
public String toPage(@PathVariable("pageName") String pageName){
return pageName;
}
} 创建相应页面:
那么访问路径综合tomcat插件以及web.xml中所做的限制: localhost:80/rest/page/users (80可省略),localhost or 127.0.0.1
测试成功后的结果页面:
问题
前几次进行启动应用以后报错,有报tomcat7插件问题的,那就通过cmd命令杀出点以 .lastUpdated结尾的文件,重新update。 还有报出 localhost 拒绝链接的问题,然后同时也报workbeach的问题,貌似是工作空间的问题,当时删除过workspace中的文件更加百度的查询,然后新建了一个ws,最后重新创建了项目以及发布,没有使用本地的Tomcat,而是使用的maven插件,最后success!
pojo User.java problem:这个地方注解使用 @Table ,使用@Entity的时候 进行name设置不起作用,而是去找的mybatis.user表。 对属性进行和表列进行匹配的时候,当使用驼峰法进行标准命名的时候,到数据库中会自动进行添加下划线。userName -> user_name package cn.itcast.usermanage.pojo; import java.util.Date; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; /**
- @author spring
*/ @Table(name = "tb_user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 用户名 private String userName; // 密码 private String password; // 姓名 private String name; // 年龄 private Integer age; // 性别 1:man 2:woman private Integer sex; // 出生日期 private Date birthday; // 出生日期 private Date created; // 更新日期 private Date updated; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return userName; } public void setUsername(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } @Override public String toString() { return "User [id=" + id + ", username=" + userName + ", password=" + password + ", name=" + name + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + ", created=" + created + ", updated=" + updated + "]"; } }
Mapper 这里使用通用Mapper,只可以对单表进行CURD,需要多表操作的时候仍然需要进行配置mapper.xml package cn.itcast.usermanage.mapper; import com.github.abel533.mapper.Mapper; import cn.itcast.usermanage.pojo.User; public interface UserMapper extends Mapper {
}
Service 这里为了快速,不再定义成接口,再实现了。 UserService.java @Resource private UserMapper userMapper; 这里直接对接口进行了注入,其实Spring是不能对接口进行注入的! 但是,我们在spring整合mybatis配置文件中配置了mapper接口的扫描器,能够使其mapper对象加载到内存中,供spring能够找到!
package cn.itcast.usermanage.service; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import cn.itcast.usermanage.bean.EasyUIResult; import cn.itcast.usermanage.mapper.UserMapper; import cn.itcast.usermanage.pojo.User; /** *
- Title: UserService Description:
- @author yacong_liu Email:[email protected]
- @date 2016年11月13日
/
@Service
public class UserService {
@Resource
private UserMapper userMapper;
/*
*
-
Title: queryUserList Description: 查询用户列表
-
@authod yacong_liu
-
@param page
-
@param rows */ public EasyUIResult queryUserList(Integer page, Integer rows) { // 设置分页参数 PageHelper.startPage(page, rows);
//查询数据 List users = this.userMapper.select(null);
//获取分页后信息 PageInfo pageInfo = new PageInfo(users); return new EasyUIResult(pageInfo.getTotal(), pageInfo.getList()); } } PageHelper.startPage 后面紧跟着Mapper查询才能够进行分页! 这里我们需要进行json格式的转换,因为easyui 前端页面需要json,这里转成什么格式的数据就是根据前段的需要了! 前段的 easyui 中进行分页json格式:
-
一个total 数据的总条数,一个 rows数组,因此可以看成是一个对象 -》EasyUIResult对象 创建一个bean EasyUIResult 进行json格式转换
List< > 如果这里使用 ,那么就不能够进行通用! List< > 如果这里使用 (or ,随便) ,那么class 就要变成EasyUIResult ,也不方便 索性,随便你放什么都行 -》 List<?>
Controller UserController.java @ResponseBody 进行对应的格式转换 package cn.itcast.usermanage.controller; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import static org.springframework.web.bind.annotation.RequestMethod.*; import cn.itcast.usermanage.bean.EasyUIResult; import cn.itcast.usermanage.service.UserService; @Controller @RequestMapping(value="user") public class UserController {
@Resource
private UserService userService;
@RequestMapping(value="list", method=GET)
@ResponseBody
public EasyUIResult queryUserList(@RequestParam("page") Integer page, @RequestParam("rows") Integer rows){
EasyUIResult userList = this.userService.queryUserList(page, rows);
return userList;
}
} users.jsp easyUI的datagrade <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<title>会员管理系统</title> <script type="text/javascript" src="/js/jquery-easyui-1.4/jquery.min.js"></script> <script type="text/javascript" src="/js/jquery-easyui-1.4/jquery.easyui.min.js"></script> <script type="text/javascript" src="/js/jquery-easyui-1.4/locale/easyui-lang-zh_CN.js"></script> <script type="text/javascript" src="/js/common.js"></script>ID | 用户名 | 姓名 | 年龄 | 性别 | 出生日期 | 创建日期 | 更新日期 |
---|