引言
所用版本:jdk1.8 tomcat7.88
所用数据库:mysql
所用技术:maven-spring4.3.2-struts2-mybatis-ajax 基于注解版
//主要实现 两张表 增删改查 包含图片上传 ajax发送异步请求 主要对 select标签 有详细案例
本案例中用到的常用注解总结如下:
1.实体类上:
@Component此注解表示 创建简单对象 默认构建的简单对象名称(ID值)为类名首字母小写
2.service 实现类上:
加到类上
@Service 自动创建service实现类对象
@Transactional 进行事务控制 书写在类上表示本类中所有的方法都加事务( 增删改 默认)
加到方法上表示:方法上的事务覆盖类上的
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
表示查询 时将事务级别设置为 readOnly = true 只读属性
(propagation = Propagation.SUPPORTS 外部没有事务不开启事务
作用:提高查询效率
3.action类上:
@Controller 作用 生成Action对象 默认为类名首字母小写
@Scope("prototype") 作用 控制对象创建的次数 表示多例 (struts2中表示多列)
4.@Autowired 表示自动注入 由spring框架提供 所创建的接口实现类对象 (取代get和set方法)
5.@Resource 表示自动注入 由java默认提供
1环境搭建 导入依赖 pom.xml文件
<name>SSMAnotation 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>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 引入javaEE规范 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- 引入spring相关的jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- 引入mybatis相关jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 引入mybatis 与 spring 整合jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 引入struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.16</version>
</dependency>
<!-- 引入struts2 与spring的整合jar -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.16</version>
</dependency>
<!-- 引入mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- 引入dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 引入fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- 引入log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
<!--引入jstl标签-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
<build>
<finalName>SSMAnotation</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.1.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.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</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>
</plugins>
</pluginManagement>
</build>
</project>
2.小配置文件 jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ems_spring1
name=root
password=root
3.spring 配置文件 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: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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--开启注解扫描 告知Spring在哪一个包下使用了注解-->
<context:component-scan base-package="com.baizhi.*"></context:component-scan>
<!--读取小配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!--配置数据源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${driver}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
<property name="username">
<value>${name}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
</bean>
<!--创建SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--起别名-->
<property name="typeAliasesPackage">
<value>com.baizhi.entity</value>
</property>
<!--Mapper文件注册-->
<property name="mapperLocations">
<list>
<value>classpath:com/baizhi/dao/*Mapper.xml</value>
</list>
</property>
</bean>
<!--创建DAO实现类对象-->
<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage">
<value>com.baizhi.dao</value>
</property>
</bean>
<!--激活@Transactional-->
<!--引入控制事务的相关代码-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--激活-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
4. web.xml
<!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>
<!--读取spring(applicationContext.xml)配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置Struts的核心过滤器-->
<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>
<!--配置Spring的监听工厂-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
5.log4j.properties
log4j.rootLogger = ERROR,bb
log4j.appender.bb = org.apache.log4j.ConsoleAppender
log4j.appender.bb.layout = org.apache.log4j.PatternLayout
log4j.appender.bb.layout.conversionPattern = %d{yyyy-MM-dd} %t %c [%p] %m%n
log4j.logger.com.baizhi.dao = DEBUG
log4j.logger.com.baizhi.service = DEBUG
log4j.logger.org.springframework.jdbc = DEBUG
6 写实体 (建表省略)
//运用注解开发
//第一张表 部门表
package com.baizhi.entity;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* 部门表的实体类
* @Component此注解表示 创建简单对象 默认构建的简单对象名称(ID值)为类名首字母小写
* */
@Component
public class Department implements Serializable {
private Integer id;
//部门编号
private String identifier;
private String name;
//此处 get/set,有参无参,toString 省略
}
//第二种表 员工表
package com.baizhi.entity;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* 库表 emp 对应的实体类
* @Component此注解表示 创建简单对象 默认构建的简单对象名称(ID值)为类名首字母小写
* */
@Component
public class Emp implements Serializable {
private Integer id;
private String code;
private String name;
private double salary;
private Integer age;
//关系属性 部门id
private Integer department_id;
//封装部门对象 做表连接查询结果展示
private Department department;
//此处 get/set,有参无参,toString 省略
}
7写Dao接口
7.1 部门表 对应接口
package com.baizhi.dao;
import com.baizhi.entity.Department;
import java.util.List;
public interface DepartmentDao {
//插入一条数据
public void saveDepartment(Department department);
//展示所有部门信息
public List<Department> selectDepartmentAll();
//根据id查询一个对象
public Department selectByIdDepartment(Department department);
//根据id修改一条数据
public void uadataByIdDepartment(Department department);
}
7.2员工表 对应接口
package com.baizhi.dao;
import com.baizhi.entity.Emp;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EmpDao {
//根据部门id展示所有员工信息
public List<Emp> selectEmpAll(@Param ("department_id") Integer department_id,@Param ("did") Integer did);
//插入一条数据
public void savaEmp(Emp emp);
//根据id删除一条员工信息
public void deleteByIdEmp(Emp emp);
//根据 id查询一条员工信息
public Emp selectByIdEmp(Emp emp);
//根据id修改一条员工信息
public void updateByIdEmp(Emp emp);
}
8 写 Mapper.xml (实现Dao接口)
8.1 部门表 接口 对应的实现
文件名为:DepartmentDaoMapper.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="com.baizhi.dao.DepartmentDao">
<!-- 插入一条数据-->
<insert id="saveDepartment" parameterType="Department">
insert into department (identifier,name) values(#{
identifier},#{
name})
</insert>
<!--展示所有信息-->
<select id="selectDepartmentAll" resultType="Department">
select * from department
</select>
<!--根据id查询一个对象-->
<select id="selectByIdDepartment" resultType="Department">
select * from department where id = #{
id}
</select>
<!--根据id修改一条数据-->
<update id="uadataByIdDepartment" parameterType="Department">
update department set identifier =#{
identifier},name=#{
name} where id = #{
id}
</update>
</mapper>
8.2 员工表 接口 对应的实现
文件名为:EmpDaoMapper.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="com.baizhi.dao.EmpDao">
<!-- 插入一条数据-->
<insert id="savaEmp" parameterType="Emp">
insert into emp (code,name,salary,age,department_id)
values(#{
code},#{
name},#{
salary},#{
age},#{
department_id})
</insert>
<resultMap id="map" type="Emp">
<id property="id" column="eid"></id>
<result property="code" column="code"></result>
<result property="name" column=