ssm中mybatis处理数据库(mysql)与pojo属性中类型不一致(string转date)

本文介绍如何在MyBatis中解决数据库字段类型与Java属性类型不一致的问题,通过自定义TypeHandler实现类型转换,并详细讲解了配置步骤及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        一般在表设计的时候会考虑到数据库字段类型和java中属性一致的问题,但是也有可能会出现一些情况导致类型不一致的问题,比如:二次开发中需求更改等。此时数据库和java中的代码不能随便更改,所以考虑的思路是通过typeHandler作为中间体来把类型转换。

        当然,如果可以直接在获取字段后,直接通过simpleFormart来转换后,来处理数据就可以了。

        此方法是在获取不了字段的情况下进行的。

数据库中类型:varchar

java的pojo属性:Date


实现类型转换功能其实就是三步:

一.定义一个转换工具类进行自己需要类型的转换(比如在工具包中新建一个TypeHandlerToString类,继承 BaseTypeHandler<Date>或者实现 TypeHandler 接口)
二.注册刚定义的转换工具类,使它可以起作用
三.在UserMapper.xml文件中给出要用哪个TypeHandler


第一:添加一个工具类来定义转换的类型

a.在工具类包中定义一个工具类,如:TypeHandlerToString  继承 BaseTypeHandler<Date>,泛型选择要java的pojo需要的类型:Date

b.重写相应的四个方法(一个set,三个get---get方法只是参数不一样)

一个set方法

	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
		ps.setString(i,simpleDateFormat.format(parameter));
		
	}
三个get方法
	@Override
	public Date getNullableResult(ResultSet rs, String columnIndex) throws SQLException {
		String varchartime = rs.getString(columnIndex);
		if(varchartime != null){
			return new Date(Long.parseLong(varchartime));
		}
		else return null;
	}

	@Override
	public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
		String varchartime = rs.getString(columnIndex);
		if(varchartime != null){
			return new Date(Long.parseLong(varchartime));
		}
		else return null;
	}

	@Override
	public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		String varchartime = cs.getString(columnIndex);
		if(varchartime != null){
			return new Date(Long.parseLong(varchartime));
		}
		else return null;
	}
至此,自定义的转换工具类已经完成
注意:如果是实现接口的话,在重写的set方法中需要处理下parameter为null的情况


第二:在mybatis-config.xml文件中注册,添加typeHandler组件,包含了handler,jdbcType,javaType


注册可以两种方式:在实现类上添加注解 或 在mybatis-config.xml添加标签



  	
	
	    
	
其中

handler:自己定义的转换工具类来映射,如:cn.lung.flower.utils.TypeHandlerToString,这个属性是一定要有的

jdbcType:数据库中字段的类型,如:varchar

javaType:java中的属性,如:Date

此处需要注意:java的pojo类的date类型一定要是java.util.Date,如果是java.sql.Date的数据会出现错误。而在mybatis-config.xml文件中的类型mybatis-config.xml文件中的类型也可以是java.sql.Date,但是最好和pojo一致。

至此,类型的转换功能已经可以使用了

-----------------------------------------------------------------------------------------------
扩展一下:

在注册的时候,可以分为多种情况(拿注解举例子):

        只添加@MappedJdbcTypes注解,不添加@MappedTypes  :   个人测试,显示的数据和数据库中不一致

        只添加@MappedTypes注解,不添加@MappedJdbcTypes  :   个人测试,数据一致

        两种注解都不添加           :   个人测试,数据一致

在mybatis-config.xml文件中添加或者不添加 jdbcType,javaType 属性,和注解的情况是一样的

它内部是如何匹配到的在这就不详细解释了,这个链接有详细分析:http://blog.youkuaiyun.com/a1258531/article/details/51822875

-----------------------------------------------------------------------------------------------

第三:在UserMapper.xml文件的resultMap组件中添加 javaType+jdbcType或者 typeHandler ,可以匹配到之前定义的转换工具类

