1. 程式人生 > >SSM+maven+oracle搭建一(spring+mybatis測試成功)

SSM+maven+oracle搭建一(spring+mybatis測試成功)

1.maven需要引入的jar包

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.cxc</groupId>
  <artifactId>Hotel</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Hotel Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>  
        <!-- spring版本號 -->  
        <spring.version>3.2.0.RELEASE</spring.version>  
        <!-- mybatis版本號 -->  
        <mybatis.version>3.2.6</mybatis.version>  
        <!-- log4j日誌檔案管理包版本 -->  
        <slf4j.version>1.7.7</slf4j.version>  
        <log4j.version>1.2.14</log4j.version>  
    </properties>  
  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.11</version>  
            <!-- 表示開發的時候引入,釋出的時候不會載入此包 -->  
            <scope>test</scope>  
        </dependency>  
        <!-- spring核心包 -->  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-oxm</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-tx</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-webmvc</artifactId>  
            <version>3.2.0.RELEASE</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-aop</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-test</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <!-- mybatis核心包 -->  
        <dependency>  
            <groupId>org.mybatis</groupId>  
            <artifactId>mybatis</artifactId>  
            <version>3.1.1</version>  
        </dependency>  
        <!-- mybatis/spring包 -->  
        <dependency>  
            <groupId>org.mybatis</groupId>  
            <artifactId>mybatis-spring</artifactId>  
            <version>1.2.2</version>  
        </dependency>  
        <!-- 匯入java ee jar 包 -->  
        <dependency>  
            <groupId>javax</groupId>  
            <artifactId>javaee-api</artifactId>  
            <version>7.0</version>  
        </dependency>  
        <!-- 匯入Mysql資料庫連結jar包 -->  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>5.1.22</version>  
        </dependency>  
        <!-- 匯入dbcp的jar包,用來在applicationContext.xml中配置資料庫 -->  
        <dependency>  
            <groupId>commons-dbcp</groupId>  
            <artifactId>commons-dbcp</artifactId>  
            <version>1.2.2</version>  
        </dependency>  
        <!-- JSTL標籤類 -->  
        <dependency>  
            <groupId>jstl</groupId>  
            <artifactId>jstl</artifactId>  
            <version>1.2</version>  
        </dependency>  
        <!-- 日誌檔案管理包 -->  
        <!-- log start -->  
        <dependency>  
            <groupId>log4j</groupId>  
            <artifactId>log4j</artifactId>  
            <version>${log4j.version}</version>  
        </dependency>  
          
          
        <!-- 格式化物件,方便輸出日誌 -->  
        <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>fastjson</artifactId>  
            <version>1.1.41</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>${slf4j.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-log4j12</artifactId>  
            <version>${slf4j.version}</version>  
        </dependency>  
        <!-- log end -->  
        <!-- 映入JSON -->  
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-mapper-asl</artifactId>  
            <version>1.9.11</version>  
        </dependency>  
        <!-- 上傳元件包 -->  
        <dependency>  
            <groupId>commons-fileupload</groupId>  
            <artifactId>commons-fileupload</artifactId>  
            <version>1.3.1</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.4</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-codec</groupId>  
            <artifactId>commons-codec</artifactId>  
            <version>1.9</version>  
        </dependency>  
    </dependencies>  
</project>


注意此處沒有引入連線oracle的ojdbc的jar,原因是maven沒有得到oracle的授權,所以無法直接下載使用

我們可以在網上自行尋找,然後放入專案中在eclipse的可視位置,右鍵該jar包,build path即可使用

2.spring與mybatis整合

1)jdbc.properties檔案

#連線oracle資料庫
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=xiaoshuo
password=chengxucai
#定義初始連線數  
initialSize=0  
#定義最大連線數  
maxActive=20  
#定義最大空閒  
maxIdle=20  
#定義最小空閒  
minIdle=1  
#定義最長等待時間  
maxWait=60000 

#連線mysql資料庫
#jdbc_driverClassName =com.mysql.jdbc.Driver
#jdbc_url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
#jdbc_username=root
#jdbc_password=root

注意:此處複製有可能會新增空格,在測試的時候注意刪除,不然會引起報錯

