当前位置: 首页 > news >正文

电商模板免费下载上海seo优化外包公司

电商模板免费下载,上海seo优化外包公司,微网站模板怎么做,广州百度推广优化排名三分钟#xff0c;迎接一个更加高效和简便的开发体验。 在快节奏的软件开发领域#xff0c;每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗#xff1f;这篇文章将是你的首选攻略。在这里#xff0c;我们将向你展示如何将 Spri… 三分钟迎接一个更加高效和简便的开发体验。 在快节奏的软件开发领域每一个简化工作流程的机会都不容错过。想要一个无需繁琐配置、能够迅速启动的数据持久化方案吗这篇文章将是你的首选攻略。在这里我们将向你展示如何将 Spring Boot 的便捷性、JPA 的强大查询能力和 SQLite 的轻量级特性结合在一起实现快速而又优雅的数据管理。 为什么选择 SQLite SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎它提供了功能齐全的数据库解决方案。对于大多数的应用SQLite 都可以满足。使用 SQLite 可以零配置启动对于小型应用或者快速原型设计是一个非常大的优势。 使用 SQLite 具有下面几个优点 轻量级SQLite很小巧不需要独立服务器便于集成到应用中。零配置启用 SQLite 无需复杂配置只需指定一个文件路径存放 DB 文件简化了数据库的设置流程。便于移植数据库是单一文件方便备份和在不同环境间迁移。跨平台SQLite 支持各种操作系统容易实现应用的跨平台运行。性能良好对于小型应用SQLite 提供足够的读写性能。遵循ACIDSQLite事务符合ACID原则数据操作可靠。社区支持虽然简单但拥有强大的社区和广泛的文档资源。 之前写过一篇 SQLite 入门教程 (https://www.wdbyte.com/db/sqlite/)感情的同学可以参考。 为什么 选择 JPA Spring Data JPA 是Spring Data项目的一部分旨在简化基于JPAJava Persistence API的数据访问层Repository层的实现。JPA是一种 ORM对象关系映射规范它允许开发者以面向对象的方式来操作数据库 通常应用程序实现数据访问层可能非常麻烦必须编写太多的样板代码才能实现简单的查询更不用说分页等其他操作而 Spring Data JPA 可以让开发者非常容易地实现对数据库的各种操作显著减少实际需要的工作量。 详细介绍 JPA 并不是本文目的关于 JPA 的更多内容可以访问 Spring Data JPA 官网https://spring.io/projects/spring-data-jpa。Spring Boot 使用 Spring Data JPA 创建 Spring Boot 项目 用于后续演示首先创建一个简单的 Spring Boot 项目。你可以自由创建或者使用 Spring 官网提供的快速创建工具https://start.spring.io/ 注意文章示例项目使用 Java 21 进行演示。 为了方便开发创建一个基础的 Spring Boot 项目后添加以下依赖。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId /dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId /dependency !-- 从 Hibernate 6 开始支持 SQLite 方言。-- !-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-community-dialects -- dependencygroupIdorg.hibernate.orm/groupIdartifactIdhibernate-community-dialects/artifactIdversion6.4.3.Final/version /dependency !-- sqlite jdbc 驱动 -- dependencygroupIdorg.xerial/groupIdartifactIdsqlite-jdbc/artifactIdversion3.45.1.0/version /dependency !-- Lombok 简化 get set tostring log .. -- dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional /dependency !-- apache java 通用工具库 -- dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.13.0/version /dependency !-- 编码通用工具库 -- dependencygroupIdcommons-codec/groupIdartifactIdcommons-codec/artifactIdversion1.16.0/version /dependency配置 SQLite JPA 在 Spring Boot 中对 SQLite 的配置非常简单只需要指定一个位置存放 SQLite 数据库文件。SQLite 无服务端因此可以直接启动。 spring.datasource.urljdbc:sqlite:springboot-sqlite-jpa.db spring.datasource.driver-class-nameorg.sqlite.JDBC # JPA Properties spring.jpa.database-platformorg.hibernate.community.dialect.SQLiteDialect # create 每次都重新创建表update表若存在则不重建 spring.jpa.hibernate.ddl-autoupdate spring.jpa.show-sqltrue配置实体映射 在使用 JPA 开发时就是使用 jakarta.persistence 包中的注解配置 Java 实体类和表的映射关系比如使用 Table 指定表名使用 Column 配置字段信息。 import java.time.LocalDateTime; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; import lombok.ToString;Entity Getter Setter ToString Table(name website_user) public class WebsiteUser {IdGeneratedValue(strategy GenerationType.IDENTITY)private Integer id;Column(name username, nullable false, unique true, length 64)private String username;Column(name password, nullable false, length 255)private String password;Column(name salt, nullable false, length 16)private String salt;Column(name status, nullable false, length 16, columnDefinition VARCHAR(16) DEFAULT active)private String status;Column(name created_at, nullable false, columnDefinition TIMESTAMP DEFAULT CURRENT_TIMESTAMP)private LocalDateTime createdAt;Column(name updated_at, nullable false, columnDefinition TIMESTAMP DEFAULT CURRENT_TIMESTAMP)private LocalDateTime updatedAt; }编写 JPA 查询方法 Spring Data JPA 提供了多种便捷的方法来实现对数据库的查询操作使得能够以非常简洁的方式编写对数据库的访问和查询逻辑。比如 Spring Data JPA 允许通过在接口中定义遵循一定命名方法的方式来创建数据库查询。如findByName 将生成一个根据 name 查询指定实体的 SQL。 代码示例 Repository public interface WebsiteUserRepository extends CrudRepositoryWebsiteUser, Long {/*** 根据 username 查询数据* param name* return*/WebsiteUser findByUsername(String name); }代码示例中继承的 CrudRepository 接口中包含了常见的 CURD 操作方法。自定义的 findByUsername 方法可以根据 WebsiteUser 中的 Username 进行查询。 编写 Controller 编写三个 API 用来演示 Spring Boot 结合 SQLite 以及 JPA 是否成功。 初始化方法 init() 映射到 /sqlite/init 的 GET请求。 创建了10个 WebsiteUser 实体为每个用户生成随机的用户名和盐值并用MD5加密其密码“123456” 盐。 用户信息包括用户名、加盐后的密码、创建和更新的时间戳以及用户状态。 用户信息被保存到数据库中并记录日志。 查找用户方法 findByUsername(String username) 映射到 /sqlite/find 的GET请求。通过用户名查询用户。如果找到返回用户的字符串表示否则返回 null。 登录方法 findByUsername(String username, String password) 映射到 /sqlite/login 的GET请求。验证传入的用户名和密码。首先通过用户名查询用户然后将传入的密码与盐值结合并与数据库中存储的加盐密码进行MD5加密比对。如果密码匹配则认证成功返回 “login succeeded”否则返回 “login failed”。 代码示例 import java.time.LocalDateTime; import com.wdbyte.springsqlite.model.WebsiteUser; import com.wdbyte.springsqlite.repository.WebsiteUserRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /*** author https://www.wdbyte.com*/ Slf4j RestController public class SqliteController {Autowiredprivate WebsiteUserRepository userRepository;GetMapping(/sqlite/init)public String init() {for (int i 0; i 10; i) {WebsiteUser websiteUser new WebsiteUser();// 随机4个字母websiteUser.setUsername(RandomStringUtils.randomAlphabetic(4));// 随机16个字符用于密码加盐加密websiteUser.setSalt(RandomStringUtils.randomAlphanumeric(16));String password 123456;// 密码存储 md5(密码盐)password password websiteUser.getSalt();websiteUser.setPassword(DigestUtils.md5Hex(password));websiteUser.setCreatedAt(LocalDateTime.now());websiteUser.setUpdatedAt(LocalDateTime.now());websiteUser.setStatus(active);WebsiteUser saved userRepository.save(websiteUser);log.info(init user {}, saved.getUsername());}return init success;}GetMapping(/sqlite/find)public String findByUsername(String username) {WebsiteUser websiteUser userRepository.findByUsername(username);if (websiteUser null) {return null;}return websiteUser.toString();}GetMapping(/sqlite/login)public String findByUsername(String username, String password) {WebsiteUser websiteUser userRepository.findByUsername(username);if (websiteUser null) {return login failed;}password password websiteUser.getSalt();if (StringUtils.equals(DigestUtils.md5Hex(password), websiteUser.getPassword())) {return login succeeded;} else {return login failed;}} }至此项目编写完成完整目录结构如下 ├── pom.xml └── src├── main├── java│ └── com│ └── wdbyte│ └── springsqlite│ ├── SpringBootSqliteApp.java│ ├── controller│ │ └── SqliteController.java│ ├── model│ │ └── WebsiteUser.java│ └── repository│ └── WebsiteUserRepository.java└── resources├── application.properties├── static└── templates启动测试 Spring Boot 启动时由于库表不存在自动创建库表 Hibernate: create table website_user (id integer, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP not null, password varchar(255) not null, salt varchar(16) not null, status VARCHAR(16) DEFAULT active not null, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP not null, username varchar(64) not null unique, primary key (id)) Hibernate: alter table website_user drop constraint UK_61p1pfkd4ht22uhlib72oj301 2024-02-27T20:00:21.27908:00 INFO 70956 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit default 2024-02-27T20:00:21.57808:00 WARN 70956 --- [main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2024-02-27T20:00:21.93108:00 INFO 70956 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path 2024-02-27T20:00:21.93808:00 INFO 70956 --- [main] c.w.springsqlite.SpringBootSqliteApp : Started SpringBootSqliteApp in 3.944 seconds (process running for 5.061)请求初始化接口 $ curl http://127.0.0.1:8080/sqlite/init init success可以看到输出日志成功写入了 10条数据且输出了 username 值。 2024-02-27T20:01:04.12008:00 ...SqliteController : init user HUyz Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.12308:00 ...SqliteController : init user ifQU Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.12608:00 ...SqliteController : init user GBPK Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.12908:00 ...SqliteController : init user rytE Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.13208:00 ...SqliteController : init user iATH Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.13408:00 ...SqliteController : init user ZQRW Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.13708:00 ...SqliteController : init user cIPM Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.14008:00 ...SqliteController : init user MemS Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.14308:00 ...SqliteController : init user GEeX Hibernate: insert into website_user (created_at,password,salt,status,updated_at,username) values (?,?,?,?,?,?) Hibernate: select last_insert_rowid() 2024-02-27T20:01:04.14608:00 ...SqliteController : init user ZQrT请求查询用户接口 $ curl http://127.0.0.1:8080/sqlite/find\?username\ZQrT WebsiteUser(id10, usernameZQrT, password538ea3b5fbacd1f9354a1f367b36135a, saltRxaivBHlyJCxtOEv, statusactive, createdAt2024-02-27T20:01:04.144, updatedAt2024-02-27T20:01:04.144)查询成功回显了查询到的用户信息。 请求登录接口 在初始化数据时密码统一配置为 123456下面的测试可以看到使用正确的密码可以通过校验。 $ curl http://127.0.0.1:8080/sqlite/login\?username\ZQrT\password\123456 login succeeded $ curl http://127.0.0.1:8080/sqlite/login\?username\ZQrT\password\12345 login failedSQLite 3 数据审查 使用 Sqlite3 命令行工具查看 SQLite 数据库内容。 $ ./sqlite3 springboot-sqlite-jpa.db SQLite version 3.42.0 2023-05-16 12:36:15 Enter .help for usage hints. sqlite .tables website_usersqlite .mode table sqlite select * from website_user; -------------------------------------------------------------------------------------------------------- | id | created_at | password | salt | status | updated_at | username | -------------------------------------------------------------------------------------------------------- | 1 | 1709035264074 | 4b2b68c0df77669540fc0a487d753400 | 1njFP8ykWmlu01Z8 | active | 1709035264074 | HUyz | | 2 | 1709035264120 | 7e6444d57f753cfa6c1592a17e68e66e | 9X3El5jQaMhrROSf | active | 1709035264120 | ifQU | | 3 | 1709035264124 | 1d24c4ddb351eb56f665adb13708f981 | Jn9IrT6MYqVqzpu8 | active | 1709035264124 | GBPK | | 4 | 1709035264126 | 960747cc48aeed71e8ff714deae42e87 | wq8pb1G9pIalGHwP | active | 1709035264126 | rytE | | 5 | 1709035264129 | cf1037b95a997a1b1b9d9aa598b9f96b | An0hwV2n9cN4wpOy | active | 1709035264129 | iATH | | 6 | 1709035264132 | b68d42108e5046bd25b74cda947e0ffc | EozfDAkpn5Yx4yin | active | 1709035264132 | ZQRW | | 7 | 1709035264134 | 78d4841af9a12603204f077b9bf30dcc | 2FRNQ2zWksJHOyX9 | active | 1709035264135 | cIPM | | 8 | 1709035264137 | 60b8051ca3379c569a3fb41ed5ff05aa | KpT3IGwWmhlWIUq7 | active | 1709035264137 | MemS | | 9 | 1709035264140 | 0ca0a2dce442315c11f5488c0127f905 | RhGOYnNEMYbnWoat | active | 1709035264140 | GEeX | | 10 | 1709035264144 | 538ea3b5fbacd1f9354a1f367b36135a | RxaivBHlyJCxtOEv | active | 1709035264144 | ZQrT | -------------------------------------------------------------------------------------------------------- sqlite 一如既往文章中代码存放在 Github.com/niumoo/javaNotes. 参考 https://docs.spring.io/spring-data/jpa/reference/jpa.html 本文 Github.com/niumoo/JavaNotes仓库已经收录。 本文原发于网站Spring Boot 整合 SQLite 和 JPA 本文原发于公众号三分钟数据持久化Spring Boot, JPA 与 SQLite 的完美融合
http://www.pierceye.com/news/666164/

