Spring Boot整合+MyBatis+Thymeleaf

  1. 本次课程目标

使用 SpringBoot+MyBatis+Thymeleaf 整合实现对数据库中的商品表的CRUD的操作。

  1. 实现步骤

   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. 声明式事务

   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);
    }
}

posted @   Monotonous  阅读(338)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示