0 0

DAO层需要做synchronized吗?5

需要一个注册的功能,其中用户名是不允许重复的,如果将重名校验写在DAO层,是不是需要在方法上加synchronized呢?以确保在并发的时候注册账号不出现重名。
DAO 
2011年8月25日 14:07

5个答案 按时间排序 按投票排序

0 0

采纳的答案

如果做集群,仅仅synchronized是不够的,要在数据库的名字字段加上unique约束才是王道

2011年8月25日 14:26
0 0

想要完全控制住,加唯一键约束.

即使给save方法加synchronized ,那意味着同时要在save方法里检查这个name在数据库里是否存在,不存在则保存,这一系列动作都在 synchronized 里,并发量大的话比较耗时...

使用有唯一约束,不使用synchronized ,可以将检验用户名是否重复的动作放在ajax里做.
即使有并发,也还有唯一键约束在,可以限制到,这样在save的时候也不用其他客户端去等待.

2011年8月25日 16:01
0 0

根据实际情况 决定

2011年8月25日 14:21
0 0

说到底你这个是数据的并发,而synchronized更多的体现在程序的并发上。
所以我推荐你用乐观锁的方式。比如你在注册表里面加一个int的字段index,当用户在注册的之前先查询一下这个字段,假如index加1了,说明在你注册的时候已经有人注册了,那么停止注册。当你完成注册的时候,再把那个字段更新+1.就可以了。

2011年8月25日 14:19
0 0

假如你的dao不是单例来取的,就不用synchronized。
假如是单例 并发的时候你把插入的那条sql执行方法体内部加上锁就可以了。这样可以提升性能。
synchronized这个东西假如加在你的dao的方法上,而你的dao又是单例的话,会造成你访问了这个方法的时候阻塞本类另外的一个synchronized方法,会很耗费性能的。

2011年8月25日 14:16