相关文章:

  • 网站建站程序一站式网站建设服务
  • 滨州内做网站系统的公司购物网站开发用什么软件
  • 网站建设静态部分报告总结在合肥哪里学网站建设
  • 建站行业现状网易与暴雪合作
  • 网站中添加百度地图购物网站产品做促销能赚钱吗
  • 金融公司 网站开发怎么样建网站卖东西
  • 网站导航栏垂直如何提高你的网站的粘性
  • 直播网站开发接入视频中国建筑招聘官网2022
  • 大连专业企业建站找哪家wordpress 保护wp-login.php
  • 微网站建设哪家便宜想要找个网站做环评公示
  • 建设银行网银网站激活个人简历模板电子版可填写
  • 肃州区建设局网站宁夏百度seo
  • 关于做电影的网站设计西安网站建设制作 熊掌号
  • idc网站建设怎么自己做一个网页链接
  • 网站开发安全模块方案个人网站搭建软件
  • 重庆建设招标造价信息网站个人网站建设与维护
  • 网站备案用户名忘了怎么办嘉兴做外贸网站的公司
  • 1688网站的特点网站制作器手机版下载
  • 兖州网站开发做一个中英文网站多少钱
  • wordpress怎么做网盘站好看的页面图片
  • 建设网站深圳罗湖安徽合肥做网站
  • 一级a做爰片免费网站下载网站快慢由什么决定
  • 网页设计与网站建设 郑州大学网络购物网站备案
  • 美观网站建设哪家好优化大师最新版下载
  • 外贸品牌网站制作wordpress 微信主题
  • 旅游网站开发需求分析网站的根目录的路径
  • easyUI网站开发docker wordpress mysql
  • dede手机网站模板下载黄冈做网站
  • 诸城网站建设葛小燕现在搜索引擎哪个比百度好用
  • 嘉兴做微网站多少钱注册网页需要多少钱