`
syinhb
  • 浏览: 3430 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

NO XML ,NO ANNOTATION,2个核心类解决单表和多表连接问题

DAO 
阅读更多
背景介绍一下:
1)大家都觉得jdbc原生语句最好用,效率最高,使用最灵活,原因在于他比较底层,借助于人脑的思维,化简了很多问题。但是,他写起来并不高效。
2)ORM工具的出现,为了提高编写效率,封装对象,避免了SQL的接触。但是他不够灵活。
3)于是,ibatis, Mybatis就出现了,他走了中间路线。

问题:
1)所有的ORM工具,对于join都支持不好。原因在于这些ORM太注意OO思想,需要在早期设计POJO时就要考虑多表关系。
这对于以后的更新、升级、维护带来了很多麻烦。
2)如果发现问题,需要修改为适合自己流程的ORM需要改动一些文件,对与老手可能不是问题,对于新手就要阅读很多文件,才能动手。


前提假设:
1)首先说明,这个ORM并不是说流行的ORM好,只是解决了上面提到的2个问题。请大家手下留情。文明回帖。
2)生成SQL模板的程序已经写好,在源码中。SQL参数的命名规范是ClassName_FieldName,这个是最重要的。
3)使用静态变量存储SQL模版,好处是如果以后更新代码,只要修改模板,可以修改所有涉及到的SQL。利用IDE提前发现错误。也可以使用XML存储SQL模板,这个更易阅读。
4)POJO封装工具也已经生产。



新的思路:
1)sql语句中的参数传递。常见的一些传递方法都是(String sql,Object[] objs),这样我们需要考虑传递顺序。注解的方式可以解决,但是需要手工去写,太麻烦。而且本ORM是反对注解的。所以,使用Map传递。自己拼接SQL语句。而且拼接时需要注意@{}和@[]的不同,这个是我工作中遇到的一个小问题。
2)无论单表查询还是多表查询,结果都是2维表。这样就可以用List<Map<String,Object>>这样的数据类型存储。所以,本ORM不建议一步到位至POJO,而是再加一层封装,参数就是这个List<Map<String,Object>>到POJO。原因如下:
a)这个框架统一,Map作参数,Map做结果,这是最灵活的。
b)如今很多框架都用JSON,所以没有必要再封装成POJO。
c)如果涉及到多表JOIN查询,我们可以从这个Map结果中提取出多个POJO。
3)修改容易,只有2个核心表,代码一看就懂。方便修改。

存在问题:
1)是否存在线程安全问题,需要各位大牛帮助解决,我目前没有发现。
2)性能问题,考虑的比较少。

更多的不说了,源代码上传。作为讨论,请勿乱喷。
  • db.war (448.6 KB)
  • 下载次数: 20
分享到:
评论

相关推荐

    Struts2+Spring2+Hibernate3+Annotation所需JAR包

    在Java Web开发领域,Struts2、Spring2和Hibernate3是三个非常重要的框架,它们分别负责Web层、业务逻辑层和服务持久化层的功能实现。为了更好地整合这三个框架,并利用注解(Annotation)简化配置,开发者通常需要...

    Using Spring from Scratch

    本文将深入探讨Spring的多个关键概念和功能,帮助初学者逐步掌握这个强大的框架。 首先,我们从最基础的XML配置元数据开始。在"Spring_3.2.2.1. Composing XML-based configuration metadata"中,我们可以看到...

    spring mvc 项目错误,和一些配置

    根据提供的文档信息,我们可以归纳总结出一系列与Spring MVC框架相关的常见问题及解决方案。这些问题主要集中在配置错误、依赖缺失以及常见的异常处理等方面。 ### Spring MVC 项目常见错误与配置 #### 1. Java....

    软件测试 junit3

    这个版本在JUnit2的基础上进行了改进,引入了注解(Annotation)的概念,使得测试代码更加简洁明了。虽然后续版本如JUnit4和JUnit5功能更加强大,但JUnit3至今仍被许多开发者用于维护旧有项目或教学中。 二、核心...

    struts2+ajax 发送jquery请求分页,返回josn对象,引用js自动解析

    在Struts2中,Action类是处理用户请求的核心,通过配置Action Mapping,我们可以指定特定URL对应的处理方法。 Ajax,即异步JavaScript和XML,允许我们在不刷新整个页面的情况下更新部分网页内容。jQuery是一个强大...

    Spring实现自动装配

    1. **无注解自动装配(No Annotation Auto-Wiring)**:在XML配置文件中,通过`&lt;context:component-scan&gt;`元素扫描指定包下所有的类,将它们声明为bean,并尝试自动装配。这种方式默认是按类型匹配,如果存在多个...

    SpringMVC + Maven 工程模板

    在“springmvc-no-annotation”这个子文件名中,我们可以推测这个工程模板可能是不依赖于注解的。这意味着它可能使用了传统的 XML 配置来定义控制器、服务和数据访问层的映射,而不是使用现代的 Spring Boot 注解式...

    ANT學習筆記(一)——ANT 結合JUNIT4學習DEMO

    2. **构建文件**:ANT的核心是`build.xml`文件,这是一个XML文档,包含了构建项目的指令和目标。每个任务(task)都是一个XML元素,例如`&lt;target&gt;`、`&lt;mkdir&gt;`、`&lt;javac&gt;`等。 3. **运行ANT**:通过在命令行中输入`...

    springmybatis

    里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 &lt;typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/&gt; 这个别名非常重要,你在 具体的类的映射中,比如User.xml 中 resultType ...

    第十章 Spring 配置元信息(Configuration Metadata)1

    Spring 配置元信息是Spring框架的核心组成部分,用于定义和管理Spring容器中的Bean及其依赖关系。这一章主要探讨了Spring配置元信息的不同方面,包括XML、注解和属性文件等多种方式来装载Bean的配置信息。 1. **...

    ant junit 所有包

    JUnit支持注解(Annotation)来标记测试类和方法,如@Test,@Before和@After。测试用例通常包含一系列断言(Assertion),用于验证代码的行为是否符合预期。此外,JUnit还提供了诸如参数化测试、异常测试和套件测试...

    Spring 自动装配及其注解

    假设我们有`Service`接口和两个实现类`ServiceImpl1`和`ServiceImpl2`。在配置文件中,我们可以声明这两个bean,然后在需要的地方使用`@Autowired`自动装配。 ```java @Service("service1") public class ...

    struts2中Action数据绑定几种方法.rar

    在Struts2中,Action类是处理用户请求的核心,它提供了多种数据绑定的方法,以便于从HTTP请求中获取和设置值。以下是关于Struts2中Action数据绑定的几种方法的详细说明: 1. **属性注解(Field Annotation)** ...

    EJB3.0完整代码例子

    通过@Entity和@Table等注解,开发者可以直接将Java类映射到数据库表,而无需编写SQL。 4. **实体Bean的懒加载(Lazy Loading)**:EJB3.0支持关联对象的懒加载,提高了性能。通过@ManyToOne、@OneToMany等注解,...

    EJB3.0

    **企业级JavaBeans(EJB)3.0**是Java平台企业版(Java EE)中的一个核心组件,它为开发可部署在服务器端的分布式、事务处理和多用户的应用程序提供了一个框架。EJB 3.0是EJB规范的一个重大改革,引入了许多简化开发...

    Spring MVC--6.RESTful SpringMVC CRUD

    在`web.xml`或Spring Boot的配置中,我们需要配置`&lt;mvc:annotation-driven&gt;`元素,或者在Spring Boot中通过`@EnableWebMvc`注解。 在`springmvc_2`这个压缩包文件中,可能包含了相关的代码示例、配置文件或其他辅助...

    整理后java开发全套达内学习笔记(含练习)

    boolean (8bit,不定的)只有true和false两个值 char 16bit, 0~2^16-1 (2^16=6万6) byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 byte 数相加,变 int 型) short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, ...

    jsp实现简单用户7天内免登录.docx

    根据提供的文档信息,我们可以深入探讨如何使用JSP技术来实现一个简单的用户在七天内无需再次登录的功能。这种功能在很多网站上都有应用,能够极大地提升用户体验,减少重复操作。 ### JSP简介 JSP(JavaServer ...

    Spring/泛型Hibernate的实现

    在项目的`pom.xml`文件中添加相应的依赖,例如Spring和Hibernate的核心库: ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context &lt;version&gt;5.3.9 &lt;groupId&gt;org.springframework ...

Global site tag (gtag.js) - Google Analytics