dao专题

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

hibernate泛型Dao,让持久层简洁起来

【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据库。同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么我们在项目中如何灵活应用hibernate,也会给项目维护以及项目开发带来便利,下面我将展示我们项目中是如何来对hibernate进行应用和操作。 【目录】              -

设计之道:ORM、DAO、Service与三层架构的规范探索

引言: 实际开发中,遵守一定的开发规范,不仅可以提高开发效率,还可以提高项目的后续维护性以及项目的扩展性;了解一下本博客的项目设计规范,对项目开发很有意义 一、ORM思想 ORM(Object-Relational-Mapping)在对象模型和关系型模型之间做一个映射(转换)。 目的是为了解决面向对象编程语言的发展和关系型数据库的发展不匹配的问题 可以理解为: 将Java中的数据结

最佳MyBatis 根据表结构自动生成代码, domain, dao, mapper 文件

摘要: 接触mybatis时间不是很长, 但是感觉也还容易上手, 好处发现也很多, 觉得还挺方便, 这段时间又学习一下MyBatis自动生成代码. 觉得在效率上更好了, 所以分享一下自动生成代码的步骤. 首先, 看看我的项目的包结构, 用的IDEA13.1,gradle包管理工具, ...其他的就没什么可说的; 今天, 主要讲 generator 里面的东西; mysql的jar包是

mybatis-generator生成相对应的po、dao以及mapper

1、下载mybatis-generator相应的jar包文件,可以进入http://search.maven.org/#search找到不同版本的jar包; 2、进入http://mybatis.github.io/generator/configreference/xmlconfig.html官方网站查看官方文档,选择你相应的方式来生成po、dao、mapper文件,本来选择的是配置文件+ja

mybatis开发dao层时给sql传参与接收返回值注意点

首先介绍一下:                     一.     使用映射方式时,传入Map,map里放了几个字段,还有一个list                          这时使用foreach时,             注意:             1、首先  传入的集合,collection后的命名和 Map里塞list时的                 ke

mybatis dao @Repository 与 @Mapper注解使用

1、使用@mapper 直接定义dao接口对应xml 中的id 2、使用@repository 的bean继承 SqlSessionDaoSupport 自定义数据库操作方法

MyBatis自动生成实体类、DAO接口和Mapping映射文件的代码(逆向工程)

MyBatis属于一种半自动的ORM框架,它需要程序员自己编写sql语句和映射文件,但是编写映射文件和sql语句很容易出错,所以mybatis官方提供了Generator生成器,自动生成DAO接口。实体类和Mapping。这个生成器是根据单表自动生成mybatis执行所需要的代码,因此,首先得先创建数据库表,然后再自动生成代码。 1.创建user数据表 create table `user`

dao设计(四),预留实现(接口作为参数)

在查询缓存处理中,我们常常需要考虑一种情况,就是缓存不存在,然后需要去数据库中获取,如果每次都用if else来处理,那么代码看起来就会很冗余,现在我们来看下这种有意思的方式。 在dao框架设计中,缓存处理相关的我们可以设计成一个类,如ObjectCacheManager,如更新缓存,删除缓存,根据id获取等通用方法,在获取方法上,我们希望如果getById获取不到数据,能预留一个方法去DB中获

dao设计(三),缓存AOP拦截处理的几个思考

当我们发现我们可以用事件通知的方式来巧妙的实现缓存更新时,接下来需要考虑的就是如何用aop拦截方法并设置一些常量配置的问题了。 1. 首先考虑一个问题,例如每个DO实体对应key及缓存时间等配置我们是在启动初始化时全部设置好呢?还是在启动后动态设置? 个人认为,数量小可以在初始化设置,当量比较大或者在运行时很好获取时,运行时获取也是一个不错的选择。在此次缓存框架缓存配置信息我们采用了运行时

dao设计(二),缓存更新事件通知

观察者模式和消息监听 回调函数是理解观察者的关键,一个为预定调用方法的接口,即抽象观察者。 - 观察者 观察者可以理解为主题(subject),观察者(observer)的一组作用关系,主题需要包含一组需要被通知的观察者集合,因此它需要添加,删除,通知观察者的方法,同时观察者需要一个接受通知的方法。 - 事件监听 事件监听机制涉及到事件源,事件监听器,事件对象三个组件,监听器一般是接口,

dao设计(一),缓存更新事件通知

场景: 在缓存应用中,我们常见做法是在增删改时使缓存失效,在查询时优先查询缓存,缓存不存在则从db中获取数据返回并更新缓存,如果我们采用一般常见写法,代码会比较冗余且有很多重复,解决这种重复代码有很多种方法,如采用模板模式,但今天我想要讲的是采用注解加事件通知方法实现。 设计: 1. 设计点在于查询,当我们调用一个查询方法时,我们希望优先查询缓存,缓存不存在则查询db,然后根据db返回结果更新

java的几种对象(po,dto,dao等)

j2ee中,经常提到几种对象(object),理解他们的含义有助于我们更好的理解面向对象的设计思维。     POJO(plain old java object):普通的java对象,有别于特殊的java对象(含继承约束等)和EJB。POJO一般只有一系列的属性和相应的get、set方法。     PO(persistant object):持久化对象,有别于POJO,必须对应数据库中的实体。

