SpringBoot+JPA+Thymeleaf整合

pom.xml包里面添加jpa和thymeleaf的相关包引用

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.7.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.adou</groupId>
	<artifactId>spring-boot-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot-demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!-- web的模块 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 核心模块,包括自动配置支持、日志和YAML -->
		<!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> 
			</dependency> -->

		<!-- 测试模块,包括JUnit、Hamcrest、Mockito -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- 修改后实时生效 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- 数据库操作 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- thymeleaf -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<fork>true</fork>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.18.1</version>
				<configuration>
					<skipTests>true</skipTests>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

在application.properties中添加配置

###mysql数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.format_sql = true

##thymeleaf
spring.thymeleaf.cache=false

###日志
logging.path=/data/logs/tomcat/
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
其中propertiesspring.thymeleaf.cache=false是关闭thymeleaf的缓存,不然在开发过程中修改页面不会立刻生效需要重启,生产可配置为true。

在项目resources目录下会有两个文件夹:static目录用于放置网站的静态内容如css、js、图片;templates目录用于放置项目使用的页面模板。

启动类需要添加Servlet的支持

@EnableAutoConfiguration
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
public class SpringBootDemoApplication extends SpringBootServletInitializer{
	@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBootDemoApplication.class);
    }
	
	public static void main(String[] args) {
		SpringApplication.run(SpringBootDemoApplication.class, args);
	}
}

实体类映射数据库表

@Entity
public class User implements Serializable {
 
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private Long id;
	@Column(nullable = false, unique = true)
	private String userName;
	@Column(nullable = false)
	private String passWord;
	@Column(nullable = false)
    private int age;
	@Column(nullable = false, unique = true)
	private String email;
	@Column(nullable = true)
	private String nickName;
	@Column(nullable = true)
	private String regTime;

继承JpaRepository类

自动实现很多内置的方法,包括增删改查。
也可以根据方法名来自动生成相关sql
public interface UserRepository extends JpaRepository<User, Long> {
	User findById(long id);
	void deleteById(Long id);
	
	User findByUserName(String userName);

	User findByUserNameOrEmail(String username, String email);

}

业务层处理

service调用jpa实现相关的增删改查,实际项目中service层处理具体的业务代码。
@Service
public class UserServiceImpl implements UserService{
 
    @Autowired
    private UserRepository userRepository;
 
    @Override
    public List<User> getUserList() {
        return userRepository.findAll();
    }
 
    @Override
    public User findUserById(long id) {
        return userRepository.findById(id);
    }
 
    @Override
    public void save(User user) {
        userRepository.save(user);
    }
 
    @Override
    public void edit(User user) {
        userRepository.save(user);
    }
 
    @Override
    public void delete(long id) {
        userRepository.delete(id);
    }
}

Controller负责接收请求

处理完后将页面内容返回给前端。
@Controller
public class UserController {
 
    @Resource
    UserService userService;
 
 
    @RequestMapping("/")
    public String index() {
        return "redirect:/list";
    }
 
    @RequestMapping("/list")
    public String list(Model model) {
        List<User> users=userService.getUserList();
        model.addAttribute("users", users);
        return "user/list";
    }
 
    @RequestMapping("/toAdd")
    public String toAdd() {
        return "user/userAdd";
    }
 
    @RequestMapping("/add")
    public String add(User user) {
        userService.save(user);
        return "redirect:/list";
    }
 
    @RequestMapping("/toEdit")
    public String toEdit(Model model,Long id) {
        User user=userService.findUserById(id);
        model.addAttribute("user", user);
        return "user/userEdit";
    }
 
