MyBatis

Mybatis 关联查询

主宰稳场 提交于 2020-02-29 16:05:05
关联查询 一对多关联查询 一对多关联查询指的是在查询一方对象的时候同时把跟他所关联的多方对象也查询出来,这里以篮球队和篮球运动员为例,一个篮球队关联着多个篮球队员。 多对一关联查询 多对一指的是在查询多方对象的时候,同时将其所关联的一方对象也查询出来。由于在查询多方对象时也是一个一个查询,所以多对一关联查询,其实就是一对一关联查询。即一对一关联查询的实现方式与多对一的实现方式是相同的。 自关联一对多查询 自关联查询就是自己充当多方,同时也充当一方,即多和一都在同一张表中,一般这样的表其实可以看做是一个树形结构,在数据库表中有一个外键,该外键表示当前数据的父节点。下面以公司职位为例创建一张自关联的表。 自关联多对一查询 多对一查询指的是多方可以看到一方,即给出一个员工编号,查看一下他的所有上级领导是谁 多对多关联查询 一个学生可以选多门课程,而一门课程可以由多个学生选择,这就是一个典型的多对多关联关系。所谓多对多关系,其实是由两个互反的一对多关系组成。即多对多关系都会通过一个中间表来建立,例如选课表。学生对于选课表来说是一对多,课程对于选课表来说也是一对多 来源: https://www.cnblogs.com/lucky1024/p/11130406.html

使用 Mybatis 的 mapper 代理

十年热恋 提交于 2020-02-29 13:55:44
使用mybatis不用写实现dao实现类,其中注意配置文件中mapper配置中namespace必须是dao的接口的全路径,配置文件中的(select,insert,update)标签ID必须和Dao接口的方法名一致。 注意spring整合mybaties时候,配置文件需要配置mybaties的代理扫描: <!-- mybatis代理扫描 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.mp.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> 完成以上即可使用spring整合mybaties时候Dao不用写实现类的开发模式。 这样具有拓展性,提高了灵活性。 互相学习,共同进步:) 转载请注明出处谢谢。 来源: oschina 链接: https://my.oschina.net/u/3198481/blog/1553458

公众号发送消息模板(java)

