您的位置:首页 > 编程语言 > Java开发

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>

二、 配置web.xml

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.properties

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

三、 springmvc的配置文件

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>

四、 配置spring的配置文件

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.properties

数据库连接的属性

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=system
jdbc.password=kang

mybatis-configuration.xml

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>

五、 Controller层

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");
}

}

六、 Service层

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);

}

}

七、 Dao层

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();

}

}

八、 mapper层

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);
}

Mapper配置文件

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>

九、 jsp层

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>

十、 maven管理ojdbc的jar

手动下载,然后在pom文件里面引入



<!-- oracle的驱动包 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: