版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36481052/article/details/78704576
首先说以下我的开发工具是:IDEA+mysql
简单的“SSM“框架建设,第一次写的时候到jar包的时候把自己弄得很糊涂,希望此代码可以对你们有帮助。
下来贴出的我项目的包位置,![这是Dao,service,controller]
引用块内容
访问URL:localhost:8080/insertUser.do
下来才是真正的干货,首先建一个entity实体User类:
package com.demo.entity;
public class UserEntity {
//id
private Integer id;
//名称
private String userName;
//密码
private String userPwd;
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 getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
@Override
public String toString() {
return "UserEntity{" + "id=" + id + ", userName='" + userName + '\'' + ", userPwd='" + userPwd + '\'' + '}';
}
}
下来就是Dao了,提个建议:这里的方法名和mapper里要一致,并且最好能统一点,等你的实体多了你可以将其抽成一个基础借口,让其它的去集成就行了,这样可以减轻您的代码体积和代码量。
package com.demo.dao;
import com.demo.entity.UserEntity;
/**
* 用户信息数据层
* */
public interface UserDao {
//新增用户信息
int insertUser(UserEntity userEntity);
//修改用户信息
int updateUser(UserEntity userEntity);
//查询用户信息
UserEntity findUser(UserEntity userEntity);
//删除用户信息
int deleteUser(Integer id);
}
接下来就到service接口和serviceImpl类了,实现类里面一定要多判断,不然你在执行Dao时,就会出现很多Exception,这些都是可以避免的。建议多用接口这样你需求有变化时,你的代码改动量时最小的而且不会出现“跷跷板”情况。
package com.demo.service;
import com.demo.entity.UserEntity;
/**
* 用户信息业务逻辑处理层
**/
public interface UserService {
//新增用户信息
String insertUser(UserEntity userEntity);
//修改用户信息
String updateUser(UserEntity userEntity);
//查询用户信息
UserEntity findUser(UserEntity userEntity);
//删除用户信息
String deleteUser(Integer id);
}
serviceImpl实现类:我在这个类里面,验证如果出现异常就自己new一个RunTimeException这样的好处是唇线异常信息是不是是服务器停止。而且对于前端也好判断,你可以自己写一个异常类继承Exception。
package com.demo.service.impl;
import com.demo.dao.UserDao;
import com.demo.entity.UserEntity;
import com.demo.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 业务逻辑处理实现类
**/
/*controller依赖注入service接口时,如果项目的service接口多,
建议使用别名。这样可以规避掉一些不必要的异常*/
@Service("userServices")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
/*新增用户信息*/
public String insertUser(UserEntity userEntity) {
//验证参数有效性
if(userEntity==null){
throw new RuntimeException("新增对象不能为空...");
}else if(userEntity.getUserName()==null || userEntity.getUserName().equals("")){
throw new RuntimeException("用户名称不能为空...");
}else if(userEntity.getUserPwd()==null || userEntity.getUserPwd().equals("")){
throw new RuntimeException("用户密码不能为空...");
}
//执行新增
int rows = userDao.insertUser(userEntity);
//根据记过判断是否新增成功
if(rows==-1){
throw new RuntimeException("新增失败..");
}
return "新增成功";
}
/*修改用户信息*/
public String updateUser(UserEntity userEntity) {
//验证参数有效性
if(userEntity==null){
throw new RuntimeException("新增对象不能为空...");
}else if( userEntity.getId().equals("")||userEntity.getId()==null){
throw new RuntimeException("用户id不能为空...");
}else if(userEntity.getUserName()==null || userEntity.getUserName().equals("")){
throw new RuntimeException("用户名称不能为空...");
}else if(userEntity.getUserPwd()==null || userEntity.getUserPwd().equals("")){
throw new RuntimeException("用户密码不能为空...");
}
//执行新增
int rows = userDao.updateUser(userEntity);
//根据记过判断是否新增成功
if(rows==-1){
throw new RuntimeException("修改失败..");
}
return "修改成功";
}
/*查询*/
public UserEntity findUser(UserEntity userEntity) {
//执行查询
UserEntity entity = userDao.findUser(userEntity);
//根据查询结果判断是否有数据
if(entity==null){
throw new RuntimeException("没有数据对象...");
}
return entity;
}
最后就是controller和controllerImpl了:
package com.demo.controller;
import com.demo.entity.UserEntity;
public interface UserController {
//新增用户信息
String insertUser(UserEntity userEntity);
//修改用户信息
String updateUser(UserEntity userEntity);
//查询用户信息
UserEntity findUser(UserEntity userEntity);
//删除用户信息
String deleteUser(Integer id);
}
controllerImpl实现类:
package com.demo.controller.impl;
import com.demo.controller.UserController;
import com.demo.entity.UserEntity;
import com.demo.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
@Controller
@RequestMapping("/")
public class UserControllerimpl implements UserController {
@Resource
private UserService userService;
/*新增用户信息*/
@RequestMapping("insertUser")
@ResponseBody
public String insertUser(UserEntity userEntity) {
//执行新增
String str = userService.insertUser(userEntity);
//返回结果对象
return str;
}
/*修改用户信息*/
@RequestMapping("updateUser")
@ResponseBody
public String updateUser(UserEntity userEntity) {
//执行修改
String str = userService.updateUser(userEntity);
//返回结果对象
return str;
}
/*查询用户信息*/
@RequestMapping("findUser")
@ResponseBody
public UserEntity findUser(UserEntity userEntity) {
//执行新增
UserEntity entity = userService.findUser(userEntity);
//返回结果对象
return entity;
}
@RequestMapping("deleteUser")
@ResponseBody
public String deleteUser(Integer id) {
//执行新增
String str = userService.deleteUser(id);
//返回结果对象
return str;
}
}
下来就是配置文件了:
mapper文件:
<?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.demo.dao.UserDao">
<!--新增用户信息-->
<insert id="insertUser" parameterType="com.demo.entity.UserEntity">
INSERT INTO (
user_name,
user_pwd
)VALUES(
#{userName},
#{userPwd}
)
<!--修改用户信息-->
<insert id="updatetUser" parameterType="com.demo.entity.UserEntity">
UPDATE user
<trim prefix="set" suffixOverrides=",">
<if test="userName!=null and !userName.equals('')">
user_name=#{userName},
</if>
<if test="userPwd!=null and !userPwd.equals('')">
user_pwd=#{userPwd},
</if>
</trim>
WHERE id=#{id};
<!--删除表中信息-->
<update id="deleteUser" parameterType="com.demo.entity.UserEntity">
DELETE
FROM user
WHERE id=#{id}
</update>
<!--查询所有用户信息分页-->
<select id="findUser" parameterType="com.demo.entity.UserEntity"
resultType="com.demo.entity.UserEntity">
SELECT id,user_name,user_pwd
FROM user;
</mapper>
mysql数据库链接:
driverClasss=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/"数据库连接名"?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username=root
password=123456
initialSize=0
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000
spring-mvc配置文件:
<?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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 自动扫描 @Controller-->
<context:component-scan base-package="com.demo"/>
<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->
</list>
</property>
</bean>
</beans>
spring-mybatis:
<?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-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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 自动扫描 -->
<context:component-scan base-package="com.demo"/>
<!-- 第一种方式:加载一个properties文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<!-- 第二种方式:加载多个properties文件
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:common.properties</value>
</list>
</property>
<property name="fileEncoding" value="UTF-8"/>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
</bean>
-->
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClasss}"/>
<property name="url" value="${jdbcUrl}"/>
<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>
<!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapping/*.xml"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.demo"/>
<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>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
最后就是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>demo</display-name>
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止spring内存溢出监听器,比如quartz -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- spring mvc servlet-->
<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:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do 形式 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>