maven+struts2+spring+mybatis基礎配置記錄2018-8-14
IDE環境:Intellij IDEA
pom.xml內容:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion >
<groupId>專案路徑</groupId>
<artifactId>ASTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>ASTest Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url >
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<springframework.version>3.0.5.RELEASE</springframework.version >
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-web -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.opensymphony/xwork -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.1_3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
<build>
<finalName>ASTest</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 設定 JDK 版本以及編碼 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
project structure配置:
Project
SDK:1.8
Modules
點選中間部分進行如下配置:
專案根目錄
source folders:src\main\java(右鍵Sources)
resource folders:src\main\resources(右鍵Resources)
excludedFolders:target(右鍵Excluded)Spring
選擇src/main/resources/applicationContext.xml(可先建立,下面會提到內容)- Web
上方:專案路徑\src\main\webapp\WEB-INF\web.xml
下方:專案路徑\src\main\webapp
- Web
Facets
勾選下方兩個source roots
Artifacts
新增一個Web Application Exploded
我配置的target位置是專案路徑\target\專案名稱
選擇apply和ok完成配置
tomcat配置,選擇右上角run按鈕左邊的小箭頭選擇Edit Configuration,新增一個本地的tomcat
Server
Open browser
我選了chrome(注意此處default和chrome看起來圖示相同,單default實際會開啟IE)VM options
-Dfile.encoding=UTF-8
Deployment
新增一個Artifact,選擇專案名:war exploded,此時可以配置Application context二級目錄
如訪問網址為http://localhost:8080,此處若配置/則不變,配置為/a則根目錄變為http://localhost:8080/a
然後Apply OK即可。
web.xml配置
注意,此處修改的為src/main/webapp/WEB-INF/web.xml,如果有另一個外部的web目錄,可以刪掉那個目錄(沒有用,干擾)。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>/admin/test.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2 </filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定需要載入的Spring配置檔案 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- spring偵聽器,該偵聽器負責載入contextConfigLocation中指定的配置檔案 -->
</web-app>
spring配置
目錄:src/main/resources/applicationContext.xml
注意,此處配置,需同時配置上方提到的web.xml,和project structure裡面的Modules-spring配置一致,建立時最好右鍵同時,建立New->Xml Configuration File->Spring Config,這樣的好處是,如果project structure沒配置會進行提示,而且有spring葉子標誌。
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置Annotation支援 -->
<context:annotation-config/>
<!-- 配置AspectJ註解支援 -->
<aop:aspectj-autoproxy />
<context:component-scan base-package="專案根目錄包名如com.a.b">
</context:component-scan>
</beans>
struts.xml配置
@Scope("prototype")
@Controller("testAction")
public class TestAction extends ActionSupport {
public String test(){
System.out.println("login");
return SUCCESS;
}
}
此處controller需與上方class名相同
mybatis配置
目錄:src/main/resources/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>
<!-- 資料庫連線配置,配置連線字串、使用者名稱、密碼或快取、懶載入、語句執行超時時間等這裡目前只配置了基本的資料庫連線屬性 -->
<environments default="cybatis">
<environment id="cybatis">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:埠/資料庫" />
<property name="username" value="使用者名稱" />
<property name="password" value="密碼" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/mapper/mem-mapper.xml" />
</mappers>
</configuration>
mapper(此處用幾個表就幾個mapper的xml和mapper的類):
此處用的mem表路徑:src/main/resources/mybatis/mapper/mem-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="專案路徑.mapper.MemberMapper">
<resultMap id="memMap" type="專案路徑.bean.Member">
<result column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
</resultMap>
<sql id="selectFragment">
<![CDATA[
select
*
from mem
]]>
</sql>
<sql id="pageFragment">
<if test="page_start!=null">
<if test="per_page!=null">
<![CDATA[limit #{page_start},#{per_page}]]>
</if>
</if>
</sql>
<select id="selectAll" resultMap="memMap" parameterType="Map">
<include refid="selectFragment" />
<include refid="pageFragment" />
</select>
<select id="selectCount" resultType="java.lang.Integer">
<![CDATA[
select
count(1)
from mem
]]>
</select>
</mapper>
幾個屬性:
sql-id <-> include-refid(相當於把sql放在此處)
resultMap-id<->select-resultMap
select-parameterType(引數傳入的引數型別,一般是類或Map)
select-resultType(如果是列表型別可以不用寫,如果是單count可以寫java.lang.Integer)
mapper介面:
public interface MemberMapper {
List selectAll(Map
public class BaseDao {
private SqlSessionFactory getSqlSessionFactory() {
Reader reader = null;
SqlSessionFactory sqlSessionFactory = null;
try {
reader = Resources.getResourceAsReader("mybatis/mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
protected SqlSession openSession(){
return getSqlSessionFactory().openSession();
}
protected SqlSession openSession(boolean autoUpdate){
return getSqlSessionFactory().openSession(autoUpdate);
}
protected void closeSession(SqlSession session){
session.close();
}
}
MemberDao.java`
@Component("memberDao")
public class MemberDao extends BaseDao {
public List<Member> getAll(Map<String,Object> data){
SqlSession session = openSession();
try {
MemberMapper mapper = session.getMapper(MemberMapper.class);
if(data == null){
data = new HashMap<>();
}
return mapper.selectAll(data);
} finally {
closeSession(session);
}
}
public int getTotalNum(){
SqlSession session = openSession();
try {
MemberMapper mapper = session.getMapper(MemberMapper.class);
Integer count = mapper.selectCount();
return getSafeInt(count);
} finally {
closeSession(session);
}
}
public int getSafeInt(Integer value){
if(value == null)
return 0;
return value.intValue();
}
}
MemberAction.java
@Scope("prototype")
@Controller("memberAction")
public class MemberAction extends BaseAction {
@Resource
private MemberService memberService;
private List<Member> memberList;
public String listMemeber(){
int count = memberService.getItemCount();
pageHelper = PageHelper.getPageHelper(ServletActionContext.getRequest(),count);
memberList = memberService.getAll(pageHelper);
return SUCCESS;
}
public void setMemberList(List<Member> memberList){
this.memberList = memberList;
}
public List<Member> getMemberList(){
return this.memberList;
}
}
public interface MemberService {
List<Member> getAll(PageHelper pageHelper);
int getItemCount();
}
@Service
@Transactional
public class MemberServiceImpl implements MemberService {
@Resource
private MemberDao memberDao;
@Override
public List<Member> getAll(PageHelper pageHelper) {
Map<String,Object> items = new HashMap<>();
if(pageHelper==null){
items.putAll(PageHelper.getDefaultData());
}else{
items.putAll(pageHelper.getMapData());
}
return memberDao.getAll(items);
}
@Override
public int getItemCount() {
return memberDao.getTotalNum();
}
}
這裡struts.xml要配action,還有分頁相關的程式碼就不寫了。總之,呼叫思路是:
url /a/b.action
->struts.xml,找到對應類和方法
->XXAction.java呼叫相應方法
->service層進行資料處理XXService.java(介面)
->單類實現XXServiceImpl.java
->相應資料庫呼叫處理XXDao
->XXMapper.java(mapper,xml配置方法介面)
->xx-mapper.xml(資料庫sql對映整合)
->返回到XXAction.java
->struts.xml顯示合適的頁面
其實XXService.java和XXMapper.java這兩個介面只相當於方法列表,只是簡單的介面。j2ee開發各種環境搭建很繁複,而且報錯不太容易看,特此記錄一下,方便以後的環境搭建。