这一步会涉及到mybatis内部是如何找到转换类的(如果是string和data类型之间的转换,整个第三步都可以不要。如果是,如:String<---->varchar的话,需要下面的操作)
如果注册时    只添加@MappedTypes注解,不添加@MappedJdbcType   对应的UserMapper文件中resultMap就只添加javaType,

	
	    
	    
	
一句话,注册时添加了什么,就要在使用时指定什么,这样mybatis才能匹配上

或者是用typeHandler代替,直接指定实现类,如下:

	
	    
	    
	

所以最简单的做法是:

自定义的实现类继承BaseTypeHandler +mytis-config.xml文件组件只添加handler属性 + UserMapper.xml文件resultMap字段用typeHandler

测试一下:

写一个User类,定义一个类型为java.util.Date的属性date,重写toString(),加入SimpleDateFormat,指定格式

    SimpleDateFormat s = new SimpleDateFormat("yyyy/MM/dd/ HH:mm:ss");

   @Override
    public String toString() {
        return " date="  s.format(date) ;
    }
随便找一个地方调用user对象,打印出来,结果:

注意一个基本问题:格式设置时要和数据库的格式一样,比如:数据库精确到秒,则java端也要精确到秒,否则数据丢失



LG

一、 语言和环境 1. 实现语言:JAVA语言(JDK8)。 2. 环境要求: Idea/Tomcat/MySQL。 3. 使用技术:Spring MVC + Spring + MyBatis。 4. 功能要求:得使用第三方工具生成实体类、持久层代码,否则得分。 二、 实现功能 某高校食堂为方便管理采购的食材信息,需要随时统计筛查食材,以明确现有食材和需要采购食材信息,要求开发一套食材采购系统,实现对食材信息统一化管理,具体实现要求如下: 1. 首页上方显示为查询表单,包括:所属类别、食材名称两个查询关键字条件,下方显示所有已经录入的食材信息列表,默认要求按照采购时间降序排列,如图1所示。 (1) 按“采购时间”降序排列。 (2) 底部显示共为您查询到XX条符合条件的信息。 图1 所有已采购食材列表信息 2. 输入类别、名称关键字,点击“搜索”按钮可以根据这二个字段条件进行模糊搜索(多个条件按并且关系处理),将搜索的信息展示在列表中,如图2(单条件查询)、图3(多条件同时查询)所示。 图2 单条件查询食材信息 图3 多条件查询食材信息 3. 点击列表每行末尾的“删除”链接,将当前食材信息进行删除操作。 a) 删除前需要给予提示,如图4所示 b) 删除后需要刷新列表信息,此时列表中应包含已经删除的信息,如图5所示 图4 删除采购信息提示 图5 删除成功列表刷新 三、 数据库设计 1. 创建数据库(buyer_db)。 2. 创建数据表(tb_foods),结构如下。 字段名 说明 字段类型 长度 备注 id 编号 int 主键,自增,增量为1 name 名称 varchar 50 能为空 type 类别 varchar 50 能为空 price 价格 decimal 9,1 可以为空 buyer 采购人 varchar 20 能为空 buy_time 采购时间 datetime 20 添加时间默认当前时间 四、 具体要求及推荐实现步骤 SSM版本推荐实现步骤如下: (1) 创建数据库和数据表,添加测试数据(至少添加4条测试数据)。 (2) 创建Web工程并创建各个包,导入工程所需的jar文件。 (3) 添加相关SSM框架支持。 (4) 配置项目所需要的各种配置文件(mybatis配置文件、spring配置文件)。 (5) 创建实体类FoodsInfo。 (6) 创建MyBatis操作数据库所需的Mapper接口及其Xml映射数据库操作语句文件。 (7) 创建业务逻辑相应的接口及其实现类,实现相应的业务,并在类中加入对DAO/Mapper的引用和注入。 (8) 创建Controller控制器类,在Controller中添加对业务逻辑类的引用和注入,并配置springMVC 配置文件。 (9) 创建相关的操作页面,并使用CSS对页面进行美化。 (10) 实现页面的各项操作功能,并在相关地方进行验证,操作要人性化。 (11) 调试运行成功后导出相关的数据库文件并提交。 五、 评分标准 题目:食堂食材采购系统 使用SSM框架实现该项目评分标准(满分100): 5 数据库(以数据库脚本方式提交)(5分):创建并测试数据库脚本(3分);添加测试数据(2分) 5 正确创建和编写实体类,包含所有属性(3分),及getter/setter方法(2分) 20 SSM整合 Spring配置文件(5分):正确完成数据源DataSource相关配置(3分);正确完成Spring中所有Bean的扫描及开启依赖注入注解(2分) Mybatis相关配置(5分):正确完成spring配置文件中mybatis-config.xml、各个Mapper以及实体类的相关配置 (3分);正确完成SqlSessionFactory相关配置(2分) SpringMvc配置(5分):正确完成视图解析器的配置(3分);正确打开依赖注入相关配置(2分) Web.xml相关配置(5分):正确完成SpringMVC核心控制器及监听器配置(3分);正确完成Spring配置文件及 SpringMVC配置文件路径位置的配置(2分) 65 业务功能实现 查询功能持久层设计(12分):正确完成创建并编写Mapper.xml以及完成编写Select节点完成查询(3分);多条件模糊查询(3分);正确编写Mapper接口并定义查询方法(3分);数据排序(3分) 查询业务功能层设计(8分):正确创建业务逻辑层类(2分);正确实现Mapper持久层的对象注入(3分);正确编写业务层类完成Mapper接口查询方法调用并返回查询的结果集(3分) 查询功能控制器设计(13 分):正确定义控制器类,并定义属性完成业务层接口实现类的注入(2 分);在控制器类中定义查询方法用于处理查询请求,并完成正确注解(3分);正确定义接收查询表单传递的参数(3分);正确完成针对业务层查询方法的调用并获取到查询结果(3分);正确完成将查询结果存入到作用域并完成发(2分) 查询功能列表展示页面设计(12分):正确定义查询条件表单,包括表单action地址(2分);正确设计数据展示表格(2分);正确使用JSTL+EL表达式完成查询结果展示(2分);正确实现每个“删除”超链接,包括href地址正确(2分);正确实现点击“删除”链接进行确认提示(2分);底部展示结果数量(2分) 删除功能持久层设计(6分):正确完成持久层Mapper接口根据ID删除数据方法定义(3分);正确完成Mapper.xml中删除数据Sql语句编写(3分) 删除功能业务层设计(5分):正确定义业务逻辑层中删除方法(2分);正确调用Mapper实现删除方法(3分) 删除功能控制器设计(9分):正确完成控制器中删除方法定义及注解(1分);正确获取请求的编号(2分);正确完成业务层方法调用(3分);正确实现删除成功后页面自动刷新最新数据(3分) 5 总体编程技术(5分):编码命名规范(2分);程序正常运行,无异常(3分)
最新发布
06-17
<think>我们正在开发一个基于SSM框架的食堂食材采购系统。系统需要实现查询和删除功能,并且要满足特定的数据库设计和编码规范。根据引用内容,我们可以知道:1.开发环境:JDK1.8、IntelliJIDEA、Tomcat8.5、MySQL5.72.技术栈:SpringMVC+Spring+MyBatis(SSM框架)3.项目结构:采用三层架构(表示层:Controller;业务逻辑层:Service;数据访问层:Mapper)4.数据库设计:使用MySQL,需要设计数据库表,定义索引等。步骤:1.数据库设计2.创建Maven项目并配置SSM框架3.创建实体类(Entity)4.创建数据访问层(Mapper接口和Mapper.xml)5.创建业务逻辑层(Service接口和实现类)6.创建控制层(Controller)7.编写前端页面(使用JSP,并可能需要JavaScript、CSS等)由于用户特别提到需要实现查询和删除功能,我们将围绕这两个功能展开。一、数据库设计假设我们有一个食材采购表(procurement),包含以下字段:id:主键,自增长name:食材名称type:食材类型quantity:采购数量price:单价supplier:供应商purchase_date:采购日期status:状态(0:未入库,1:已入库)建表SQL语句示例:```sqlCREATETABLE`procurement`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(100)NOTNULL,`type`varchar(50)DEFAULTNULL,`quantity`int(11)NOTNULL,`price`decimal(10,2)NOTNULL,`supplier`varchar(100)DEFAULTNULL,`purchase_date`dateNOTNULL,`status`tinyint(1)DEFAULT'0',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;```二、创建Maven项目并配置SSM框架1.在IDEA中创建Maven项目,选择webapp模板。2.在pom.xml中添加SSM框架依赖、MySQL驱动、JSTL等依赖。3.配置web.xml,设置Spring和SpringMVC的DispatcherServlet。4.创建Spring配置文件(applicationContext.xml)和SpringMVC配置文件(spring-mvc.xml)。5.配置数据库连接池(如使用Spring内置的DriverManagerDataSource或DBCP2)和MyBatis(SqlSessionFactoryBean和MapperScannerConfigurer)。三、创建实体类在src/main/java下创建包(如com.example.entity),然后创建Procurement类。```javapackagecom.example.entity;importjava.util.Date;publicclassProcurement{privateIntegerid;privateStringname;privateStringtype;privateIntegerquantity;privateDoubleprice;privateStringsupplier;privateDatepurchaseDate;privateIntegerstatus;//getter和setter方法(省略)}```四、创建数据访问层(Mapper)1.创建Mapper接口(如com.example.mapper.ProcurementMapper)```javapackagecom.example.mapper;importcom.example.entity.Procurement;importjava.util.List;publicinterfaceProcurementMapper{//查询所有采购记录List<Procurement>selectAll();//根据id查询ProcurementselectById(Integerid);//根据id删除intdeleteById(Integerid);}```2.创建MapperXML文件(在resources/mapper目录下,如ProcurementMapper.xml)```xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.mapper.ProcurementMapper"><resultMapid="BaseResultMap"type="com.example.entity.Procurement"><idcolumn="id"property="id"jdbcType="INTEGER"/><resultcolumn="name"property="name"jdbcType="VARCHAR"/><resultcolumn="type"property="type"jdbcType="VARCHAR"/><resultcolumn="quantity"property="quantity"jdbcType="INTEGER"/><resultcolumn="price"property="price"jdbcType="DECIMAL"/><resultcolumn="supplier"property="supplier"jdbcType="VARCHAR"/><resultcolumn="purchase_date"property="purchaseDate"jdbcType="DATE"/><resultcolumn="status"property="status"jdbcType="TINYINT"/></resultMap><selectid="selectAll"resultMap="BaseResultMap">SELECT*FROMprocurement</select><selectid="selectById"parameterType="java.lang.Integer"resultMap="BaseResultMap">SELECT*FROMprocurementWHEREid=#{id}</select><deleteid="deleteById"parameterType="java.lang.Integer">DELETEFROMprocurementWHEREid=#{id}</delete></mapper>```五、创建业务逻辑层(Service)1.创建Service接口(如com.example.service.ProcurementService)```javapackagecom.example.service;importcom.example.entity.Procurement;importjava.util.List;publicinterfaceProcurementService{List<Procurement>getAllProcurements();ProcurementgetProcurementById(Integerid);intdeleteProcurementById(Integerid);}```2.创建Service实现类(如com.example.service.impl.ProcurementServiceImpl)```javapackagecom.example.service.impl;importcom.example.entity.Procurement;importcom.example.mapper.ProcurementMapper;importcom.example.service.ProcurementService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;@ServicepublicclassProcurementServiceImplimplementsProcurementService{@AutowiredprivateProcurementMapperprocurementMapper;@OverridepublicList<Procurement>getAllProcurements(){returnprocurementMapper.selectAll();}@OverridepublicProcurementgetProcurementById(Integerid){returnprocurementMapper.selectById(id);}@OverridepublicintdeleteProcurementById(Integerid){returnprocurementMapper.deleteById(id);}}```六、创建控制层(Controller)创建Controller类(如com.example.controller.ProcurementController)```javapackagecom.example.controller;importcom.example.entity.Procurement;importcom.example.service.ProcurementService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importjava.util.List;@Controller@RequestMapping("/procurement")publicclassProcurementController{@AutowiredprivateProcurementServiceprocurementService;//查询所有采购记录@RequestMapping("/list")publicStringlist(Modelmodel){List<Procurement>list=procurementService.getAllProcurements();model.addAttribute("list",list);return"procurement_list";//对应JSP页面}//删除采购记录@RequestMapping(value="/delete/{id}",method=RequestMethod.GET)publicStringdelete(@PathVariable("id")Integerid){procurementService.deleteProcurementById(id);return"redirect:/procurement/list";//删除后重定向到列表页}}```七、编写前端页面(JSP)在webapp/WEB-INF/views目录下创建procurement_list.jsp(需要配置视图解析器,如prefix="/WEB-INF/views/",suffix=".jsp")页面中显示表格,并包含删除链接。```jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%><html><head><title>食材采购列表</title></head><body><tableborder="1"><tr><th>ID</th><th>食材名称</th><th>类型</th><th>数量</th><th>单价</th><th>供应商</th><th>采购日期</th><th>状态</th><th>操作</th></tr><c:forEachitems="${list}"var="item"><tr><td>${item.id}</td><td>${item.name}</td><td>${item.type}</td><td>${item.quantity}</td><td>${item.price}</td><td>${item.supplier}</td><td>${item.purchaseDate}</td><td>${item.status==0?'未入库':'已入库'}</td><td><ahref="/procurement/delete/${item.id}">删除</a></td></tr></c:forEach></table></body></html>```注意:以上代码仅为示例,实际开发中需要处理事务、异常、分页、权限控制等。八、配置文件的简要说明1.applicationContext.xml:配置数据源、事务管理、MyBatis的SqlSessionFactoryBean以及Mapper扫描。2.spring-mvc.xml:配置组件扫描(Controller)、视图解析器、注解驱动等。由于篇幅限制,这里展示所有配置文件,但可以参考引用[2]和[3]中的配置。至此,我们已经完成了查询和删除功能的基本实现。在实际项目中,可能还需要添加添加、修改、条件查询等功能,以及更完善的错误处理和用户交互。相关问题:1.在SSM框架中,如何配置事务管理以确保删除操作的安全性?2.如何实现食材采购系统的分页查询功能?3.食堂食材采购系统中如何设计供应商管理模块?</think>### 食堂食材采购系统开发指南(SSM框架实现) #### 一、环境准备 1. **开发工具**: - IDEA 2020+(或 Eclipse) - Tomcat 8.5+ - MySQL 5.7+ - JDK 1.8 - Maven 3.6+ 2. **项目初始化**: ```xml <!-- pom.xml 核心依赖 --> <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> ``` #### 二、数据库设计(MySQL) ```sql CREATE TABLE `ingredient` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '食材ID', `name` VARCHAR(50) NOT NULL COMMENT '食材名称', `type` VARCHAR(20) DEFAULT NULL COMMENT '食材类型', `supplier` VARCHAR(100) NOT NULL COMMENT '供应商', `quantity` DECIMAL(10,2) NOT NULL COMMENT '采购数量', `unit` VARCHAR(10) DEFAULT 'kg' COMMENT '计量单位', `purchase_date` DATE NOT NULL COMMENT '采购日期', `expiry_date` DATE DEFAULT NULL COMMENT '保质期', PRIMARY KEY (`id`), INDEX `idx_supplier` (`supplier`), INDEX `idx_type` (`type`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; ``` #### 三、实体类创建(POJO) ```java // Ingredient.java public class Ingredient { private Integer id; private String name; private String type; private String supplier; private Double quantity; private String unit; private Date purchaseDate; private Date expiryDate; // Getter & Setter 方法 // 使用SimpleDateFormat换日期格式 public String getFormattedPurchaseDate() { return new SimpleDateFormat("yyyy-MM-dd").format(purchaseDate); } } ``` #### 四、持久层实现(MyBatis) 1. **Mapper接口**: ```java @Mapper public interface IngredientMapper { // 条件查询 List<Ingredient> selectByCondition(@Param("name") String name, @Param("supplier") String supplier); // 按ID删除 int deleteById(@Param("id") Integer id); } ``` 2. **Mapper XML**: ```xml <!-- IngredientMapper.xml --> <select id="selectByCondition" resultType="Ingredient"> SELECT * FROM ingredient <where> <if test="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="supplier != null and supplier != ''"> AND supplier = #{supplier} </if> </where> </select> <delete id="deleteById"> DELETE FROM ingredient WHERE id = #{id} </delete> ``` #### 五、业务层实现(Spring) ```java @Service public class IngredientServiceImpl implements IngredientService { @Autowired private IngredientMapper ingredientMapper; @Transactional @Override public List<Ingredient> searchIngredients(String name, String supplier) { return ingredientMapper.selectByCondition(name, supplier); } @Transactional @Override public int deleteIngredient(Integer id) { return ingredientMapper.deleteById(id); } } ``` #### 六、控制层实现(Spring MVC) ```java @Controller @RequestMapping("/procurement") public class ProcurementController { @Autowired private IngredientService ingredientService; // 查询功能 @GetMapping("/list") public String list( @RequestParam(value = "name", required = false) String name, @RequestParam(value = "supplier", required = false) String supplier, Model model) { List<Ingredient> list = ingredientService.searchIngredients(name, supplier); model.addAttribute("ingredientList", list); return "procurement/list"; } // 删除功能 @PostMapping("/delete") public String delete(@RequestParam("id") Integer id) { ingredientService.deleteIngredient(id); return "redirect:/procurement/list"; } } ``` #### 七、页面功能开发(JSP) ```jsp <!-- list.jsp --> <table class="table"> <tr> <th>食材名称</th> <th>供应商</th> <th>采购日期</th> <th>操作</th> </tr> <c:forEach items="${ingredientList}" var="item"> <tr> <td>${item.name}</td> <td>${item.supplier}</td> <td>${item.formattedPurchaseDate}</td> <td> <form action="/procurement/delete" method="post"> <input type="hidden" name="id" value="${item.id}"> <button type="submit">删除</button> </form> </td> </tr> </c:forEach> </table> <!-- 查询表单 --> <form action="/procurement/list" method="get"> <input type="text" name="name" placeholder="食材名称"> <input type="text" name="supplier" placeholder="供应商"> <button type="submit">查询</button> </form> ``` #### 八、关键配置 1. **Spring MVC配置** (`spring-mvc.xml`): ```xml <context:component-scan base-package="com.yourpackage.controller"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> ``` 2. **MyBatis配置** (`mybatis-config.xml`): ```xml <configuration> <typeAliases> <typeAlias type="com.yourpackage.entity.Ingredient"/> </typeAliases> </configuration> ``` 3. **Spring整合配置** (`applicationContext.xml`): ```xml <!-- 数据源配置 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/canteen_db?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!-- MyBatis-Spring整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yourpackage.mapper"/> </bean> ``` ### 开发注意事项 1. **事务管理**:业务层方法添加`@Transactional`注解 2. **输入验证**:前端JS验证+后端Spring验证器 3. **异常处理**:使用`@ControllerAdvice`全局异常处理 4. **安全规范**: - 删除操作使用POST提交 - SQL防注入(MyBatis参数化查询) - XSS防护(JSTL自动义) ### 系统效果预览 - **查询功能**:支持按食材名称(模糊查询)和供应商筛选 - **删除功能**:通过ID精准删除采购记录 - **响应式布局**:适配同设备屏幕 > 参考实现:食堂管理系统通常采用三层架构设计,包括表示层(Controller)、业务逻辑层(Service)和数据访问层(Mapper)[^2]。SSM框架通过Spring整合MyBatis和Spring MVC,提供高效的数据访问和Web处理能力[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LUNG108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值