SSM民宿预订管理系统:民宿管理模块实现详解
民宿管理模块是民宿预订管理系统中非常重要的一个模块,它主要用于对民宿信息进行管理,包括添加、修改、查询、删除等操作。下面是基于SSM架构的民宿管理模块的实现步骤:
- 实体类的设计
首先需要设计民宿信息的实体类,包括民宿的名称、地址、价格、图片等信息。可以在src/main/java目录下创建实体类的包,例如com.example.entity。
在该包下创建一个名为House的Java类,定义民宿的各个属性:
public class House {
private int id; // 民宿ID
private String name; // 民宿名称
private String address; // 民宿地址
private double price; // 民宿价格
private String image; // 民宿图片
// getter和setter方法
}
- DAO层的设计
在src/main/java目录下创建DAO接口的包,例如com.example.dao。在该包下创建一个名为HouseDao的Java接口,定义对民宿信息进行操作的方法,如添加、修改、查询、删除等。
public interface HouseDao {
// 添加民宿信息
public int addHouse(House house);
// 修改民宿信息
public int updateHouse(House house);
// 根据ID查询民宿信息
public House getHouseById(int id);
// 查询所有民宿信息
public List<House> getAllHouses();
// 根据ID删除民宿信息
public int deleteHouse(int id);
}
- DAO层的实现
在src/main/java目录下创建DAO接口实现类的包,例如com.example.dao.impl。在该包下创建一个名为HouseDaoImpl的Java类,实现HouseDao接口。
@Repository
public class HouseDaoImpl implements HouseDao {
@Autowired
private SqlSession sqlSession;
// 添加民宿信息
public int addHouse(House house) {
return sqlSession.insert('com.example.mapper.HouseMapper.addHouse', house);
}
// 修改民宿信息
public int updateHouse(House house) {
return sqlSession.update('com.example.mapper.HouseMapper.updateHouse', house);
}
// 根据ID查询民宿信息
public House getHouseById(int id) {
return sqlSession.selectOne('com.example.mapper.HouseMapper.getHouseById', id);
}
// 查询所有民宿信息
public List<House> getAllHouses() {
return sqlSession.selectList('com.example.mapper.HouseMapper.getAllHouses');
}
// 根据ID删除民宿信息
public int deleteHouse(int id) {
return sqlSession.delete('com.example.mapper.HouseMapper.deleteHouse', id);
}
}
- Mapper文件的编写
在src/main/resources目录下创建mapper文件夹,用于存放Mapper文件。在该文件夹下创建一个名为HouseMapper.xml的文件,定义SQL语句。
<?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.example.mapper.HouseMapper'>
<!-- 添加民宿信息 -->
<insert id='addHouse' parameterType='com.example.entity.House'>
insert into house(name, address, price, image) values(#{name}, #{address}, #{price}, #{image})
</insert>
<!-- 修改民宿信息 -->
<update id='updateHouse' parameterType='com.example.entity.House'>
update house set name = #{name}, address = #{address}, price = #{price}, image = #{image} where id = #{id}
</update>
<!-- 根据ID查询民宿信息 -->
<select id='getHouseById' parameterType='int' resultType='com.example.entity.House'>
select * from house where id = #{id}
</select>
<!-- 查询所有民宿信息 -->
<select id='getAllHouses' resultType='com.example.entity.House'>
select * from house
</select>
<!-- 根据ID删除民宿信息 -->
<delete id='deleteHouse' parameterType='int'>
delete from house where id = #{id}
</delete>
</mapper>
- Service层的设计
在src/main/java目录下创建Service接口的包,例如com.example.service。在该包下创建一个名为HouseService的Java接口,定义对民宿信息进行操作的方法,如添加、修改、查询、删除等。
public interface HouseService {
// 添加民宿信息
public int addHouse(House house);
// 修改民宿信息
public int updateHouse(House house);
// 根据ID查询民宿信息
public House getHouseById(int id);
// 查询所有民宿信息
public List<House> getAllHouses();
// 根据ID删除民宿信息
public int deleteHouse(int id);
}
- Service层的实现
在src/main/java目录下创建Service接口实现类的包,例如com.example.service.impl。在该包下创建一个名为HouseServiceImpl的Java类,实现HouseService接口。
@Service
public class HouseServiceImpl implements HouseService {
@Autowired
private HouseDao houseDao;
// 添加民宿信息
public int addHouse(House house) {
return houseDao.addHouse(house);
}
// 修改民宿信息
public int updateHouse(House house) {
return houseDao.updateHouse(house);
}
// 根据ID查询民宿信息
public House getHouseById(int id) {
return houseDao.getHouseById(id);
}
// 查询所有民宿信息
public List<House> getAllHouses() {
return houseDao.getAllHouses();
}
// 根据ID删除民宿信息
public int deleteHouse(int id) {
return houseDao.deleteHouse(id);
}
}
- 控制器的设计
在src/main/java目录下创建控制器的包,例如com.example.controller。在该包下创建一个名为HouseController的Java类,用于处理与民宿信息相关的请求。
@Controller
@RequestMapping('/house')
public class HouseController {
@Autowired
private HouseService houseService;
// 跳转到添加民宿信息页面
@RequestMapping('/toAddHouse')
public String toAddHouse() {
return 'addHouse';
}
// 添加民宿信息
@RequestMapping('/addHouse')
public String addHouse(House house, Model model) {
int result = houseService.addHouse(house);
if (result > 0) {
model.addAttribute('msg', '添加民宿信息成功!');
} else {
model.addAttribute('msg', '添加民宿信息失败,请重试!');
}
return 'addHouse';
}
// 跳转到修改民宿信息页面
@RequestMapping('/toUpdateHouse')
public String toUpdateHouse(int id, Model model) {
House house = houseService.getHouseById(id);
model.addAttribute('house', house);
return 'updateHouse';
}
// 修改民宿信息
@RequestMapping('/updateHouse')
public String updateHouse(House house, Model model) {
int result = houseService.updateHouse(house);
if (result > 0) {
model.addAttribute('msg', '修改民宿信息成功!');
} else {
model.addAttribute('msg', '修改民宿信息失败,请重试!');
}
return 'updateHouse';
}
// 查询所有民宿信息
@RequestMapping('/getAllHouses')
public String getAllHouses(Model model) {
List<House> houses = houseService.getAllHouses();
model.addAttribute('houses', houses);
return 'houseList';
}
// 根据ID删除民宿信息
@RequestMapping('/deleteHouse')
public String deleteHouse(int id, Model model) {
int result = houseService.deleteHouse(id);
if (result > 0) {
model.addAttribute('msg', '删除民宿信息成功!');
} else {
model.addAttribute('msg', '删除民宿信息失败,请重试!');
}
return 'redirect:/house/getAllHouses';
}
}
- 视图层的设计
在src/main/webapp目录下创建视图的文件夹,例如WEB-INF/views。在该文件夹下创建各个页面的JSP文件,如addHouse.jsp、updateHouse.jsp和houseList.jsp等。
addHouse.jsp
<%@ page language='java' contentType='text/html; charset=UTF-8' pageEncoding='UTF-8'%>
<!DOCTYPE html>
<html>
<head>
<title>添加民宿信息</title>
</head>
<body>
<h1>添加民宿信息</h1>
<form action='${pageContext.request.contextPath}/house/addHouse' method='post'>
民宿名称:<input type='text' name='name'><br>
民宿地址:<input type='text' name='address'><br>
民宿价格:<input type='text' name='price'><br>
民宿图片:<input type='text' name='image'><br>
<input type='submit' value='添加'>
</form>
<p>${msg}</p>
</body>
</html>
updateHouse.jsp
<%@ page language='java' contentType='text/html; charset=UTF-8' pageEncoding='UTF-8'%>
<!DOCTYPE html>
<html>
<head>
<title>修改民宿信息</title>
</head>
<body>
<h1>修改民宿信息</h1>
<form action='${pageContext.request.contextPath}/house/updateHouse' method='post'>
民宿ID:<input type='text' name='id' value='${house.id}' readonly><br>
民宿名称:<input type='text' name='name' value='${house.name}'><br>
民宿地址:<input type='text' name='address' value='${house.address}'><br>
民宿价格:<input type='text' name='price' value='${house.price}'><br>
民宿图片:<input type='text' name='image' value='${house.image}'><br>
<input type='submit' value='修改'>
</form>
<p>${msg}</p>
</body>
</html>
houseList.jsp
<%@ page language='java' contentType='text/html; charset=UTF-8' pageEncoding='UTF-8'%>
<!DOCTYPE html>
<html>
<head>
<title>民宿列表</title>
</head>
<body>
<h1>民宿列表</h1>
<table border='1'>
<tr>
<th>民宿ID</th>
<th>民宿名称</th>
<th>民宿地址</th>
<th>民宿价格</th>
<th>民宿图片</th>
<th>操作</th>
</tr>
<c:forEach items='${houses}' var='house'>
<tr>
<td>${house.id}</td>
<td>${house.name}</td>
<td>${house.address}</td>
<td>${house.price}</td>
<td>${house.image}</td>
<td>
<a href='${pageContext.request.contextPath}/house/toUpdateHouse?id=${house.id}'>修改</a>
<a href='${pageContext.request.contextPath}/house/deleteHouse?id=${house.id}'>删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
- 配置文件的设计
在src/main/resources目录下创建配置文件的文件夹,例如config。在该文件夹下创建各个配置文件。
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.username=root
jdbc.password=123456
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>
<settings>
<setting name='logImpl' value='STDOUT_LOGGING'/>
</settings>
<typeAliases>
<typeAlias type='com.example.entity.House' alias='House'/>
</typeAliases>
<mappers>
<mapper resource='mapper/HouseMapper.xml'/>
</mappers>
</configuration>
spring-database.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:mvc='http://www.springframework.org/schema/mvc' 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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd'>
<!-- 加载属性文件 -->
<context:property-placeholder location='classpath:config/database.properties' />
<!-- 配置数据源 -->
<bean id='dataSource' class='com.alibaba.druid.pool.DruidDataSource' init-method='init' destroy-method='close'>
<property name='driverClassName' value='${jdbc.driver}' />
<property name='url' value='${jdbc.url}' />
<property name='username' value='${jdbc.username}' />
<property name='password' value='${jdbc.password}' />
<property name='maxActive' value='20' />
<property name='initialSize' value='1' />
<property name='maxWait' value='60000' />
<property name='minIdle' value='1' />
<property name='timeBetweenEvictionRunsMillis' value='60000' />
<property name='minEvictableIdleTimeMillis' value='300000' />
<property name='validationQuery' value='SELECT 1 FROM DUAL' />
<property name='testWhileIdle' value='true' />
<property name='testOnBorrow' value='false' />
<property name='testOnReturn' value='false' />
<property name='poolPreparedStatements' value='true' />
<property name='maxPoolPreparedStatementPerConnectionSize' value='20' />
<property name='filters' value='stat' />
</bean>
<!-- 配置MyBatis -->
<bean id='sqlSessionFactory' class='org.mybatis.spring.SqlSessionFactoryBean'>
<property name='dataSource' ref='dataSource' />
<property name='configLocation' value='classpath:config/mybatis-config.xml' />
</bean>
<!-- 配置事务管理器 -->
<bean id='transactionManager' class='org.springframework.jdbc.datasource.DataSourceTransactionManager'>
<property name='dataSource' ref='dataSource' />
</bean>
<!-- 开启注解支持 -->
<tx:annotation-driven />
<!-- 扫描组件包 -->
<context:component-scan base-package='com.example' />
<!-- 静态资源处理 -->
<mvc:resources mapping='/static/**' location='/static/' />
<mvc:default-servlet-handler />
<!-- 配置视图解析器 -->
<bean id='viewResolver' class='org.springframework.web.servlet.view.InternalResourceViewResolver'>
<property name='prefix' value='/WEB-INF/views/' />
<property name='suffix' value='.jsp' />
</bean>
</beans>
web.xml
<?xml version='1.0' encoding='UTF-8'?>
<web-app version='3.1' xmlns='http://xmlns.jcp.org/xml/ns/javaee'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd'>
<!-- 指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring-database.xml</param-value>
</context-param>
<!-- 配置DispatcherServlet -->
<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:config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置DispatcherServlet映射 -->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
至此,基于SSM架构的民宿管理模块实现完成。可以启动服务器,访问http://localhost:8080/house/getAllHouses查看民宿列表。
原文地址: https://www.cveoy.top/t/topic/nJWs 著作权归作者所有。请勿转载和采集!