国际外贸网站推广二维码制作生成器

bicheng/2026/1/22 16:32:28/文章来源:
国际外贸网站推广,二维码制作生成器,域名有了怎么建网站,好的网站建设平台MyBatis 支持一对一#xff0c;一对多#xff0c;多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…MyBatis 支持一对一一对多多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表呈现的是平级关系 每个Article对应一个ArticleDetail: 实体类代码: Data public class ArticleDetail { private Integer id; private Integer articleId; private String content; }Data public class Article { private Integer id; private Integer userId; private String title; private String summary; private Integer readCount; private LocalDateTime createTime; private LocalDateTime updateTime; //每个Article都包含一个ArticleDetail private ArticleDetail articleDetail; }1.1.1 创建ArticleOneToOneMapper查询接口: public interface ArticleOneToOneMapper {//查询文章详情表/**该方法名为queryContent,传入参数id执行SQL,并返回一个ArticleDetail对象*/Select(select id,article_id,content from article_detailwhere article_id #{articleId})Results({Result(id true, column id, property id),Result(column article_id, property articleId),Result(column content, property content)})ArticleDetail queryContent(Integer articleId);//查询文章属性文章详情Select(select id,user_id,title,summary,read_count,create_time,update_timefrom articlewhere id #{id})Results({Result(id true, column id, property id),Result(column user_id, property userId),Result(column read_count, property readCount),Result(column create_time, property createTime),Result(column update_time, property updateTime),/**根据One注解调用指定的SQL方法queryContent,*调用queryContent需要一个参数articleId, 由columnid提供*queryContent执行完毕后返回一个ArticleDetail类型的对象*该对象注入到propertyarticleDetail这个字段中*/Result(column id, property articleDetail,one One(select com.sunsplanter.mapper.ArticleOneToOneMapper.queryContent,fetchType FetchType.LAZY))})Article queryAllArticle(Integer id);} }1.1.2 单元测试: SpringBootTest public class OneToOneTest {Autowired private ArticleOneToOneMapper articleOneToOneMapper;Test void testOne() { Article article articleOneToOneMapper.queryAllArticle(1); System.out.println(article article);} }1.1.3 执行结果 第一步先查询第一层Article 第二步查询嵌套的ArticleDetail 1.2 Many一对多 每个Article 对应多个 comment : 1.2.1 编写实体类: Data public class Comment { private Integer id; private Integer articleId; private String content; }Data public class Article { private Integer id; private Integer userId; private String title; private String summary; private Integer readCount; private LocalDateTime createTime; private LocalDateTime updateTime; //一个文章对应多个评论,多个评论用类型为comment 的对象装载 private ListCommentPO comments; }1.2.2 ArticleOneToManyMapper接口 public interface ArticleOneToManyMapper {Select(select id,article_id,content from commentwhere article_id #{articleId})Results(idCommentMapper,value {Result(id true, column id, property id),Result(column article_id, property articleId),Result(column content, property content)})ListComment queryComments(Integer articleId);Select(select id, user_id,title,summary,read_count,create_time,update_timefrom articlewhere id #{id})Results(idArticleBaseMapper,value{Result(id true, column id, property id),Result(column user_id, property userId),Result(column read_count, property readCount),Result(column create_time, property createTime),Result(column update_time, property updateTime),Result(column id, property comments,many Many(select com.mapper.ArticleOneToManyMapper.queryComments, fetchType FetchType.LAZY))})ArticleEntity queryArticleAndComments(Integer id); }1.2.3 单元测试 SpringBootTest public class OneToManyTest {Autowired private ArticleOneToManyMapper articleOneToManyMapper;Test void testOnetoMany() {Article article articleOneToManyMapper.queryArticleAndComments(1);System.out.println(ArticleEntity article);} }2 事务 事务分为全局事务与本地事务 本地事务是特定于资源的例如与 JDBC 连接关联的事务。本地事务更容易使用但有一个显著的缺点:它们不能跨多个事务资源工作。比如在方法中处理连接多个数据库的事务本地事务是无效的。 Spring 解决了全局和本地事务的缺点。它允许应用程序开发人员在任何环境中使用一致的编程模型。只需编写一次代码就可以从不同环境中的不同事务管理策略中获益。 Spring 框架同时提供声明式和编程式事务管理。 推荐声明式事务管理。 Spring Framework 的声明式事务管理通过 **Spring AOP 的环绕通知TransactionInterceptor**实现. 事务控制的属性 Propagation : 传播行为。代码可以继续在现有事务中运行(常见情况)也可以暂停现有事务并创建新事务 Isolation: 隔离级别。此事务与其他事务的工作隔离的程度。例如这个事务能看到其他事务未提交的写吗? Timeout 超时时间:该事务在超时和被底层事务基础结构自动回滚之前运行的时间。 Read-only 只读状态:当代码读取但不修改数据时可以使用只读事务。 声明式事务的方式 a. XML 配置文件全局配置 b. Transactional 注解驱动 和代码一起提供比较直观。和代码的耦合比较高。【建议只使用Transactional 注释具体类(以及具体类的方法)而不是注释接口。当然可以将Transactional 注解放在接口(或接口方法)上但这只有在使用基于接口的代理时才能正常工作】 Transaction注解的生效范围 Transactional注解 仅生效于public方法. 在受保护的、私有的或包可见的方法上使用该注解虽然不会引发错误但事务不生效。 如果需要受保护的、私有的方法具有事务考虑使用 AspectJ。而不是基于代理的机制。 2.1 准备事务的演示环境 目标: 两张表:文章表和文章详情表, 使用事务, 仅当两表都被插入成功时才提交事务. 2.1.1 Spring Initializr 新建一个模块, 3.0.3版本,依赖如下: 2.1.2 建表及实体类 本次只是简单演示插入事务, 无需一对一关系, 故Article中不嵌套ArticleDetail对象 import lombok.Data;import java.time.LocalDateTime;Data public class Article {private Integer id;private Integer userId;private String title;private String summary;private Integer readCount;private LocalDateTime createTime;private LocalDateTime updateTime; }import lombok.Data;Data public class ArticleDetail {private Integer id;private Integer articleId;private String content; }2.1.3 创建ArticleMapper接口(Option注解) import com.sunsplanter.trans.pojo.Article; import com.sunsplanter.trans.pojo.ArticleDetail; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options;public interface ArticleMapper {//添加文章的属性 Article/**调用 insertArticle 方法并传入一个 Article 对象时MyBatis 会执行插入操作。*插入完成后如果表有自动生成的主键该主键的值会被设置回传入的 Article 对象的 id 属性中。*/Insert(insert intoarticle(user_id,title,summary,read_count,create_time,update_time) \values(#{userId},#{title},#{summary},#{readCount},#{createTime},#{updateTime}))/**useGeneratedKeys true 表示 MyBatis 将会使用 JDBC 的 getGeneratedKeys 方法来获取数据库自动生成的主键。*keyProperty指定了 MyBatis 应该将获取到的主键值设置回哪个属性上在这里是 article 对象的 id 属性。*keyColumn id 表明主键在数据库表中的列名是 id。*/Options(useGeneratedKeys true, keyColumn id, keyProperty id)int insertArticle(Article article);//添加文章的内容 ArticleDetailInsert(insert into article_detail(article_id,content)values(#{articleId},#{content}))int insertArticleContent(ArticleDetail detail); }2.1.3 创建 ArticleService 接口声明发布文章的方法, 并实现其 import com.sunsplanter.trans.pojo.Article;public interface ArticleService {boolean postNewArticle(Article article, String content); }import com.sunsplanter.trans.mapper.ArticleMapper; import com.sunsplanter.trans.pojo.Article; import com.sunsplanter.trans.pojo.ArticleDetail; import com.sunsplanter.trans.service.ArticleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class ArticleServiceImpl implements ArticleService {Autowiredprivate ArticleMapper articleMapper;Overridepublic boolean postNewArticle(Article article, String content) {//新增文章,无需前置操作articleMapper.insertArticle(article);//新增文章内容, 必须先知道往哪个文章(id)插入内容ArticleDetail detail new ArticleDetail();detail.setArticleId(article.getId());detail.setContent(content);articleMapper.insertArticleContent(detail);return true;} }2.14 配置文件及启动类 spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/studyusername: rootpassword: ???hikari:auto-commit: truemaximum-pool-size: 10connection-test-query: select 1mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplimport org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;MapperScan(basePackages com.sunsplanter.trans.mapper) SpringBootApplication public class TransApplication {public static void main(String[] args) {SpringApplication.run(TransApplication.class, args);} } 2.1.5 单元测试 Autowiredprivate ArticleService articleService;Testvoid testAddArticle() {Article article new Article();article.setTitle(Spring 事务管理);article.setSummary(Spring 事务属性事务实现);article.setUserId(2001);article.setReadCount(0);article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());boolean add articleService.postNewArticle(article, Spring 统一事务管理。事务管理器管理本地事务);System.out.println(add add);}尽管两张表都插入成功了, 但不是用事务机制插入的, 有失败(例如只插入了一张表)的风险, 从控制台输出也可以看出提示未开启同步事务: 2.2 增加事务注解 前述提到, 最好在具体的类或具体的方法上使用Transactional注解Transactional内有rollback属性, 声明抛出何种异常时回滚事务,默认值是运行时异常. 2.2.1 事务回滚规则 默认情况下,抛出RuntimeException时实例或子类时回滚事务 也可以在属性中指定何时回滚 Error 也会回滚事务 已检查异常不会回滚。默认提交事务 Transactional 注解的属性控制回滚  rollbackFor  noRollbackFor  rollbackForClassName  noRollbackForClassName 2.2.2 开启事务所需注解 我们在 ArticleserviceImpl 上增加Transaction注解(默认运行时异常回滚) 并且在其内定义各种应该抛出的异常, 例如阅读量的异常: if( article.getReadCount() 1) {//Spring发现抛出的是运行时异常, 会执行回滚throw new RuntimeException(已读数量不能 1 ); }启动类上增加EnableTransactionManagement (该注解默认存在, 即使不加也可以) 2.3 无效的事务声明 2.3.1 方法调方法 首先, 仅当public修饰的类或方法才能令事务生效 然而,并不是所有的public修饰的类或方法都能令事务生效 在 Spring 中事务是通过代理Proxy来实现的。在一个 Spring 管理的 bean 中调用另一个方法时这种调用的性质内部调用 vs 外部调用会影响事务的行为。 外部调用 vs 内部调用 外部调用 当一个方法从外部类比如另一个 Spring Bean被调用时Spring 的代理机制可以拦截这个调用确保事务相关的切面例如 Transactional 注解被应用。这是事务正常工作的场景。 内部调用 当一个方法在同一个类中直接调用另一个方法时这被称为内部调用。在这种情况下由于调用发生在代理之内Spring 的代理机制并不会介入因此不会处理事务相关的切面。即一个方法内部调用另一个带有 Transactional 注解的方法事务注解不会生效。 在上述例子中, ArticleService接口中增加方法 managerArticles, 并在impl中实现其: //接口中增加方法 boolean managerArticle(String action,ArticlePO article,String content); //实现类方法 Override public boolean managerArticle(String action, ArticlePO article, String content) {return postNewArticle(article,content); }其后, 在测试方法中: //原本:boolean add articleService.postNewArticle(add,article, 222 Spring 统一事务管理。事务管理器管理本地事务) boolean add articleService.managerArticle(add,article, 222 Spring 统一事务管理。事务管理器管理本地事务)这样不会执行事务. 通过方法调方法的方式, 事务不会执行. 2.3.1 不同线程之间不会同步事务 在 Spring 中事务管理通常是通过线程本地存储Thread Local来实现的这意味着事务信息是与执行它的线程绑定的。当在一个新的线程中运行代码时这个新线程不会自动继承原始线程的事务上下文。 同一线程中的事务 在同一个线程中事务的边界被定义为方法调用的开始和结束。在这个边界内所有的数据库操作都是在同一个事务上下文中执行的。新线程中的事务 当在一个新的线程中执行代码时这个线程将不会有访问原始线程事务上下文的能力。 任何在新线程中创建的事务将是全新的与原始线程的事务完全隔离。 这意味着在新线程中执行的操作要么自己管理事务要么不在事务的控制之下。 3 SqlSession三件套的生命周期及作用域 SqlSessionFactoryBuilder SqlSessionFactory一旦被创建就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域也就是局部方法变量。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例但最好还是不要一直保留着它以保证所有的 XML 解析资源可以被释放给更重要的事情。 SqlSessionFactory SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到最简单的就是使用单例模式或者静态单例模式。 SqlSession 每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的因此是不能被共享的所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架考虑将 SqlSession 放在一个和 HTTP 请求相似的作用域中。 换句话说每次收到 HTTP 请求就可以打开一个 SqlSession返回一个响应后就关闭它。 这个关闭操作很重要为了确保每次都能执行关闭操作你应该把这个关闭操作放到 finally 块中。 下面的示例就是一个确保 SqlSession 关闭的标准模式 mybatis中的dao层一般也叫做mapper层即UserDao类也可以叫做UserMapper类 以后只要专注于接口和mapper.xml文件,实现类和方法都可以动态生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网站系统官网网站 添加备案号