    @RequestMapping("/edit")
    public String edit(User user) {
        userService.edit(user);
        return "redirect:/list";
    }
 
 
    @RequestMapping("/delete")
    public String delete(Long id) {
        userService.delete(id);
        return "redirect:/list";
    }
}


处理完后将页面内容返回给前端。

return "user/userEdit"; 代表会直接去resources目录下找相关的文件。
return "redirect:/list"; 代表转发到对应的controller,这个示例就相当于删除内容之后自动调整到list请求,然后再输出到页面。

list页面内容

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>userList</title>
    <link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link>
</head>
<body class="container">
<br/>
<h1>用户列表</h1>
<br/><br/>
<div class="with:80%">
    <table class="table table-hover">
        <thead>
        <tr>
            <th>#</th>
            <th>User Name</th>
            <th>Password</th>
            <th>Age</th>
            <th>Edit</th>
            <th>Delete</th>
        </tr>
        </thead>
        <tbody>
        <tr  th:each="user : ${users}">
            <th scope="row" th:text="${user.id}">1</th>
            <td th:text="${user.userName}">neo</td>
            <td th:text="${user.passWord}">Otto</td>
            <td th:text="${user.age}">6</td>
            <td><a th:href="@{/toEdit(id=${user.id})}">edit</a></td>
            <td><a th:href="@{/delete(id=${user.id})}">delete</a></td>
        </tr>
        </tbody>
    </table>
</div>
<div class="form-group">
    <div class="col-sm-2 control-label">
        <a href="/toAdd" th:href="@{/toAdd}" class="btn btn-info">add</a>
    </div>
</div>

</body>
</html>
`<tr th:each="user : ${users}">`这里会从controler层model set的对象去获取相关的内容,th:each表示会循环遍历对象内容。

图示:
在这里插入图片描述

修改页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>user</title>
    <link rel="stylesheet" th:href="@{/css/bootstrap.css}"></link>
</head>
<body class="container">
<br/>
<h1>修改用户</h1>
<br/><br/>
<div class="with:80%">
    <form class="form-horizontal"   th:action="@{/edit}" th:object="${user}"  method="post">
        <input type="hidden" name="id" th:value="*{id}" />
        <div class="form-group">
            <label for="userName" class="col-sm-2 control-label">userName</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="userName"  id="userName" th:value="*{userName}" placeholder="userName"/>
            </div>
        </div>
        <div class="form-group">
            <label for="passWord" class="col-sm-2 control-label" >PassWord</label>
            <div class="col-sm-10">
                <input type="passWord" class="form-control" name="passWord" id="passWord"  th:value="*{passWord}" placeholder="PassWord"/>
            </div>
        </div>
        <div class="form-group">
            <label for="age" class="col-sm-2 control-label">age</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="age"  id="age" th:value="*{age}" placeholder="age"/>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <input type="submit" value="Submit" class="btn btn-info" />
                &nbsp; &nbsp; &nbsp;
                <a href="/toAdd" th:href="@{/list}" class="btn btn-info">Back</a>
            </div>