折月煮酒 提交于 2020-02-29 13:37:50
这段时间接触公众号开发,写下向用户发送消息模板的接口调用 先上接口代码 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。 1 public static JSONObject sendModelMessage(ServletContext context,JSONObject jsonMsg) { 2 System.out.println("消息内容:"+jsonMsg); 3 boolean result = false; 4 try { 5 getWX_AccessToken(context); 6 } catch (Exception e) { 7 // TODO Auto-generated catch block 8 e.printStackTrace(); 9 } 10 // 拼接请求地址 11 String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN"; 12 requestUrl = requestUrl.replace(

spring+mybatis+oracle ORA-00923: 未找到预期 FROM 关键字

主宰稳场 提交于 2020-02-29 12:58:15
Erbin 既然选择了远方,便只顾风雨兼程 spring+mybatis+oracle ORA-00923: 未找到预期 FROM 关键字 使用spring+mybatis+oracle过程中遇到的一个错误。 最终看到网上分享才解决这个问题,mark一下。 主要问题是mybatis的配置有问题。下面我就直接复制了。 原文链接: http://hellostory.iteye.com/blog/1416507 再次谢谢原作者。thx! 经检查是数据库连接池配置错误(content.xml)! 配置SQL Server 2000(mysql同样)数据库连接池时,属性validationQuery默认值为“select 1”, 而在Oracle数据库连接池中应设置为“validationQuery="select 1 from dual"” SQL Server 2000(mysql同样)数据库连接池配置: 复制代码 <Context> <Resource name="jdbc/myOracle" type="javax.sql.DataSource" username="test" password="test" driverClassName="oracle.jdbc.driver.OracleDriver" maxIdle="5" maxWait="5000"

mybatis

天大地大妈咪最大 提交于 2020-02-29 12:27:15
mybatis:主要解决数据持久化的问题 使用方式: 引入mybatis的依赖 + 数据库的驱动 官网下载 Mybatis 框架:https://mybatis.org/mybatis-3/ MyBatis的工作原理: 开发流程: 1、创建Emp的DAO接口 public interface EmpDao { public List < Emp > findAll ( ) ; public Emp selectEmpByNO ( Integer empno ) ; } 2、在src目录下创建mybatis的配置文件 mybatis-config.xml < ? xml version = "1.0" encoding = "UTF-8" ? > < ! DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > < configuration > < environments default = "development" > < environment id = "development" > < transactionManager type = "JDBC" / > < dataSource type =

基于MyBatis和Spring泛型DAO的三层架构

半城伤御伤魂 提交于 2020-02-29 11:24:16
1 介绍 项目整合了Spring和SpringMVC,MyBatis,在这里已经整合过了: http://my.oschina.net/ChiLin/blog/689022 这里是在已经整合的基础上改进DAO和Service。。。 这里只补充一下Spring和MyBatis的配置文件:applicationContext-mybatis: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans

一名程序员在家办公的感想—在家远程办公2周,准备离职了...

一世执手 提交于 2020-02-29 10:03:21
以前,特别羡慕在家办公一族,感觉好爽。 没有烦人的闹钟,没有忙碌的早晨,没有拥挤的地铁,没有强制的打卡。 9点上班,8点55醒也不怕迟到。 床在桌边,饭在桌上,家里的一切都那么安逸。 即使做同样的事情,心情肯定是愉悦的 我可以撸上一整天的代码! 想想就兴奋,可是... 如今,因为疫情的原因,很多人已经体验到了在家办公的滋味。 这滋味,好像没有想象的那样甜。 以前在公司撸码,下班回家了,只要不遇到紧急事情,一般不会有人再打扰你,回家就等于下班。 在家办公后,没有了固定上下班概念,24小时微信、钉钉待命,群回复慢了又被批,领导会要求员工每天进行工作总结,事无巨细全盘列出进行审核。 可以说,以前公司996,现在在家007。 在家办公后,不但没有了自己的时间安排,反而被压榨更多。 每天的日报、日报、日报... 这个时候,如果可以选择,我选择回到过去。 整理好当天的日报,想了很多,去年5%的涨薪(听说行业平均涨薪也有8%),委屈了一年多,长时间的CRUD,技术能力也得不到提升。 也许,是时候为下一份工作准备准备了。 幸好,远程办公有一个好处,虽然需要更长时间的on call,但是时间分配相对来说更加的自由一点,所以抓紧这些时间空隙充电学习。 前段时间搜集的对标阿里、京东等大厂Java岗的技术点,把相应的学习文档 整理了出来,趁这个机会好好学习一番,金三银四一展身手 1. sleep( ) 和

mybatis执行批量更新batch update 的方法(oracle,mysql)

痴心易碎 提交于 2020-02-29 08:59:51
oracle和mysql数据库的批量update在mybatis中配置不太一样: oracle数据库: <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="begin" close="end;" separator=";"> update test <set> test=${item.test}+1 </set> where id = ${item.id} </foreach> </update> mysql数据库: mysql数据库采用一下写法即可执行,但是数据库连接必须配置:&allowMultiQueries=true 例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";">

mybatis源码分析---反射模块

折月煮酒 提交于 2020-02-29 08:05:01
本文参考(精尽 MyBatis 源码分析 —— 反射模块)[ http://svip.iocoder.cn/MyBatis/reflection-package/# ] 存粹作为一个记录,加深自己的理解。 mybatis的反射模块,对应reflection包。反射模块作为myabits中的基础支持层,对java原生的反射进行了良好的封装,提供了简洁易用的api,方便上层调用,并对反射操作做了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。 今天重点看下 Reflector 类 org.apache.ibatis.reflection.Reflector,反射器,每个Reflector对应一个类。Reflector会缓存反射操作需要的类的信息,例如:构造方法、属性名、setting/getting方法等等。 public class Reflector { /** * 对应的类 */ private final Class<?> type; /** * 可读属性数组 */ private final String[] readablePropertyNames; /** * 可写属性数组 */ private final String[] writablePropertyNames; /** * 属性对应的setting方法的映射 * key:属性名称 * value

MyBatis源码分析-2-基础支持层-反射模块-TypeParameterResolver/ObjectFactory

倾然丶 夕夏残阳落幕 提交于 2020-02-29 07:47:30
TypeParameterResolver: TypeParameterResolver的功能是: 当存在复杂的继承关系以及泛型定义时, TypeParameterResolver 可以帮助我们解析字段、方法参数或方法返回值的类型 。TypeParameterResolver 是在 Refelctor 中的 addGetMethod 方法中调用的,目的是获取方法的返回值类型。在 Refelctor 中的 addSetMethod 方法中调用的,目的是获取方法的参数类型。 private void addGetMethod(String name, Method method) { //检查属性名是否合法,检查条件方法名不以$开头,不等于serialVersionUID 不等于class if (isValidPropertyName(name)) { getMethods .put(name, new MethodInvoker(method)); Type returnType = TypeParameterResolver. resolveReturnType (method, type ); getTypes .put(name, typeToClass(returnType)); } } private void addSetMethod(String name,