ssm项目的操作流程
(1) 新建Maven项目,选择webapp模板
(2) 修改目录
(3) 修改pom文件,添加依赖
(4) 添加jdbc.properties文件
(5) 添加SqlMapConfig.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>
<!--设置日志输出语句,显示相应操作的sql语名-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
</configuration>
(6) 添加applicationContext_mapper.xml文件(数据访问层)
<!-- 读取属性文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
</bean>
<!-- 配置SqlSessionFactoryBean-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源-->
<property name="dataSource" ref="dataSource"></property>
<!--配置sqlMapConfig核心配置文件-->
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
<!-- 注册实体类-->
<property name="typeAliasesPackage" value="com.meng.pojo"/>
</bean>
<!-- 注册mapper.xml文件-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.meng.mapper"></property>
</bean>
(7) 添加applicationContext_service.xml文件(业务逻辑层)
<!-- 添加包扫描-->
<context:component-scan base-package="com.meng.service.impl"/>
<!-- 添加事务管理器-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<!-- 配置数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务切面-->
<tx:advice id="myadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*select*" read-only="true"/>
<tx:method name="*search*" read-only="true"/>
<tx:method name="*find*" read-only="true"/>
<tx:method name="*get*" read-only="true"/>
<tx:method name="*insert*" read-only="true"/>
<tx:method name="*add*" read-only="true"/>
<tx:method name="*save*" read-only="true"/>
<tx:method name="*set*" read-only="true"/>
<tx:method name="*update*" propagation="REQUIRED"/>
<tx:method name="*change*" propagation="REQUIRED"/>
<tx:method name="*modify*" propagation="REQUIRED"/>
<tx:method name="*delete*" propagation="REQUIRED"/>
<tx:method name="*drop*" propagation="REQUIRED"/>
<tx:method name="*remove*" propagation="REQUIRED"/>
<tx:method name="*clear*" propagation="REQUIRED"/>
<tx:method name="*delete*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!-- 配置事务切入点+绑定-->
<aop:config>
<aop:pointcut id="mycut" expression="execution(* com.meng.service.impl.*.*(..))"/>
<aop:advisor advice-ref="myadvice" pointcut-ref="mycut"/>
</aop:config>
(8) 添加springmvc.xml文件
<!-- 添加包扫描-->
<context:component-scan base-package="com.meng.controller"/>
<context:component-scan base-package="com.meng.service.impl"/>
<!-- 添加注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- ajax请求不需要视图解析器-->
(9) 删除并重新添加web.xml文件,设置中文编码,注册springmvc框架,注册spring框架
<!-- 配置中文乱码过滤器
private String encoding;
private boolean forceRequestEncoding;
private boolean forceResponseEncoding;
-->
<filter>
<filter-name>myfilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param><init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置springmvc-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 注册spring框架-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext_*.xml</param-value>
</context-param>
项目配置完成
(10) 新建实体类User(跟数据库保持一致)
(11) 新建UserMapper.java接口文件
(12) 新建UserMapper.xml实现增删改查所有功能
<!--完成实体类与表中列名的映射-->
<resultMap id="usermap" type="user">
<id property="userId" column="user_id"/>
<result property="cardType" column="card_type"/>
<result property="cardNo" column="card_no"/>
<result property="userName" column="user_name"/>
<result property="userSex" column="user_sex"/>
<result property="userAge" column="user_age"/>
<result property="userRole" column="user_role"/>
</resultMap>
<!-- 定义全部列名-->
<sql id="allColumns">
user_id,card_type,card_no,user_name,user_sex,user_age,user_role
</sql>
<!-- //根据条件分页获取分页数据
List<User> selectUserPage(
@Param("userName")
String userName,
@Param("userSex")
String userSex,
@Param("startRow")
int startRow
);
-->
<select id="selectUserPage" resultMap="usermap">
select <include refid="allColumns"></include>
from user
<where>
<if test="userName != null and userName != ''">
and user_name like concat('%',#{userName},'%')
</if>
<if test="userSex != null and userSex != ''">
and user_sex = #{userSex}
</if>
</where>
limit #{startRow},5
</select>
<!--
插入操作
int createUsercreateUser(User user);
-->
<insert id="createUsercreateUser" parameterType="user">
insert into user
values (#{userId}, #{cardType}, #{cardNo}, #{userName},
#{userSex}, #{userAge}, #{userRole})
</insert>
<!--
删除操作
int deleteUserById(String userId);
-->
<delete id="deleteUserById" parameterType="String">
delete
from user
where user_id = #{userId}
</delete>
<!-- 统计总行数
int getRowCount(
@Param("userName")
String userName,
@Param("userSex")
String userSex
);
-->
<select id="getRowCount" resultType="int">
select count(*)
from user
<where>
<if test="userName!=null and userName!='' ">
and user_name like concat('%',#{userName},'%')
</if>
<if test="userSex!=null and userSex != '' ">
and user_sex = #{userSex}
</if>
</where>
</select>
<!-- 更新 int updateUserById(User user);-->
<update id="updateUserById" parameterType="user">
update user
set card_type = #{cardType},
card_no = #{cardNo},
user_name = #{userName},
user_sex = #{userSex},
user_age = #{userAge},
user_role= #{userRole}
where user_id = #{userId};
</update>
(13) 新建Service接口和实现类
@Autowired
UserMapper userMapper;//数据访问层对象
@Override
public List<User> selectUserPage(String userName, String userSex, int startRow) {
return userMapper.selectUserPage(userName,userSex,startRow);
}
@Override
public int getRowCount(String userName, String userSex) {
return userMapper.getRowCount(userName,userSex);
}
@Override
public int deleteUserById(String userId) {
return userMapper.deleteUserById(userId);
}
@Override
public int createUser(User user) {
return userMapper.createUsercreateUser(user);
}
@Override
public int updateUserById(User user) {
return userMapper.updateUserById(user);
}
(14) 新建测试类,完成所有功能的测试
@RunWith(SpringJUnit4ClassRunner.class) //启动spring容器
@ContextConfiguration(locations = {"classpath:applicationContext_mapper.xml",
"classpath:appliicationContext_service.xml"})
public class MyTest {
@Autowired
UserService service;
@Test
public void testselectUserPage() {
List<User> users = service.selectUserPage("李", "男", 0);
users.forEach(user -> {
System.out.println(user);
});
}
//测试总行数
@Test
public void testgetRowCount() {
int count = service.getRowCount(null, "女");
System.out.println(count);
}
// 根据用户id删除用户
@Test
public void testdeleteUserById() {
int i = service.deleteUserById("15968162346981977");
System.out.println("删除成功!!!!");
}
(15) 新建控制器,完成所有功能
@CrossOrigin //支持跨域访问
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
public final static int PAGESIZE = 5;
// /user/selectUserPage?userName=z&userSex=男&page=null
// 1.分页查询
@ResponseBody
@RequestMapping("/selectUserPage")
List<User> selectUserPage(String userName, String userSex, Integer page) {
int startRow = 0;
if (page != null) {
startRow = (page - 1) * PAGESIZE;
}
return userService.selectUserPage(userName, userSex, startRow);
}
// 2.获取总行数 /user/getRowCount?userName=z&userSex=男
@RequestMapping("/getRowCount")
@ResponseBody
int getRowCount(String userName,String userSex) {
return userService.getRowCount(userName, userSex);
}
// 3.根据id删除用户user/ deleteUserById?userId= 15968162087363060
@RequestMapping("/deleteUserById")
@ResponseBody
int deleteUserById(String userId) {
return userService.deleteUserById(userId);
}
// 4.增加用户 /user/createUser(参数见下面)
@RequestMapping("/createUser")
@ResponseBody
int createUser(User user) {
String uId = System.currentTimeMillis() + "";
user.setUserId(uId);
return userService.createUser(user);
}
//5. 更新用户 /user/updateUserById(参数见以下)
@RequestMapping("/updateUserById")
@ResponseBody
int updateUserById(User user) {
return userService.updateUserById(user);
}
}
(16) 浏览器测试功能
(17) 接入前端项目测试