[html] 前端需要注意哪些SEO? 合理的title,description,keyswords 搜索引擎对这三项的权重逐个减小,title 值强调重点即可,重要的关键词出现不要超过两次,而且要靠前。2 、不同页面的tilte要有所不同;desc…

有个人做网站的吗云南旅游网站建设公司

《[含文档PPT源码等]精品Nodejs实现的校园疫情防控管理系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Win…

贸易网站源码中国最好的网络营销公司

Chrony 是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpd,Chrony 提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony 的几个关键特性和…

网站建设经理岗位职责网页设计公司企业文化怎么写

【引言】 HarmonyOS中加载网络图片常用的方法是直接给Image组件添加图片的网络地址,申请网络权限ohos.permission.INTERNET后就可以通过url加载对应的图片了,如HarmonyOS官网中的写法: Image(https://www.example.com/example.JPG) 【问题概…

胡芦娃app软件下载网站服装电子商务网站有哪些

1、Go 1.3之前的标记-清除(mark and sweep)算法 Go 1.3之前的时候主要用的是普通的标记-清除算法,此算法主要由两个主要的步骤: 标记(Mark phase)清除(Sweep phase) 1&#xff09…

网站系统建设预算网站优化应该怎么做

服务认证基础考试大纲(第1版) 1.总则 本大纲依据 CCAA《服务认证审查员注册准则》制定,适用于拟向CCAA申请注册服务认证审查员级别的人员。 2.考试要求 2.1考试科目 申请注册服务认证审查员级别的人员,需通过“服务认证基础”…

做一个个人主页的网站怎么做古城网站建设

写在前:在前篇的两篇博客介绍中我们主要学习软件测试的相关概念,对软件测试进行了初步的了解,本篇博客将进一步进行学习。重点内容包括:软件测试的生命周期、如何描述一个bug、如何定义bug的级别、bug的生命周期以及在实际工作中如…

做商城网站需要备案什么域名对外宣传推广方案

1. 线性回归算法 线性回归是一种用于预测连续数值的监督学习算法。以下是使用Python和scikit-learn库实现线性回归的示例代码: import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from…

wordpress两个站点煤棚网架加工厂

题目链接 最小高度树 思路:本质上是找到树中的最长路径。当最长路径上中间点(若路经长为偶数,则中间点仅有一个,否者中间点有两个)作为根时,此时树高最小。 Code: class Solution { public://拓扑排序int…

徐州市做网站wordpress+编辑器回车

440. 字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是…

如何制作自己的网站?专业网站建站公司

数组指针:数据类型 (*数组指针变量名)[列宽];特点:1、本质上是一个指针类型的变量;2、指向的是一个二维数组,即数组指针的列宽等价于二维数组的列宽;例如: int array[2][5] {1,2,3,4,5,6,7,8,9…

化妆品销售网站的源代码东莞做网页

功能优化 【主机】裸金属详情页增加部分属性信息【监控】优化告警策略,支持同时设置多监控指标【主机】支持透传设备自动探测【主机】LVM 块存储支持快照【监控】简化 Telegraf 容器的挂载点【主机】新建 VMware 支持同时填写备注信息【存储】KVM 支持对接 LVM 存储…

深圳网站开发平台星速浏览器

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载,请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主,代码兴国!❤❤❤ 哈咯各位铁汁们,大家新年过得快乐吗?反正大伟是过得很快乐,天天就是玩玩玩…

做平面免费接单网站收费的网站如何免费

在使用ElementUI的Backtop回到顶部组件时&#xff0c;单独复制这一行代码 <el-backtop :right"100" :bottom"100" /> 发现页面在向下滚动时&#xff0c;并未出现Backtop组件。 可从以下3个方向进行分析&#xff1a; 指定target属性&#xff0c;且…

win7 iis建立网站正邦网站建设 优帮云

Context 上下文context.Context 是用来设置截止时间、同步信号&#xff0c;传递请求相关值的结构体。 context.Context 定义了四个需要实现的方法&#xff1a; Deadline: 返回 context.Context 被取消的时间。Done: 返回一个 Channel&#xff0c;这个 Channel 会在当前工作完…

微信小程序怎么制作网页网站优化个人工作室

今年前前后后也遇到了不少软件项目&#xff0c;想来想去还是拒绝了其中的大部分项目&#xff0c;当然也有一部分是客户拒绝我的&#xff0c;把这些经验教训分享给大家&#xff0c;一起探讨探讨&#xff0c;接了项目很容易深陷泥潭&#xff0c;累得死去活来不值得。拒绝软件项目…

如何推广网站话术工业设计网站外网

一、简介 在文件中统计出现最多个数的单词&#xff0c;将其输出到hdfs文件上。 二、例子 &#xff08;1&#xff09;实例描述 给出三个文件&#xff0c;每个文件中都若干个单词以空白符分隔&#xff0c;需要统计出现最多的单词 …

做动画相册在哪个网站好织梦网站管理安装

image 标签添加 mode"widthFix" <image mode"widthFix" :src"detailData.coverImageURL" />image 标签添加样式 image {width: 100%;height: auto; }

如何建开发手机网站婚纱网站怎么做

工业显示器是智能制造领域应用比较广泛的电子产品&#xff0c;它广泛应用于工厂产线以及各种配套设备&#xff0c;在很大程度上提升了工厂的生产效率。 工业显示器按触摸方式分&#xff0c;可以分为工业触摸显示器和非触摸工业显示器两种;按使用环境分&#xff0c;又可以分为室…

网站模板上传工具建设网站的服务费是指什么

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 在一个n*n的棋盘中&#xff0c;每个格子中至多放置一个车&#xff0c;且要保证任何两个车都不能相互攻击&#xff0c;有多少中…