Maven搭建Struts2+Mybatis项目
Pom.xml
<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>com.huawei</groupId> <artifactId>S2M</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging>
<!-- 统一制定的属性 --> <properties> <spring.version>4.2.0.RELEASE</spring.version> <struts2.version>2.3.24.1</struts2.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.17</log4j.version> <servlet.version>2.5</servlet.version> <junit.version>4.11</junit.version> <fastjson.version>1.1.37</fastjson.version> <oracle.version>11.2.0</oracle.version> </properties>
<!-- 锁定版本 --> <dependencies> <!-- fastJSON --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency>
<!-- spring begin --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</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-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</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-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency>
<!-- struts2 begin --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts2.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>${struts2.version}</version> </dependency> <!-- struts2 end -->
<!-- mybatis begin --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- mybatis end -->
<!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</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 -->
<!-- Servlet begin --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <!-- Servlet end -->
<!-- junit begin --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- junit end -->
<!-- oralce:需求手动安装 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>${oracle.version}</version> </dependency> <!-- oracle end --> <!-- 数据库连接池 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
<!-- 事务用到 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.6</version> </dependency> </dependencies>
<build> <plugins> <!-- jdk版本插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> <showWarnings>true</showWarnings> </configuration> </plugin>
<!-- tomcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>9080</port> <server>tomcat7</server> </configuration> </plugin> </plugins> </build> </project> |
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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>/*</url-pattern> </filter-mapping>
</web-app> |
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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- spring读取db.properties文件 --> <!-- location:读取的文件路径--> <context:property-placeholder location="classpath:db.properties"/> <!-- 1.建立数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbcUrl}"/> <property name="driverClass" value="${driverClass}"/> <property name="user" value="${user}"/> <property name="password" value="${password}"/> </bean>
<!-- 2.创建SessinoFactory --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 自动到mappers包下面去搜索mybatis的映射文件 --> <property name="mapperLocations" value="classpath:mappers/*.xml" /> </bean>
<!-- 通过工厂直接获取Mapper的操作对象,即Mapper接口的代理对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 使用了哪个会话工厂 --> <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property> <!-- 扫描的接口的包名 --> <property name="basePackage" value="cn.huawei.mapper"></property> </bean>
<!-- 3.1 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 3.2 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
<!-- 4.开启IOC注解,如@controller,@scope,@Resource等 --> <context:component-scan base-package="cn.huawei"/> </beans>
|
Db.properties
# oracle jdbc properties jdbcUrl = jdbc:oracle:thin:@localhost:1521:orcl driverClass= oracle.jdbc.driver.OracleDriver user = HBB2B password = HBB2B
|
Log4j.properties
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ### log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=e:/mylog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=info, stdout
|
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > <configuration>
</configuration> |
|
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 配置成开发模式 --> <constant name="struts.devMode" value="true" /> <!-- 把主题配置成simple --> <constant name="struts.ui.theme" value="simple" />
<package name="struts2" extends="struts-default" namespace="/"> <!—action业务类 --> <action name="huawei_*" class="customerAction" method="{1}"> <result name="success">/customerList.jsp</result> <result name="error">/error.jsp</result> </action> </package>
</struts>
|
CustomerMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.huawei.mapper.CustomerMapper"> <resultMap type="cn.huawei.domain.Customer" id="CustomerAll"> <id column="ID" property="id"/> <result column="USERNAME" property="username"/> <result column="PASSWORD" property="password"/> <result column="TYPE" property="type"/> <result column="SEX" property="sex"/> <result column="TELEPHONE" property="telephone"/> <result column="ADDRESS" property="adderss"/> <result column="EMAIL" property="email"/> <result column="FIXED_AREA_ID" property="fixedId"/> </resultMap>
<!-- 查询所有 --> <select id="findAll" resultMap="CustomerAll"> select * from T_CUSTOMER </select> </mapper>
|
Action层
@Controller @Scope("prototype") public class CustomerAction extends ActionSupport{
@Autowired private CustomerService customerService;
public String findAll(){ try { List<Customer> list = customerService.findAll(); ActionContext.getContext().put("customerList", list); int i = 10/0; return SUCCESS; } catch (Exception e) { e.printStackTrace(); return ERROR; } }
} |
Service层
public interface CustomerService {
public List<Customer> findAll();
} |
@Service @Transactional public class CustomerServiceImpl implements CustomerService {
@Autowired private CustomerMapper customerMapper;
@Override public List<Customer> findAll() { return customerMapper.findAll(); }
} |
Dao层
@Repository public interface CustomerMapper { /** * 查询所有客户 * @return */ public List<Customer> findAll(); } |
实体类
/* * 客户实体类 */ public class Customer {
private Integer id; private String username; private String password; private Integer type; private String sex; private String telephone; private String adderss; private String email; private Integer fixedId; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getAdderss() { return adderss; } public void setAdderss(String adderss) { this.adderss = adderss; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getFixedId() { return fixedId; } public void setFixedId(Integer fixedId) { this.fixedId = fixedId; } @Override public String toString() { return "Customer [id=" + id + ", username=" + username + ", password=" + password + ", type=" + type + ", sex=" + sex + ", telephone=" + telephone + ", adderss=" + adderss + ", email=" + email + ", fixedId=" + fixedId + "]"; }
} |
测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class CustomerTest {
@Autowired private CustomerService customerService;
@Test public void test(){ List<Customer> list = customerService.findAll(); for (Customer customer : list) { System.out.println(customer); } } } |
页面
Index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>首页</title> </head> <body> <a href="${pageContext.request.contextPath}/huawei_findAll">客户列表</a> </body> </html> |
customerList.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>首页</title> </head> <body> <table border="1px"> <tr> <th>客户编号</th> <th>姓名</th> <th>密码</th> <th>等级</th> <th>性别</th> <th>电话</th> <th>地址</th> <th>email</th> <th>外键</th> </tr> <%-- value: 需要遍历的数据,从值栈取出 var:每次从数据中取出来的变量 --%> <s:iterator value="#customerList" var="cust"> <tr align="center"> <td> <s:property value="#cust.id"/> </td> <td> <s:property value="#cust.username"/> </td> <td> <s:property value="#cust.password"/> </td> <td> <s:property value="#cust.type"/> </td> <td > <s:property value="#cust.sex"/> </td> <td> <s:property value="#cust.telephone"/> </td> <td> <s:property value="#cust.adderss"/> </td> <td> <s:property value="#cust.email"/> </td> <td> <s:property value="#cust.fixedId"/> </td> </tr> </s:iterator> </table> </body> </html> |