maven+srping+springmvc+mybatis的环境搭建的每一步和代码
2016-04-10 15:56
701 查看
SSM框架搭建
一、 引入需要的jar包(maven形式)由于需要oracle官方授权,所以maven上无法下载ojdbc,需要自己下载,然后通过命令加载到本地maven库中。
我这里就不用maven下载了,直接下载了一个ojdbc6.jar在lib文件夹里面引入
pom.xml
<projectxmlns="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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>myspace</groupId> <artifactId>myspace</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>myspace Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- spring mvc的包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>4.0.3.RELEASE</version> </dependency> <!-- aop事务 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.5.RELEASE</version> </dependency> <!-- mybatis的java --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.0</version> </dependency> <!-- 连接池 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> <build> <finalName>myspace</finalName> </build> </project> |
1.springmvc的servlet过滤器
2.spring的监听
3.log4j的监听
web.xml
<!DOCTYPEweb-appPUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Archetype Created Web Application</display-name> <!-- 配置log4j配置文件路径 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <!-- 60s 检测日志配置文件变化 --> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- 配置Log4j监听器 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- Spring MVC配置 --> <!-- ====================================== --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- Spring配置 --> <!-- ====================================== --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> </context-param> </web-app> |
log4j的配置文件
#定义LOG输出级别 log4j.rootLogger=INFO,Console,File #定义日志输出目的地为控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out #可以灵活地指定日志输出格式,下面一行是指定具体的格式 log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c]-%m%n #文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File = logs/ssm.log #定义文件最大大小 log4j.appender.File.MaxFileSize = 10MB # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p][%d{yyyy-MM-ddHH\:mm\:ss}][%c]%m%n |
1.配置要扫描的包(不要扫描service层,否则spring的aop不能实现)
2.配置视图解析器
3.开启注解
spring-servlet.xml
<?xmlversion="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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util "> <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能需要更改 --> <context:component-scanbase-package="com.sunkang.space.*"> <context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/> <context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Service"/> </context:component-scan> <!-- 开启注解 --> <beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> <!-- 视图解析 --> <beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <propertyname="prefix"> <value>/WEB-INF/jsp/</value> </property> <propertyname="suffix"> <value>.jsp</value> </property> </bean> </beans> |
1. 配置要扫描的包
2. 开启注解
3. 配置连接池(连接池需要jdbc.properties文件)
4. 配置spring与mybits的整合
5. 配置aop事务
applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 自动扫描web包 ,将带有注解的类纳入spring容器管理 --> <context:component-scanbase-package="com.sunkang.space.*"> <context:exclude-filtertype="annotation"expression="org.springframework.stereotype.Controller"/> </context:component-scan> <context:property-placeholderlocation="classpath:jdbc.properties"/> <!-- 使用apache的DBCP连接池 --> <beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver"/> <propertyname="url"value="${jdbc.url}"/> <propertyname="username"value="${jdbc.username}"/> <propertyname="password"value="${jdbc.password}"/> <!-- Connection Pooling DBCP --> <propertyname="initialSize"value="5"/> <propertyname="maxActive"value="100"/> <propertyname="maxIdle"value="30"/> <propertyname="maxWait"value="1000"/> <propertyname="poolPreparedStatements"value="true"/> <propertyname="defaultAutoCommit"value="false"/> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <beanid="SqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"> <propertyname="dataSource"ref="dataSource"/> <!-- 自动扫描mapping.xml文件 --> <propertyname="mapperLocations"value="classpath:com/sunkang/space/mapper/*.xml"></property> <propertyname="configLocation"value="classpath:mybatis-configuration.xml"></property> </bean> <!-- DAO(mapper)接口所在包名,Spring会自动查找其下的类 --> <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propertyname="basePackage"value="com.sunkang.*"/> <propertyname="sqlSessionFactoryBeanName"value="SqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for globaltx --> <beanid="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"/> </bean> <!-- 配置事务特性 --> <tx:adviceid="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:methodname="find*" propagation="NOT_SUPPORTED" isolation="READ_COMMITTED" read-only="true" /> <tx:methodname="*" propagation="REQUIRED" isolation="READ_COMMITTED" /> </tx:attributes> </tx:advice> <aop:config> <!--把事务控制在Service层--> <aop:pointcutid="pc"expression="execution(* com.sunkang.space.service..*.*(..))"/> <aop:advisoradvice-ref="txAdvice"pointcut-ref="pc"/> </aop:config> <!-- mapper bean --> <!-- <bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean"> <property name="mapperInterface" value="com.sunkang.space.mapper.UserMapper" /> <property name="sqlSessionFactory"ref="sqlSessionFactory" /> </bean> --> <!-- 这里的dataSource要与sqlSessionFactory的dataSource一致,否则事务无效 --> <!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-configuration.xml"></property> </bean> --> <!-- 注意!这里不要偷懒!。要把userMapper赋给别的.class文件里的一个属性后再使用,否则事务无效。 也就是说当直接创建userMapper的一个class,然后使用IUserDao.insertUser方法的话也可以实现,但是事务将无效。 --> <!-- 这里的mapperInterface需要接口类型 --> <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="userMapper" value="com.sunkang.space.mapper.UserMapper" /> </bean> --> </beans> |
数据库连接的属性
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl jdbc.username=system jdbc.password=kang |
Myatis的缓存延迟加载等配置,可以不配置,如果不配置的话,spring的配置文件里面就不要引入
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置mybatis的缓存,延迟加载等等一系列属性 --> <settings> <!-- 全局映射器启用缓存 --> <settingname="cacheEnabled"value="true"/> <!-- 查询时,关闭关联对象即时加载以提高性能 --> <settingname="lazyLoadingEnabled"value="true"/> <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 --> <settingname="aggressiveLazyLoading"value="false"/> <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> <settingname="multipleResultSetsEnabled"value="true"/> <!-- 允许使用列标签代替列名 --> <settingname="useColumnLabel"value="true"/> <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 --> <settingname="useGeneratedKeys"value="true"/> <!-- 给予被嵌套的resultMap以字段-属性的映射支持 --> <settingname="autoMappingBehavior"value="FULL"/> <!-- 对于批量更新操作缓存SQL以提高性能 --> <settingname="defaultExecutorType"value="BATCH"/> <!-- 数据库超过25000秒仍未响应则超时 --> <settingname="defaultStatementTimeout"value="25000"/> </settings> <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 --> <!-- <typeAliases> <typeAlias alias="TestBean" type="com.wotao.taotao.persist.test.dataobject.TestBean" /> </typeAliases> --> <!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 --> <!-- <mappers> <mapper resource="com/sunkang/space/mapper/UserMapper.xml" /> </mappers> --> </configuration> |
TestController
package com.sunkang.space.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.sunkang.space.service.TestService; @Controller public class TestController { @Autowired public TestServicetestService; @RequestMapping(value="/test.do") public ModelAndView test(){ testService.test(); return new ModelAndView("test"); } } |
TestService
package com.sunkang.space.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.sunkang.space.daoImpl.TestDaoImpl; import com.sunkang.space.entity.User; @Service public class TestService{ @Autowired public TestDaoImpltestDao; public void test(){ //测试service事务 testDao.addUser(); User user=new User(); user.setId("2E3A11FD4162458BBBCD59F4543DFB27"); user.setName("sunkksnksnfks"); user.setIsDelete(4); testDao.updateUser(user); } } |
TestDaoImpl
package com.sunkang.space.daoImpl; import java.util.List; import java.util.Map; package com.sunkang.space.daoImpl; import java.util.List; import java.util.Map; import javax.management.RuntimeErrorException; import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.sunkang.space.entity.User; import com.sunkang.space.mapper.UserMapper; import com.sunkang.space.util.MyBatisUtil; @Repository public class TestDaoImpl { @Autowired public UserMapper userMapper; public void addUser(){ // SqlSession session=MyBatisUtil.getSqlSession(); // Map<String,Object> map=session.selectOne("com.sunkang.space.mapper.UserMapper.findNameById", "1"); List<User> users=userMapper.findUserAll(); for(User user:users){ System.out.println(user.getId()+","+user.getImage()+","+user.getUpdateDate()+","+user.getAge()+","+user.getIsDelete()); } User user=new User(); user.setName("康康"); user.setIsDelete(1); userMapper.addUser(user); } public void updateUser(User user){ userMapper.updateUser(user); //测试aop事务 //String str=null; // str.toString(); } } |
UserMapper
package com.sunkang.space.mapper; import java.util.List; import com.sunkang.space.entity.User; public interface UserMapper { /** * 查找所有用户 * @return */ public List<User> findUserAll(); /** * 增加用户 * @param user * @return */ public void addUser(User user); /** * 更新用户 * @param user */ public void updateUser(User user); } |
UserMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEmapperPUBLIC"-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mappernamespace="com.sunkang.space.mapper.UserMapper"> <resultMapid="user-my-result"type="com.sunkang.space.entity.User"> <idcolumn="id"property="id"jdbcType="VARCHAR"/> <resultcolumn="name"property="name"jdbcType="VARCHAR"/> <resultcolumn="age"property="age"jdbcType="INTEGER"/> <resultcolumn="sex"property="sex"jdbcType="INTEGER"/> <resultcolumn="iphone"property="iphone"jdbcType="VARCHAR"/> <resultcolumn="image"property="image"javaType="[B"jdbcType="BLOB"/> <resultcolumn="route"property="route"jdbcType="INTEGER"/> <resultcolumn="is_delete"property="isDelete"jdbcType="INTEGER"/> <resultcolumn="create_date"property="createDate" jdbcType="TIMESTAMP"/> <resultcolumn="update_date"property="updateDate"jdbcType="TIMESTAMP"/> </resultMap> <!-- <parameterMap id="user-my-pareame" type="com.sunkang.space.entity.User"> <id resultMap="id" property="id" jdbcType="VARCHAR" /> <parameter resultMap="name" property="name" jdbcType="VARCHAR" /> <parameter resultMap="age" property="age" jdbcType="INTEGER" /> <parameter resultMap="sex" property="sex" jdbcType="INTEGER" /> <parameter resultMap="iphone" property="iphone" jdbcType="VARCHAR" /> <parameter resultMap="image" property="image" javaType="[B" jdbcType="BLOB" /> <parameter resultMap="route" property="route" jdbcType="INTEGER" /> <parameter resultMap="is_delete" property="isDelete" jdbcType="INTEGER" /> <parameter resultMap="create_date" property="createDate" jdbcType="TIMESTAMP" /> <parameter resultMap="update_date" property="updateDate" jdbcType="TIMESTAMP" /> </parameterMap> --> <!-- 根据id查找用户 --> <selectid="findNameById"parameterType="String"resultType="map"> select id,name from user_my where id=#{id} </select> <!-- 查所有用户 --> <selectid="findUserAll"resultMap="user-my-result"> select * from user_my </select> <!-- 新增用户--> <insertid="addUser"parameterType="com.sunkang.space.entity.User"> <!-- uuid 主键策略 --> <selectKeykeyProperty="id"resultType="String"order="BEFORE"> select sys_guid() from dual </selectKey> insert into user_my (id,name,is_delete) values(#{id},#{name},#{isDelete}) </insert> <!-- 删除用户 --> <deleteid="deleteById"parameterType="int"> delete from user_my where id=#{id} </delete> <!-- 根据id修改用户 --> <updateid="updateUser"parameterType="com.sunkang.space.entity.User"> update user_my <set> <iftest="isDelete!=null and isDelete!='' "> is_delete=3, </if> <iftest="name!=null and name!='' "> name=#{name}, </if> </set> where id=#{id} <!-- <where> <if test="id !=null and id!= ''"> id=#{id} </if> </where> --> </update> </mapper> |
test.jsp
<%@ page language="java"import="java.util.*"pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <basehref="<%=basePath%>"> <title>My JSP 'test.jsp' starting page</title> <metahttp-equiv="pragma"content="no-cache"> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0"> <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description"content="This is my page"> <!-- <link rel="stylesheet" type="text/css"href="styles.css"> --> </head> <body> This is my JSP page. <br> </body> </html> |
手动下载,然后在pom文件里面引入
<!-- oracle的驱动包 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.3.0</version> </dependency> |
相关文章推荐
- myeclipse无法创建jsp页面
- 20145320《Java程序设计》第一次实验报告
- ASA用ASDM管理时报unable to launch device manage xxxx.xxx.xxx.xxx
- 20145311 实验一 "Java开发环境的熟悉"
- 20145227 《Java程序设计》第6周学习总结
- java中的接口和抽象类
- 20145210姚思羽《Java程序设计》实验一实验报告
- struts2 action
- 【java】关于static关键字在重写父类方法时的作用
- JAVA的Class.forName(clsName)ClassLoader的loadClass(clsName)的区别
- 1章 初识Java
- No qualifying bean of type [XXX.XXX] found for dependency 解决方法
- Java基础---------2016.4.10(2)
- Java 信号量 Semaphore 介绍
- JAVA中this用法总结
- spring自带的定时器@Scheduled
- 20145307陈俊达第六周JAVA学习总结
- java插入排序(个人总结)
- Java实现数组反转翻转的方法
- JavaWeb总结(一)—Servlet