对象关系映射

Spring整合MongoDB(转)

China☆狼群 提交于 2019-12-02 14:32:06
1.认识Spring Data MongoDB 之前还的确不知道Spring连集成Nosql的东西都实现了,还以为自己又要手动封装一个操作MongoDB的API呢,结果就发现了Spring Data MongoDB。不愧是Spring,真是给了我们春天,佩服的渣渣我目瞪狗呆…… 废话少说,看招。Spring Data其实是一个高级别的Spring Source项目,而Spring Data MongoDB仅仅是其中的一个子项目。Spring Data旨在为关系型数据库、非关系型数据、Map-Reduce框架、云数据服务等等提供统一的数据访问API。 无论是哪种持久化存储, 数据访问对象(或称作为DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD (创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。 Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业 Key-Value - 集成了 Redis 和

走进JavaWeb技术世界13:Hibernate入门经典与注解式开发

时光怂恿深爱的人放手 提交于 2019-12-02 06:40:44
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。 该系列博文会告诉你如何从入门到进阶,从servlet到框架,从ssm再到SpringBoot,一步步地学习JavaWeb基础知识,并上手进行实战,接着了解JavaWeb项目中经常要使用的技术和组件,包括日志组件、Maven、Junit,等等内容,以便让你更完整地了解整个JavaWeb技术体系,形成自己的知识框架。为了更好地总结和检验你的学习成果,本系列文章也会提供每个知识点对应的面试题以及参考答案。 如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。 文末赠送8000G的Java架构师学习资料,需要的朋友可以到文末了解领取方式,资料包括Java基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式

PHP ORM框架与简单代码实现

社会主义新天地 提交于 2019-12-02 06:37:25
目前PHP 开源比较有名的 ORM 有以下几个: 1、Propel Propel是一个适用于PHP5的ORM映射(Object Relational Mapping)框架,它基于Apache Torque提供对象持久层支持。它通过XML格式的模式定义文件和相应的配置文件来生成SQL和类,它允许你使用对象代替SQL来读写数据库表中的记 录。Propel提供一个生成器来为你的数据模型创建SQL定义文件和PHP类。开发者也可以十分简单的定制生成的类,我们还可以通过XML, PHP类和Phing构建工具把Propel集成到已有的应用开发框架中去.例如PHP框架symfony的1.2以前的版本就是默认使用了精简版的 Propel作为默认ORM框架。 官方网站:http://www.propelorm.org/ 2、Doctrine Doctrine是一个PHP的ORM框架,它必须运行在>=php5.2.3版本上,它是一个功能强大的数据抽象层。 它的一个主要特征就是使用面向对象的方式来实现数据库查询的封转,它底层通过一个类似 Hibernate HQL的DQL的查询语句进行数据库查询,这使得开发的灵活性更强,大大减小了重复代码。相比Propel,Doctrine的优点在于它支持支持全文检 索,Doctrine的文档一直就比Propel要全面丰富,社区更活跃,而且使用起来更加自然、更易阅读

TreeMap源码实现类中文全解析

依然范特西╮ 提交于 2019-12-02 05:14:30
/** * 基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序, * 或者根据创建映射时提供的Comparator 进行排序,具体取决于使用的构造方法。 * * 此实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销。 * 这些算法是 Cormen、Leiserson和 Rivest 的 Introduction to Algorithms 中的算法的改编。 * * 注意,如果要正确实现 Map 接口,则有序映射所保持的顺序(无论是否明确提供了比较器)都 * 必须与 equals 一致。(关于与 equals 一致的精确定义,请参阅 Comparable 或 Comparator)。 * 这是因为 Map 接口是按照 equals 操作定义的,但有序映射使用它的compareTo(或 compare)方法 * 对所有键进行比较,因此从有序映射的观点来看,此方法认为相等的两个键就是相等的。 * 即使排序与 equals不一致,有序映射的行为仍然是 定义良好的,只不过没有遵守 Map 接口的常规协定。 * * 注意,此实现不是同步的。如果多个线程同时访问一个映射,并且其中至少一个线程从结构上 * 修改了该映射,则其必须外部同步。

Mybatis(上)

大兔子大兔子 提交于 2019-12-02 03:27:02
Mybatis 一、MyBatis 简介 1. MyBatis作用 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML用于配置和原始映射,将接口和Java的POJO类映射成数据库中的记录,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。 2. 历史 原是apache的一个开源项目iBatis,2010年6月这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 3. 为什么要使用MyBatis? JDBC SQL夹在Java代码块里,耦合度高导致硬编码内伤,维护不易且实际开发需求中sql是有变化,频繁修改的情况多见。 要自已创建connection、创建statement、手动设置参数、结果集检索等 Hibernate 长难复杂SQL,对于Hibernate而言处理也不容易,内部自动生产的SQL,不容易做特殊优化。 基于全映射的全自动框架

技术

谁说胖子不能爱 提交于 2019-12-02 03:22:41
前端控制器配置:第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析 使用此种方式可以实现 RESTful风格的url 处理器映射器: 对标记@Controller类中标识有@RequestMapping的方法进行映射。在@RequestMapping里边定义映射的url。使用注解的映射器不用在xml中配置url和Handler的映射关系。 注解处理器适配器和注解的处理器映射器是配对使用。理解为不能使用非注解映射器进行映射。 <mvc:annotation-driven><mvc:annotation-driven>可以代替下边的配置: <!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--注解适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 实际开发使用

mybatis的一些小细节

痞子三分冷 提交于 2019-12-01 23:56:49
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译。系统可维护性不高。 设想如何解决? 能否将sql单独配置在配置文件中。 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费。 设想如何解决? 使用数据库连接池管理数据库连接。 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结果集时存在硬编码(表的字段名、字段的类型) 设想如何解决? 能否将查询结果集映射成java对象。 image 问题一. #{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理 {}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。 问题二. 当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 <select id=”selectorder” parametertype=”int” resultetype=”me.gacl

【框架】mybatis --输出映射 resultType&resultMap

僤鯓⒐⒋嵵緔 提交于 2019-12-01 23:33:01
1.resultType 使用resultType 进行输出映射,只有查询出来的列名和pojo 中的属性名一致,该列才可以映射成功。 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。 只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。 1.1、输出简单类型 需求 用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表实现分页。 mapper.xml mapper.java 测试代码 小结 查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射。 1.2、输出pojo对象和pojo列表 不管是输出的单个pojo对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。 在mapper.java指定的方法返回值类型不一样: 1.2.1、输出单个pojo对象,方法返回值是单个对象类型 1.2.2、输出pojo对象list,方法返回值是List<Pojo> 生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 ). 2、ResultMap 如果查询出的列名和pojo属性不一致,通过定义一个resultMap对列名和pojo属性名之间做一个映射关系 1、定义resultMap 2

mybatis-关联查询(resultType&resultMap)

一个人想着一个人 提交于 2019-12-01 23:30:23
关联查询 数据模型 订单商品模型: 目标:分析表与表之间的关系。 分析步骤: 1、按模块去分析表,不要将系统全部表一次性分析 2、了解每个表存储了什么业务数据 3、了解表中关键字段(主键、外键、索引字段、非空字段) 4、了解表与表之间数据库级别的关系(外键关系) 5、表与表之间的业务关系(一对一、一对多、多对多) 注意:分析表与表之间的业务关系时一定要建立 在某种业务意义基础上 user表:存储了购买用户信息 网民,在电商系统中注册成为购买用户 orders表:存储了用户创建的订单信息 用户购买东西,一次不管购买多少商品只会创建一个订单 比如:张三一次购买手机、电脑,在orders表插入一条订单记录 orderdetail表:存储用户创建订单的详细信息,记录当时用户购买商品的购买信息 比如:张三一次购买手机、电脑,在orders表插入一条订单记录,在订单明细表插入两条记录,订单明细表每条记录对应一个商品信息 items商品表:存储了电商系统中的商品信息,用户在网站查看的商品信息就是来源与这张表 比如:网站销售手机,在这个表中插入很多的不同型号手机商品信息 orders—>user: 一个订单只能由一个用户创建,一对一关系 user—>orders: 一个用户可以创建多个订单,一对多关系 一对一查询 需求 查询订单关联查询用户信息 分析 使用mybatis开发持久层的dao接口时

Mybatis中输出映射-resultType与resultMap的区别

試著忘記壹切 提交于 2019-12-01 23:25:27
一、resultType 1:使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功。 2:如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。 3:只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象 使用时一般是: 输出为简单类型是, 查询出来的结果集只有一列,可以使用简单类型进行输出映射; 输出为pojo对象或者pojo对象的列表; 输出为HashMap: 输出pojo对象可以改用HashMap输出类型,将输出的字段名称作为map的key,value为字段值。如果是集合,那就是list里面套了HashMap;一般为输出为几列的时候。 二、.resultMap mybatis中使用resultMap完成高级输出结果映射。 如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列(column)名和pojo属性名之间作一个映射关系 来源: CSDN 作者: wanghang88 链接: https://blog.csdn.net/wanghang88/article/details/80134920