【OA】Dao层“接口”、“实现”两个维度一个良好的设计学习

在学习OA系统的时候,鉴于已经搭建起来的SSH框架,首先要做的就是从底层开始做起,结合所做的项目更多的是在前人基础上修改,这次学习如何设计Dao也是让我大开眼界,总结成博客,便于以后再回头学习。     一、包设计     项目名称:ItcastOA     资源文件夹:src、config、test              由于“src”用于存放主代码,对DAO的接口、实

dao层理解

go,java的orm框架(gorm, MyBatis)对sql表模型做了非常简单的封装,实际编写业务代码仍然使用原生sql,主要是因为追求运行效率,而不是代码维护。使用反射也能完成linq式代码,但大大影响了运行效率。 所以后面使用xml生成,或在dao层自己写函数完成特定功能,这样兼顾了效率与维护。但大部分业务不需要你追求极致的效率,而扩展一个linq式的dao层让你的代码维护扩展能力大大提

OA系统Dao层抽取方法总结

在做OA系统的过程中,涉及到Dao层的抽取,下边对其作如下总结: 1、  第一步:最初设计为:为每一个实体都设计出一个Dao层的接口,同时有一个实现类实现该接口。结构如下:     这种设计的问题在于,因为每一个实体类Dao层接口中的方法都有很大一部分是相同的,这就造成了不必要的重复,每增加一个实体类都需要做很大的工作量。 2、  第二步:为了解决实体类Dao层接口中代码重复的问题,向

三道Java泛型面试题,DAO引申

在Java泛型面试中,问题可以覆盖从基础概念到高级应用的不同层面。以下是从简单到复杂的三道Java泛型面试题: 1. 基础概念题 题目: 解释什么是Java泛型,并给出一个简单的泛型类示例,该类用于存储并检索任何类型的对象。 参考答案: Java泛型(Generics)提供了一种编译时类型安全检测机制,允许程序员在类、接口、方法中使用类型参数(这些类型参数在类被实例化时指定)。使用泛型可以编

理解Java中的PO、VO、DAO、BO、DTO和POJO

在Java开发中,PO、VO、DAO、BO、DTO和POJO是几种常见的对象类型。它们各自有不同的用途和角色,帮助我们在复杂的系统中实现代码的职责分离和高内聚低耦合。本文将详细介绍这些对象类型的定义和区别,并探讨它们在实际开发中的应用。 1. PO (Persistent Object) 定义:持久化对象,通常对应数据库中的表结构,每个实例对象对应数据库中的一条记录。 用途:用于持久化

VO , PO , BO , QO, DAO ,POJO,

O/R Mapping 是 Object Relational Mapping (对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在 O/R Mapping 的世界里,有两个基本的也是重要的东东需要了解,即 VO , PO 。 VO ,值对象 (Value Object) , PO ,持久对象 (Persisent Object) ,

PO、VO、BO、DAO、DTO、POJO

PO、VO、BO、DAO、DTO关系图 DAO(Data Access Object)数据访问对象,数据访问:顾名思义就是与数据库打交道,它封装了与底层数据源(如数据库)的交互逻辑。为业务逻辑层(Service)提供数据服务接口,隐藏了底层数据源的细节和复杂性。 PO(persistant object )持久对象,可以看成是与数据库中的表相映射的java对象,完全符合Java Bean规范的

junit mockito Dao层

Dao层单元测试需要启动服务的上下文 业务逻辑需要别名进行MOCK打桩 为了不影响测试结果和对数据库产生脏数据,使用@Sql注解来完成相关数据的初始化和清除 Dao public interface BranchDao extends BaseDao<BranchPO, Long> {@Modifying@Transactional@Query(nativeQuery = true,val

Mybatis学习笔记(3)--MyBatis的原始Dao开发模式

1.User.xml映射文件 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:命名空间,用于隔离sql,还有一个很重

Java PO VO DAO BO POJO

一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象。 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作。  二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象可以和表对应也可以不这根据业务的需要 三、DAO:da

JDiy dao.ls(sql, pageSize, page)方法分页失效

JDiy是个很好用的小框架。 其中有很多工具都便捷了我们的开任务。 但是最近使用到其dao.ls( sql, pageSize, page)方法的时候,经常会出现分页失效的情况,根据打印出来的SQL语句,并没有“limit”字样。 下面是我写的代码: 然后该段代码打印出来的SQL语句是: 明显没有“limit”关键字,然后我将语句修改为: 这个时候出现了我想要的limi

java之 ------ DAO设计模式的【详解】及常见设计模式的【应用】

DAO Data Access Object(数据访问接口) 一、场景和问题 在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:数据源 不同、存储类型不同、供应商不同、访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作? 二、解决方案 看懂这个图,DAO理解的也差不多了。(由于语文水平的能力啊,等我好好整

【java结构】巧计各种层(dao、service等)的意思

记记记!! 1. **DAO 和 Service 巧记方法**方法一:比喻法方法二:口诀法 2. **如何记住Spring项目的目录结构**缩略词法联想法 3. **一个完整的记忆技巧:角色扮演法**故事示例: 4. **用日常用语概括**总结 src/main/java └── com └── example ├── Application.java # Spring Bo