2)spring-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-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
    <!-- 自動掃描 -->  
    <context:component-scan base-package="cxc.hotel" />  
    <!-- 引入配置檔案 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  
  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="${driverClassName}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化連線大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 連線池最大數量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 連線池最大空閒 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 連線池最小空閒 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 獲取連線最大等待時間 -->  
        <property name="maxWait" value="${maxWait}"></property>  
    </bean>  
  
    <!-- spring和MyBatis完美整合,不需要mybatis的配置對映檔案 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自動掃描mapping.xml檔案 -->  
        <property name="mapperLocations" value="classpath:cxc/hotel/mapping/*.xml"></property>  
    </bean>  
  
    <!-- DAO介面所在包名,Spring會自動查詢其下的類 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="cxc.hotel.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>  
  
    <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
  
</beans>

3)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-dd HH\:mm\:ss}][%c]%m%n  

4)junit測試

    4.1)oracle中建表,並插入資料

create table users(  
  id integer not null,  
  userName varchar(16) not null,  
  password varchar(16) not null,  
  age integer not null, 
  gender integer not null,
   primary key(id)   
)  
insert into users(id,userName,password,age,gender) values(1,'ss','1',24,1) ;

4.2)dao介面

package cxc.hotel.dao;

import cxc.hotel.entity.User;


public interface UserDao {
	/** 方法名 與  UserMapper.xml 檔案中的 sql語句的 id 相同*/
    User findUserById(Integer id);
}

4.3)service介面

package cxc.hotel.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cxc.hotel.dao.UserDao;
import cxc.hotel.entity.User;
import cxc.hotel.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService {
	 	@Resource  
	    private UserDao userDao;  
	    public User getUserById(int userId) {  
	        return this.userDao.findUserById(userId);  
	    }  
}

4.4)service實現類

package cxc.hotel.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cxc.hotel.dao.UserDao;
import cxc.hotel.entity.User;
import cxc.hotel.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService {
	 	@Resource  
	    private UserDao userDao;  
	    public User getUserById(int userId) {  
	        return this.userDao.findUserById(userId);  
	    }  
}

4.5)建mapper.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="cxc.hotel.dao.UserDao" > 
<resultMap id="BaseResultMap" type="cxc.hotel.entity.User" > 
<id property="id" column="id" jdbcType="INTEGER" /> 
<result property="userName" column="userName" jdbcType="VARCHAR" /> 
<result property="password" column="password" jdbcType="VARCHAR" /> 
<result property="age" column="age" jdbcType="INTEGER" /> 
<result property="gender" column="gender" jdbcType="INTEGER" /> 
</resultMap>  

<select id="findUserById" resultMap="BaseResultMap" parameterType="java.lang.Integer" > <!--注意此處是resultMap還是resultType-->
select * from users where id = #{id}
</select> 
</mapper>

4.6)junit測試類

import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSON;

import cxc.hotel.entity.User;
import cxc.hotel.service.UserService;


@RunWith(SpringJUnit4ClassRunner.class)     //表示繼承了SpringJUnit4ClassRunner類  
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})  
  
public class TestMyBatis {  
    private static Logger logger = Logger.getLogger(TestMyBatis.class);
//  private ApplicationContext ac = null;  
    @Resource  
    private UserService userService = null;   
  
    @Test  
    public void test1() {  
        User user = userService.getUserById(1);  
        System.out.println(user);
    }  
} 

4.7)測試結果


至此spring+mybatis就整合成功

4.8)整合spring+mybatis後的結構圖


3.注意事項:

1)匯入jar包的時候看看maven中的對應jar包是否能用

2)dao中方法名 與  UserMapper.xml 檔案中的 sql語句的 id 相同

3)自行匯入要使用的ojdbc的jar包

4)建jsp檔案報錯?原因是因為缺少javax.servlet 的jar包依賴
在pom.xml檔案中新增以下程式碼下載servlet-api:
<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>servlet-api</artifactId>  
    <version>2.5</version>  
    <scope>provided</scope>  

</dependency>  

5)我上面的log4j檔案的名字前面有一個空格,不知道大家注意沒,因此在控制檯出現警告


經過細心尋找,終於還是發現了這個錯誤,所以大家在寫程式碼的時候一定要小心小心再小心

把空格去掉後,控制檯就能輸出日誌了,結果如下


4.檢視SSM+maven+oracle搭建二(spring+mybatis+springMVC):點選開啟連結