MyBatis

mybatis使用collection查询集合属性规则

萝らか妹 提交于 2020-08-09 08:41:13
接上篇 mybatis使用associaton进行分步查询 相关的类还是上篇中的类。 查询部门的时候将部门对应的所有员工信息也查询出来 DepartmentMapper.xml <!--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则 --> <resultMap type="com.mybatis.bean.Department" id="MyDept"> <id column="did" property="id"/> <result column="dept_name" property="departmentName"/> <!-- collection定义关联集合类型的属性的封装规则 ofType:指定集合里面元素的类型 --> <collection property="emps" ofType="com.mybatis.bean.Employee"> <!-- 定义这个集合中元素的封装规则 --> <id column="eid" property="id"/> <result column="last_name" property="lastName"/> <result column="email" property="email"/> <result column="gender" property="gender"/> <

从源码学习设计模式之模板方法

心已入冬 提交于 2020-08-09 08:38:36
什么是模板方法模式?摘录 wiki 的介绍。 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和C++模板没有关连。 模板设计方法存在目的在于某些算法逻辑存在一些相同处,而具体细节却不同。这样使用模板方法,可以抽取共用逻辑到父类,在子类实现具体算法细节,这样减少了重复代码。 模板方法充分运用了多态与继承。使用抽象父类定义抽象操作,然后在公共逻辑调用抽象方法。子类方法只要继承父类关注自身实现细节。 Talk is cheap. Show me the code 下面拿支付接入支付渠道例子来使用模板方法。 假设银行卡支付需要实现两家银行的支付功能。不同银行提供的接口,在参数,调用方式等肯定存在很大区别。这个时候我们就可以使用模板设计方法,父类实现支付前通用逻辑,用子类实现交互的不同。系统类结构如下。 AgreementPay 提供支付功能, AgreementBasePay 为抽象类实现通用逻辑, AgreementCCBPay 与 AgreementCMBPay 实现具体的渠道支付方法。具体源码如下。 AgreementPay 接口 public interface AgreementPay { PayResponse payInChannel

自从IDEA配上这个插件开发速度快了N倍

限于喜欢 提交于 2020-08-09 02:47:27
文章目录 一、前言 二、重量级嘉宾闪亮登场 (一)神秘嘉宾的自我表白 (二)神秘嘉宾的家在哪? 三、婚嫁说明书(基础配置) (一)安装相关数据库驱动 (二)添加数据库的连接信息 (三)查看表中的数据 (四)命令行中操作mysql (五)如何在这里可视化创建一个新表 (六)如何删除一个表 (七)如何删除一个字段 (八)如何修改表的结构等 四、与mybatis.generator一起使用更快哉 (一)pom配置 (二)生层后目录结构 (三)插件配置 (四)最终结果 1、生成的实体类 2、生成的dao层 3、生成的主键、外键类 4、生成的mapper文件 五、与IDEA结合使用 一、前言 由于之前一直在使用 Navicat ,不得不说这是个很优秀的数据库管理软件,很方便。 很可惜的是,到期了,学生穷呀,不能去支持一下,也懒的找其他版本的。 无意间发现了** 本篇文章要说的这个神器,贼好用,已经用了几天了,表示真的很无敌 ** 二、重量级嘉宾闪亮登场 (一)神秘嘉宾的自我表白 开发Java应用程序,作为明星工具 IntelliJ IDEA Ultimate 当然是首选,然后进行数据库SQL开发的时候,常常会选择诸如: Navicat , sqlyog , MySQL Workbench 等。 当进行Java数据库编程的时候,会来在两个工具,效率极低,其实这都没有必要的。

一对多分页的SQL到底应该怎么写?

风格不统一 提交于 2020-08-08 23:22:51
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 1. 前言 MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息。但是很多人会在这里遇到分页的误区,得到不正确的结果。今天就来分析并解决这个问题。 2. 问题分析 我们先创建一个简单商品表和对应的商品图片关系表,它们之间是一对多的关系: 然后我分别写入了一些商品和这些商品对应的图片,通过下面的左连接查询可以看出它们之间具有明显的一对多关系: SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL FROM PRODUCT_INFO P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID 按照传统的思维我们的分页语句会这么写: <resultMap id="ProductDTO" type="cn.felord.mybatis.entity.ProductDTO"> <id property="productId" column="product_id"/> <result property="prodName" column="prod_name"/> <collection property="imageUrls" ofType="string">

源码分析 | 手写mybait-spring核心功能(干货好文一次学会工厂bean、类代理、bean注册的使用)

核能气质少年 提交于 2020-08-08 22:52:06
作者:小傅哥 博客: https://bugstack.cn - 汇总系列原创专题文章 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、前言介绍 一个知识点的学习过程基本分为;运行helloworld、熟练使用api、源码分析、核心专家。在分析mybaits以及mybatis-spring源码之前,我也只是简单的使用,因为它好用。但是他是怎么做的多半是凭自己的经验去分析,但始终觉得这样的感觉缺少点什么,在几次夙兴夜寐,靡有朝矣之后决定彻底的研究一下,之后在去仿照着写一版核心功能。依次来补全自己的技术栈的空缺。在现在技术知识像爆炸一样迸发,而我们多半又忙于工作业务开发。就像一个不会修车的老司机,只能一脚油门,一脚刹车的奔波。车速很快,但经不起坏,累觉不爱。好!为了解决这样问题,也为了钱程似锦(形容钱多的想家里的棉布一样),努力! 开动之前先庆祝下我的iPhone4s又活了,还是那么好用( 嗯!有点卡 ); 二、以往章节 关于mybaits & spring 源码分析以及demo功能的章节汇总,可以通过下列内容进行系统的学习,同时以下章节会有部分内容涉及到demo版本的mybaits; 源码分析 | Mybatis接口没有实现类为什么可以执行增删改查 源码分析 | 像盗墓一样分析Spring是怎么初始化xml并注册bean的 源码分析 |

框架修炼之ssm-Mybatis学习笔记一

会有一股神秘感。 提交于 2020-08-08 18:06:57
早期ssh框架:spring struts2 hibernate. 目前使用ssm:spring(service) springMVC(servlet) mybatis(jdbc DbUtil) JDBC回顾 1 准备数据库tb_user @Test public void test ( ) throws Exception { // 1 加载驱动 Connection connection = null ; PreparedStatement Statement = null ; ResultSet resultSet = null ; try { Class . forName ( "com.mysql.jdbc.Driver" ) ; // 2 获取连接 connection = DriverManager . getConnection ( "jdbc:mysql://localhost:3306/mybatis" , "root" , "1234" ) ; // 3 获取preparestatement String sql = "select * from tb_user where id = ?" ; Statement = connection . prepareStatement ( sql ) ; // 4 设置参数 Statement . setLong (

Mybatis入门学习(一)

僤鯓⒐⒋嵵緔 提交于 2020-08-08 15:54:07
Mybatis 入门学习(一) 一、mybatis的环境搭建 创建maven工程,操作pom.xml文件导入坐标 1.1.1 加入打包方式 < packaging > jar </ packaging > 1.1.2 导入mybatis的依赖 < dependencies > < dependency > < groupId > org.mybatis </ groupId > < artifactId > mybatis </ artifactId > < version > 3.4.5 </ version > </ dependency > < dependency > < groupId > mysql </ groupId > < artifactId > mysql-connector-java </ artifactId > < version > 5.1.6 </ version > </ dependency > < dependency > < groupId > log4j </ groupId > < artifactId > log4j </ artifactId > < version > 1.2.12 </ version > </ dependency > < dependency > < groupId > junit </ groupId > <

Mybatis延迟加载

感情迁移 提交于 2020-08-08 14:30:43
定义 延迟加载或者也叫惰性加载,懒加载。使用延迟加载可以提高程序的运行效率。Java程序与数据库交互的频次越低,程序运行效率越高,所以我们应该尽量减少Java程序与数据库的交互次数,MyBatis延迟加载就很好的做到了这一点。 通过一个具体的业务场景来理解延迟加载: 班级(Classes)和学生(Student),当我们查询Student对象时,因为有级联关系,所以会将对应的Classes对象一并查询出来,这样就需要发送两条SQL语句,分别查询classes表和student表中的数据。 延迟加载的思路是:当我们查询Student的时候,如果没有调用classes属性,则只发送了一条SQL语句查询Student;如果需要调用classes属性,则发送两条SQL语句查询Student和Classes。所以延迟加载可以看做是一种优化机制,根据具体的代码,自动选择发送的SQL语句条数。 代码 接下来我们通过代码来实现延迟加载。 1.数据库建表。 classes表: DROP TABLE IF EXISTS `classes`; CREATE TABLE `classes` ( `c_id` int(11) NOT NULL AUTO_INCREMENT, `c_name` varchar(20) DEFAULT NULL, PRIMARY KEY (`c_id`) ) ENGINE

JDBC 连接数据库示例

六眼飞鱼酱① 提交于 2020-08-08 09:40:07
目前在项目中基本上都是使用 Mybatis、Hibernate等ORM框架来作为数据连接层,都忘了JDBC的存在,这里就是记录一下如何使用JDBC 直接与数据库打交道。 这里的示例代码都是在现有项目中进行的,项目使用maven+spring +mybatis 架构。 插入操作 下面是示例代码: private final static String getId = " select SEQ_ACTIVITY_CONF_ID.NEXTVAL FROM dual " ; private final static String addSql = " insert into t_activity_conf ( " + "ACT_ID, ACT_NAME, QUY_SQL, DEL_FLAG, REC_GEN_TIME, REC_UPD_TIME, " + "REC_GEN_USER, REC_UPD_USER) values (?, ?, ?, ?, ?, ?, ?, ? )" ; public void add (ActivityConfigVo vo) { //1.直接获取已经配置好的数据源(本项目是 DruidDataSource) DataSource dataSource = SpringContextUtil. getBean (DataSource. class ) ; /