- 本次课程目标
使用 SpringBoot+MyBatis+Thymeleaf 整合实现对数据库中的商品表的CRUD的操作。
|
- 实现步骤
2.1 准备商品表
DROP DATABASE goodsDB;
CREATE DATABASE goodsDB;
USE goodsdb;
CREATE TABLE goods(
id VARCHAR(10) PRIMARY KEY,
NAME VARCHAR(40) NOT NULL,
price DOUBLE,
image VARCHAR(40)
);
INSERT INTO goods VALUES('001','水果酸奶',38.8,'images/1.jpg');
INSERT INTO goods VALUES('002','水果奶酪',88.8,'images/3.jpg');
INSERT INTO goods VALUES('003','甜点',16.8,'images/4.jpg');
INSERT INTO goods VALUES('004','奶茶',28.8,'images/6.jpg');
SELECT * FROM goods;
|
2.2 创建SpringBoot 项目,项目名:spring-boot-mybatis-thymeleaf
2.3 打开pom.xml文件,加入连接池以及修改jdbc版本
<properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <scope>runtime</scope> </dependency>
<!--阿里连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
|
2.4 打开application.properties全局配置文件,设置相关属性配置
#服务器端口 server.port=8080 #------------jdbc的datasource配置--------------- spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///goodsDB?characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password= #---------------mybatis配置------------ mybatis.type-aliases-package=com.xz.pojo
#指定mapper.xml文件的路径 mybatis.mapper-locations=classpath:/mapper/*.xml #--------------thymeleaf配置-------- spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.servlet.content-type=text/html
|
2.5 编写实体类
@AllArgsConstructor @NoArgsConstructor @Data @ToString public class Goods { private String id; private String name; private double price; private String image; }
|
2.6 编写持久层mapper
2.6.1 在src/main/com/xz/mapper下创建GoodsMapper的接口
public interface GoodsMapper { List<Goods> selectAll(); }
|
2.6.2 在resources下创建mapper文件夹,然后在mapper下创建GoodsMapper.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.xz.mapper.GoodsMapper"> <select id="selectAll" resultType="Goods"> select * from goods </select> </mapper>
|
2.7 编写业务层service
2.7.1 编写service接口 GoodsService
public interface GoodsService { List<Goods> getGoodsAll(); }
|
2.7.2 编写service实现类 GoodsServiceImpl
@Service public class GoodsServiceImpl implements GoodsService { @Autowired GoodsMapper goodsMapper; @Override public List<Goods> getGoodsAll() { return goodsMapper.selectAll(); } }
|
2.8 编写控制器Controller
@Controller public class GoodsController { @Autowired GoodsService goodsService;
@RequestMapping("/getGoods") public String getGoods(Model model){ List<Goods> list=goodsService.getGoodsAll(); model.addAttribute("list",list); return "goodsList"; } }
|
2.9 编写Thymeleaf页面视图层
在src/mian/resources/templates下创建goodsList.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="1" width="400px" align="center" cellpadding="0" cellspacing="0"> <tr> <td>商品编号</td> <td>商品名称</td> <td>商品价格</td> <td>商品图片</td> </tr> <tr th:each="goods:${list}"> <td th:text="${goods.id}"></td> <td th:text="${goods.name}"></td> <td th:text="${goods.price}"></td> <td><img th:src="@{${goods.image}}" width="48px" height="48px"></td> </tr> </table> </body> </html>
|
2.10 启动类
@SpringBootApplication @MapperScan("com.xz.mapper") public class SpringBootMybatisThymeleafApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMybatisThymeleafApplication.class, args); } }
|
- 声明式事务
1.SpringBoot提供了非常方便的事务操作,
通过@Transactional注解就可以实现事务,非常方便快捷。
2.@Transactional可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性。
|
3.1常用配置
参 数 名 称
|
功 能 描 述
|
readOnly
|
该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。
|
propagation
|
该属性用于设置事务的传播行为。
|
isolation
|
该属性用于设置底层数据库的事务隔离级别。
|
|
3.2 业务层service (带上声明式事务控制)
@Service public class GoodsServiceImpl implements GoodsService { @Autowired GoodsMapper goodsMapper;
//查询方式,设置为只读事务 @Transactional(readOnly = true) @Override public List<Goods> getGoodsAll() { return goodsMapper.selectAll(); }
//增删改,开启事务设置 @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT) @Override public int delGoods(String id) { return goodsMapper.deleteById(id); } }
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)