新建项目后规划好各层的包。
搭建SSM框架所需包百度云链接: http://pan.baidu.com/s/1cvKjL0
调整spring与mybatis配置文件
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> configuration>
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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="root" /> bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:myBatis-config.xml" /> bean> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" propagation="SUPPORTS"/> tx:attributes> tx:advice> <aop:config> <aop:advisor advice-ref="advice" pointcut="execution(* cn.itcast.scm.dao.impl.*.*(..))"/> aop:config> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/> bean> <context:component-scan base-package="*"/> beans>
如没有建库表,先建库表,可参考如下sql:
drop database if exists mybatis; create database mybatis CHARACTER SET UTF8; use mybatis; create table dept( dept_id int primary key auto_increment, dept_name varchar(50), dept_address varchar(50) ); insert into dept(dept_name,dept_address) values('研发部一部','广州'); insert into dept(dept_name,dept_address) values('研发部二部','广州'); insert into dept(dept_name,dept_address) values('研发部三部','深圳'); select * from dept;
编写实体类
public class Dept implements Serializable { private Integer deptId; private String deptName; private String deptAddress; public Integer getDeptId() { return deptId; } public void setDeptId(Integer deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDeptAddress() { return deptAddress; } public void setDeptAddress(String deptAddress) { this.deptAddress = deptAddress; } @Override public String toString() { return "Dept [deptId=" + deptId + ", deptName=" + deptName + ", deptAddress=" + deptAddress + "]"; } }
sql映射文件,并将相关信息映射到mybatis-config.xml文件。
xml version="1.0" encoding="UTF-8" ?> DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.itcast.scm.entity.DeptMapper"> <resultMap type="Dept" id="deptResultMap"> <id property="deptId" column="dept_id" /> <result property="deptName" column="dept_name" /> <result property="deptAddress" column="dept_address" /> resultMap> <select id="selectDept" parameterType="Integer" resultMap="deptResultMap"> select * from dept where dept_id=#{deptID} select> <insert id="insertDept" parameterType="Dept"> insert into dept(dept_name,dept_address) values(#{deptName},#{deptAddress}); insert> mapper>
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> <typeAliases> <typeAlias type="cn.itcast.scm.entity.Dept" alias="Dept" /> typeAliases> <mappers> <mapper resource="cn/itcast/scm/entity/DeptMapper.xml" /> mappers> configuration>
DeptDaoImpl.java
@Repository("deptDao") public class DeptDaoImpl{ @Resource private SqlSessionTemplate sqlSessionTemplate; /** * 根据部门编号查询部门信息 * @param deptId 部门编号 * @return 部门信息 */ public Dept selectDept(Integer deptId){ Dept dept= sqlSessionTemplate.selectOne("cn.itcast.entity.DeptMapper.selectDept", deptId); return dept; } /** * 添加部门信息 * @param dept 部门信息 * @return 添加成功的记录数 */ public int insertDept(Dept dept){ System.out.println("------dao.dept:"+dept); return sqlSessionTemplate.insert("cn.itcast.entity.DeptMapper.insertDept", dept); } }
public class TestDeptDao { //@Resource //这里没法使用,后继版本有其它方式可以注入 static private DeptDaoImpl deptDao; @BeforeClass public static void setUpBeforeClass() throws Exception { ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml"); deptDao=(DeptDaoImpl) context.getBean("deptDao"); } @AfterClass public static void tearDownAfterClass() throws Exception { } @Test public void testSelectDept() { System.out.println(deptDao.selectDept(1)); } @Test public void testInsertDept() { Dept dept=new Dept(); //dept.setDeptId(117); dept.setDeptName("name117"); dept.setDeptAddress("address117"); System.out.println("受影响行数:"+deptDao.insertDept(dept)); } }
修改web.xml文件,加入springmvc相关信息,编写 控制器类及相关jsp 文件
spring-mvc.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd "> <mvc:annotation-driven>mvc:annotation-driven> <context:component-scan base-package="*"/> beans>
web.xml文件配置
xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>display-name> <welcome-file-list> <welcome-file>index.jspwelcome-file> welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> listener> <context-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:applicationContext.xmlparam-value> context-param> <servlet> <servlet-name>mvcservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:spring-mvc.xmlparam-value> init-param> <load-on-startup>1load-on-startup> servlet> <servlet-mapping> <servlet-name>mvcservlet-name> <url-pattern>*.actionurl-pattern> servlet-mapping> <filter> <filter-name>encodingFilterfilter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> <init-param> <param-name>encodingparam-name> <param-value>UTF-8param-value> init-param> filter> <filter-mapping> <filter-name>encodingFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping> web-app>
编写控制器类
@Controller @RequestMapping(value="/dept") public class DeptAction { @Resource private DeptDaoImpl deptDao; @RequestMapping(value="/insert") public String insert(Dept dept){ System.out.println("---action.dept:"+dept); deptDao.insertDept(dept); return "forward:/jsp/main.jsp"; } }
缩写跳转页面
/jsp/main.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> head> <body> this is main jsp body> html>
缩写测试页面
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <html> <head> head> <body> <form action="dept/insert.action" method="post"> 名称:<input type="text" name="deptName"><br> 地址:<input type="text" name="deptAddress"><br> <input type="submit" value="ok"> form> body> html>
中文乱码处理,在web.xml中配置拦截器(参考前面)
<filter> <filter-name>encodingFilterfilter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> <init-param> <param-name>encodingparam-name> <param-value>UTF-8param-value> init-param> filter> <filter-mapping> <filter-name>encodingFilterfilter-name> <url-pattern>/*url-pattern> filter-mapping>
1).添加业务层相关包、接口及实现
接口包:cn.itcast.service
实现类包:cn.itcast.service.impl
编写接口与实现类(实现类用@Service进行注解,dao接口结合下边的配置,通过@Autowired方式注入代理实例),略。
添加如下内容:
<aop:config> <aop:advisor advice-ref="advice" pointcut="execution(* cn.itcast.scm.service.impl.*.*(..))"/> aop:config> <context:component-scan base-package="cn.itcast"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> context:component-scan> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <property name="basePackage" value="cn.itcast.scm.dao"/> bean>
spring-mvc.xml
<context:component-scan base-package="cn.itcast"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> context:component-scan>
控制器类通过业务层接口调用业务层,业务层再通过dao接口(可删除dao实现类,及测试类)获取代理对象执行相关SQL,进行数据的操作
编号 |
工具 |
版本 |
说明 |
|
MyBatis |
3.2 |
实现持久化操作 |
|
Spring |
3.2 |
用于分层解藕 |
|
Junit |
4.0 |
单元测试 |
|
JQuery |
2.0 (支持IE 10 和以上的版本) |
实现ajax各种特效和插件 |
|
EasyUI |
1.3.5 |
基于jQuery的用户界面插件 |
|
SVN |
1.6 |
开发版本控制软件 |
|
sitemesh |
2.4.2 |
网页布局和修饰的框架 |
|
Ztree |
3.5.26 |
树状数据的web显示 |
操作系统 |
Windows 7 |
|
开发工具 |
myEclipse 10 |
|
数据库 |
mysql-5.5 |
|
Web容器 |
Tomcat 7 / Tomcat6 |
|
JDK |
JDK 1.6+ J2EE 6.0 + Tomcat 7.0 (开发环境与部署环境相同) JDK 1.5 + J2EE 5.0 + Tomcat 6.0 (开发环境与部署环境相同) |
1: CVS: 版本控制器鼻祖 2: SVN集中式版本控制器 3: git分布式版本控制器
2: svn安装工具
3: 创建仓库: svnadmin create "e:\testdir\student_svn"
3.1: 通过客户端选定要提交的文件夹import 信息提交到仓库(仓库URLsvn://localhost:3690)的时候会出现: "目标积极拒绝,无法连接" 说明服务是没有启动
3.2: 启动服务: svnserve -d -r e:\testdir\student_svn 上传项目的时候会提示: 认证失败,这是由于没有设置用户名与密码
3.3: 修改E:\testdir\student_svn\conf目录下的svnserve.conf及pwsswd文件,svnserve.conf文件中开启密码(去掉前面的注释包括空格): password-db = passwd,pwsswd文件添加用户名及密码格式:用户名=密码
3.4: 通过dos命令创建的服务,命令行窗口是不能够关闭的(关闭窗口,服务也关闭), -d 此参数是仅仅在Linux下面有效的
4: import: 第一次提交,对于同一个项目import只能使用一次,以后都是在原来版本下 commit
5: checkout: 从仓库中下载指定的版本,默认下载是最新版 (在下载的项目中有隐藏 "svn"文件夹)此文件夹中记录服务器相关信息
6: export: 从仓库中下载指定的版本,默认下载是最新版,但是下载完毕之后与SVN仓库没有任何联系,以后也不能进行版本的更新
7:update: 可以更新仓库中新版本,默认是最新版
8: revert: 可以指定某些文件还原到下载的初始版本
9:commit: 本地的工作副本提交到仓库中
10: 在myEclipse中配置svn插件 svn.link 文件中配置: path=soft\\svn,启动myelcipse即可使用SVN功能
插件安装与使用参考:
1)解压zip文件
2)把features,pougins文件夹copy到C:\Users\chufeng\MyEclipse\MyEclipse 10\soft\svn目录下(C:\Users\chufeng\MyEclipse\MyEclipse 10\为myeclipse安装目录, soft/svn可以自己创建)
3)进入C:\Users\chufeng\MyEclipse\MyEclipse 10\dropins目录,并新建svn.link文件,添加内容:path=soft\svn
4)启动myeclipse
5)选择myeclipse的“file"-->import-->svn-->从svn中检出-->检出时,需要填写URL地址,URL为:svn://IP地址[:端口号],使用默认的端口时可以不用写端口
修改applicationContext.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:myBatis-config.xml" /> <property name="mapperLocations" value="classpath:cn/itcast/scm/dao/*.xml"/> bean>
mybatis-config.xml添加支持基于包的别名扫描
<typeAliases> <package name="cn.itcast.scm.entity"/> typeAliases>
--安装插件:
1。解压mybatis_generator_1.3.1.zip文件
2。把features,pougins文件夹copy到C:\Users\chufeng\MyEclipse\MyEclipse 10\soft\mybatis目录下(C:\Users\chufeng\MyEclipse\MyEclipse 10\为myeclipse安装目录, soft\mybaits可以自己创建)
3。进入C:\Users\chufeng\MyEclipse\MyEclipse 10\dropins目录,并新建mybatis.link文件,添加内容:path=C:\\Users\\chufeng\\MyEclipse\\MyEclipse 10\\soft\\mybatis
4。启动myeclipse
--使用插件
5。项目中添加generatorConfig.xml文件,并修改相关内容。右建可以找到generator mybatis artifacts生成
mybatis逆向工程代码生成器(插件)百度云链接: http://pan.baidu.com/s/1hr6NefE
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> <classPathEntry location="E:\tools\lib\mysql_driver\mysql-connector-java-5.1.26-bin.jar"/> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> <property name="suppressDate" value="true" /> commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/scm?useUnicode=true&characterEncoding=UTF-8" userId="root" password="root"> jdbcConnection> <javaModelGenerator targetPackage="cn.itcast.scm.entity" targetProject="scm/src"> <property name="trimStrings" value="true" /> javaModelGenerator> <sqlMapGenerator targetPackage="cn.itcast.scm.dao" targetProject="scm/src" /> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.scm.dao" targetProject="scm/src" /> <table tableName="account" domainObjectName="Account" enableSelectByExample="true" enableDeleteByExample="true" enableCountByExample="true" enableUpdateByExample="true" enableInsert="true" /> <table tableName="supplier" domainObjectName="Supplier" enableSelectByExample="true" enableDeleteByExample="true" enableCountByExample="true" enableUpdateByExample="true" enableInsert="true" /> context> generatorConfiguration>
注意:
1.完成后记得把实体实现Serializable,重写一下toString()方法,方便以后使用。
2.当重新使用generatorConfig.xml生成代码时,会在已经存在的数据库后面继续追加代码而非覆盖导致出现大量的重复代码,一个聪明的办法是生成前先注释掉已经生成好的数据库。
jquery-easyui-1.3.5版本,解压后文件夹直接copy到项目webroot虚拟目录下,文件夹说明:
demo:可以查阅例子,在项目中可以删除
local:本地化资源,一般保留本地化文件
plugins:部署用,
src:源码,分析用,可以删除
thems:样式、图标等信息
导入easyUI相关的文件
编写测试页面easyUI.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <c:set var="proPath" value="${pageContext.request.contextPath}" /> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/icon.css"> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.min.js">script> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.easyui.min.js">script> <title>My JSP 'MyJsp.jsp' starting pagetitle> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript"> $(function(){alert("可以使用了!");}); script> head> <body> <div id="p" class="easyui-panel" style="width:500px;height:200px;padding:10px;" title="My Panel" iconCls="icon-save" collapsible="true"> test my panel div> body> html>
浏览器输入地址访问,并观察是否正常!
注意:
1.jquery.min.js 报错(有红点的问题):解决方式为选中 :项目文件夹 -> 鼠标右键 -> MyEclipse -> manage validation -> 左面点击 -> Excluded resources -> 找到jquery.min.js -> 打上钩 -> apply
2.浏览器:建议使用IE10或以上版本、火狐
<mvc:annotation-driven>mvc:annotation-driven>
@RequestMapping("/doAjax") @ResponseBody //如果返回json格式,需要这个注解,这里用来测试环境 public Object doAjax(Supplier supplier){ System.out.println("---doAjax.supplier:"+supplier); supplier.setSupName("supName1"); return supplier; }
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <c:set var="proPath" value="${pageContext.request.contextPath}" /> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="${proPath}/jquery-easyui-1.3.5/themes/icon.css"> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.min.js">script> <script type="text/javascript" src="${proPath}/jquery-easyui-1.3.5/jquery.easyui.min.js">script> <title>My JSP 'json.jsp' starting pagetitle> <script type="text/javascript"> $( function(){ $("#bt1").click( function(){ $.post( "supplier/doAjax.action", {supId:1001,supName:"name1001"}, function(json){alert(json.supId+"||"+json.supName);}, "json" ); } ); } ); script> head> <body> <button id="bt1" >testJsonbutton> body> html>
两个框架都是IoC容器+MVC框架+ORM框架。IoC的意思是控制反转,意思是把创建和查找依赖对象的控制权交给容器而不是自己实例化对象;MVC框架采用MVC分层,模型层处理数据逻辑,通常是模型对象在数据库存取数据,视图层处理数据显示,控制器层处理用户交互,通常从视图读取数据,控制用户输入,并向模型发送数据;ORM框架即对象-关系映射模型,在数据库表和持久化对象间进行映射,这样在操作数据库时只需要对对象操作。
在IoC容器方面,SSH和SSM都是使用Spring。Spring是轻量级的IoC和AOP容器。IoC容器是Spring的核心,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。管理对象动态向某个对象提供其他对象,通过依赖注入来实现,Spring有三种注入方式:接口注入、Set注入和构造注入。Spring AOP即面向切面编程,可以用在日志和事务管理等方面。
MVC整合框架两者分别使用的是Struts2和SpringMVC。两者的区别:1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,因此容易实现restful API;2.Struts2是多例的,每次请求都创建一个Action,类属性被方法共享,而SpringMVC是单例的,只有一个实例,方法之间变量不共享;3.Struts2的核心控制器是Filter,SpringMVC的核心控制器是Servlet;4.拦截器方面,Struts2有自己的interceptor机制,SpringMVC用的是独立的AOP方式;5.SpringMVC是Spring的一个模块,项目管理和安全性比Struts2好,配置文件少,并且集成了Ajax,处理ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,能自动将对象转换为JSON数据。
ORM框架分别用的是Hibernate和MyBaitis。MyBatis的sql语句是手动编写的,可以进行更为细致的SQL优化,可以减少查询字段,具有高度灵活,可优化,易维护的特点。但需要维护SQL和结果映射,工作量大。Hibernate面向对象查询,以对象化的思维操作数据库,hql与具体的数据库无关,移植性更好。Hibernate无需编写SQL,映射的规则也可以由IDE生成,提高了开发效率,还提供了缓存、日志、级联等强大功能。但是对于多表关联复杂SQL、数据系统权限限制、根据条件编写SQL、存储过程等十分不便,性能难以通过SQL优化。