相关推荐

    Java高并发秒杀API之业务分析与DAO层 第一课代码

    通过学习这个课程,你将掌握如何在Java环境中构建一个高效、稳定的秒杀系统,理解高并发环境下业务分析和DAO层设计的关键点,提升你的实战能力。记得动手实践,结合代码加深理解,相信你会在实际工作中受益匪浅。

    软件开发的规范以及经验

    数据库层有自身的事务机制,DAO层可以通过Transaction对象封装,业务逻辑层则可能使用synchronized关键字进行同步控制。 总结起来,软件开发规范包括需求管理、原型制作、体系结构设计、建模、设计原则、框架应用、...

    java面试题

    答:在Struts2里面是将每次页面的请求进行处理,然后将请求需要输出的数据转发到需要做数据显示的页面。Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将...

    Android数据库ORM封装

    本文以Room为例,Room是Google推荐的Android ORM库,它基于SQLite并提供了更强大的抽象层。 ### 4. Room的使用步骤 #### (1) 添加依赖 在`build.gradle`文件中添加Room库的依赖。 ```groovy dependencies { ...

    393.391.JAVA基础教程_项目-项目三NameListService中两个方法及T(393).rar

    DAO层将封装数据库查询和更新,使得NameListService可以专注于业务逻辑,而不是底层数据存储细节。 总的来说,这个项目提供了实践Java编程核心概念的机会,包括面向对象编程、异常处理、并发控制和设计模式。通过对...

    room数据库的基本学习与使用

    Room提供了强大的抽象层,使得开发者可以在不离开Java或Kotlin语境的情况下进行数据库操作,而无需过多地处理SQL语法。 在Android应用中,数据管理通常涉及到SQLite数据库,但直接与SQLite交互会带来很多繁琐的代码...

    sqlite数据库使用demo

    在应用中使用数据库时,首先需要获取数据库实例,然后可以通过DAO接口执行操作。以下是一个简单的示例,展示了如何插入、查询和删除用户: ```kotlin val db = AppDatabase.getInstance(this) val userDao = db....

    Android应用开发:第7章 持久化数据(上)

    此外,还需要定义一个方法来获取DAO实例。 以下是如何创建一个名为`InventoryDatabase`的数据库实例的例子: ```kotlin import android.content.Context import androidx.room.Database import androidx.room.Room...

    Java信息管理系统开发模式设计 (1).zip

    数据访问层通常会使用DAO(Data Access Object)模式,它提供了一个抽象层,将应用程序与底层数据库操作隔离开来。结合MyBatis或Hibernate这样的ORM(Object-Relational Mapping)工具,可以简化数据库操作,提高...

    乐视room教程

    在Android开发领域,Room是一个重要的数据库框架,它是Google推荐的SQLite数据库抽象层,用于简化数据存储和检索。本教程将深入探讨如何使用Room库在乐视设备上进行开发。 首先,理解Room的概念至关重要。Room提供...

    android仓库管理

    接着,我们需要定义一个DAO(Data Access Object)接口,这里声明了所有对数据库的操作: ```kotlin @Dao interface ItemDao { @Insert suspend fun insert(item: Item) @Query("SELECT * FROM items_table") ...

    基于Java的考场管理系统的研究与实现.zip

    使用DAO(Data Access Object)设计模式,封装数据库操作,使得业务逻辑层与数据访问层解耦。ORM框架如Hibernate或MyBatis可简化数据库操作,提高开发效率。 六、安全机制 系统应具备用户权限管理,如角色授权、...

    android room数据库简单使用代码

    在Android开发中,Room数据库是Google推荐的一种关系型数据库持久化库,它是SQLite的一个抽象层,提供了更加方便和安全的API。本篇文章将详细介绍如何在Android应用中使用Room数据库进行简单操作,包括创建数据模型...

    Java高级代码规范.pdf

    - 文件中展示了使用DAO模式实现的UserDAOImpl类的代码片段,这是处理数据持久层逻辑的一种常见做法。 3. Java的包(package)概念 - Java代码需要被组织到包中,以便更好地管理类的命名空间和访问控制。例如,...

    Android Room with a View

    Room是Android Jetpack组件之一,它是SQLite数据库的抽象层,旨在简化数据库操作。通过Room,开发者可以避免编写大量SQL语句,而是使用注解和Java/ Kotlin代码来定义数据模型和数据库操作。这样既提高了开发效率,又...

    Android数据存储实现(基于sqlite)

    更新和删除数据的操作方式类似,只需要调用对应的DAO方法即可。 总结起来,Android中使用SQLite进行数据存储主要包括以下步骤:引入依赖,定义数据库实体,创建DAO,构建数据库实例,以及在应用中执行CRUD操作。...

    2021Java大厂面试题——大厂真题之字节跳动-Java初级.pdf

    - 对于无状态的Bean(如控制器、服务层、DAO层),它们通常是线程安全的。 - 对于有状态的Bean,可以考虑使用`ThreadLocal`来隔离每个线程的私有副本,从而避免线程间的数据竞争。 #### 七、Maven中`package`与`...

    Java多线程继承Thread类详解第1/2页

    然而,这种方法并不提供精确的同步,如果需要更精细的控制,可以使用`synchronized`关键字、`wait()`, `notify()`, 或者`java.util.concurrent`包中的工具类。 此外,当所有子线程执行完毕后,代码会统计并处理结果...

    自己总结的元动力java教程的文档

    这里,我们将详细探讨其中可能包含的关键知识点,包括Java基础、Spring生态、DAO层组件以及中间件。 首先,Java基础是任何Java学习之旅的起点。这通常包括: 1. **语法基础**:如数据类型(基本与引用)、变量、...

    java基础学习内容

    它提供了一种在业务逻辑层和数据存储层之间解耦的方法。DAO类负责与数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。通过使用DAO,可以使得代码更加模块化,易于测试和维护。 2. **T21-网络程序设计应用...

Global site tag (gtag.js) - Google Analytics