        </div>
    </form>
</div>
</body>
</html>

图示:
在这里插入图片描述

SpringBoot+JPA+Thymeleaf整合Demo

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spring Boot的医药管理系统是一个针对药店或药房管理药品、销售、库存及客户信息的综合应用程序。该系统利用了Java开发平台,特别是Spring Boot框架,以及MySQL作为后端数据库,以实现快速开发和易于部署的微服务架构。 技术栈主要包括: Spring Boot:用于简化新Spring应用的初始搭建以及开发过程,提供默认配置来快速启动项目。 Spring Data JPA:简化数据库操作,自动生成SQL语句,实现对MySQL数据库的高效访问。 Spring Security:用于实现系统的认证和授权,确保数据安全。 Thymeleaf:作为模板引擎,用于前端页面的动态渲染。 Maven/Gradle:用于项目的依赖管理和构建。 MySQL:作为后端数据库,存储所有的药品信息、交易记录和用户数据。 RESTful API:设计符合REST原则的接口,便于不同前端设备或系统与后端服务交互。 功能特点包括: 药品信息管理:允许管理员添加、修改、删除和查询药品信息,包括药品名称、生产厂家、价格、库存量等。 库存管理:自动跟踪药品库存变化,及时提醒库存不足,支持库存补充操作。 销售管理:处理药品的销售流程,记录每一笔销售的详细信息,包括销售时间、数量、顾客信息等。 客户管理:维护顾客信息数据库,记录顾客的购买历史和偏好。 报表统计:提供销售和库存相关的统计报表,辅助做出商业决策。 权限控制:根据用户角色分配不同的操作权限,保障系统的安全性。 总之,该医药管理系统通过整合现代Java开发的最佳实践,提供了一个健壮、可扩展且易于维护的解决方案,适用于毕业设计项目,能够展示学生在软件开发方面的综合能力。
### 回答1: 可以使用 Spring Boot + Vue + Webpack 来实现前后端分离的框架,具体代码如下:Spring Boot:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>Vue:<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>Webpack:const path = require('path'); const webpack = require('webpack');module.exports = { entry: './src/js/app.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery' }) ] }; ### 回答2: 要实现Spring Boot和Vue的前后端分离,可以使用以下具体的框架和代码: 1. 后端使用Spring Boot框架实现RESTful API: - 创建一个Spring Boot项目,添加所需的依赖(如Spring Web、Spring Data JPA等)。 - 在项目中创建一个Controller类,使用`@RestController`注解标记。 - 编写各个API接口对应的方法,并使用`@RequestMapping`等注解进行路由映射。 - 可以使用Spring Data JPA来简化数据库操作,创建实体类和对应的Repository接口。 - 通过`@CrossOrigin`注解允许跨域请求。 2. 前端使用Vue框架实现单页应用: - 创建一个Vue项目,可以使用Vue CLI工具进行脚手架搭建。 - 在项目中创建相应的组件,用于展示数据和处理用户交互。 - 使用Vue Router进行前端路由管理。 - 使用Axios库进行前后端数据交互,发送HTTP请求获取后端API返回的数据。 - 使用Vue的生命周期钩子函数和Vue的数据绑定特性来处理页面逻辑。 3. 连接前后端: - 在Vue的组件中使用Axios发送请求到后端API。 - 接收后端返回的数据,并在页面上进行展示。 - 在触发某些事件时,调用Axios发送请求到后端API来更新数据。 这样,就可以实现前后端分离的架构。后端通过Spring Boot框架提供RESTful API,前端使用Vue框架构建单页应用,并通过Axios库发送HTTP请求和后端进行数据交互。通过这种方式,前后端可以独立开发和部署,提高了开发效率和灵活性。 ### 回答3: 要实现Spring Boot和Vue的前后端分离,可以采用以下具体的框架和代码实现。 1. 后端框架:Spring Boot Spring Boot是一种用于构建独立的、基于Spring的Java应用程序的框架。它可以简化Spring应用程序的配置和部署,并提供了可集成的开发和测试工具。使用Spring Boot可以快速搭建后端API服务。 2. 前端框架:Vue.js Vue.js是一种用于构建用户界面的JavaScript框架,它可以实现响应式的数据绑定和组件化的开发。Vue.js使用简洁的语法和强大的生态系统,使得前端开发更加高效和可维护。 3. 框架整合 在实现前后端分离的过程中,可以通过Restful API进行前后端数据交互。后端使用Spring Boot提供API接口,前端使用Vue.js发起HTTP请求获取数据。 典型的框架代码结构如下: - 后端代码结构 - src/main/java - com.example.demo - controller - UserController.java:定义用户相关的API接口,处理HTTP请求。 - model - User.java:定义用户类,包含用户的属性和方法。 - service - UserService.java:定义用户相关的业务逻辑,如用户的增删改查。 - UserServiceImpl.java:实现UserService接口的具体逻辑。 - repository - UserRepository.java:定义用户数据的访问方式,如数据库操作。 - src/main/resources - application.properties:配置Spring Boot应用的相关属性。 - 前端代码结构 - src - components - UserList.vue:用户列表组件,展示后端返回的用户数据。 - views - User.vue:用户界面,包含用户的增删改查等操作。 - router - index.js:前端路由配置文件,定义前端路由和页面的映射关系。 - App.vue:根组件,包含整个前端应用的布局和共享逻辑。 - main.js:入口文件,初始化Vue应用。 以上是一个简单的示例,可以根据实际需求和复杂程度进行相应的调整。通过Spring Boot提供API接口,Vue.js发起HTTP请求获取数据,实现了前后端分离的开发模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值