MyBatis

Mybatis 别名的使用

有些话、适合烂在心里 提交于 2020-02-15 03:39:54
类型别名是为 Java 类型设置一个短的名字 两种方式: 使用<typeAliases>下的两种标签 存在的意义仅在于用来减少类完全限定名的冗余,它只和 XML 配置有关,就是说两种方式都是在mybatis-config.xml里面配置, 且位置得在<proerties>后面 而不是<configuration>后面 (各个标签节点的排序是有规则的,typeAliases默认是排第三 文件位置如图: 方式一:使用<typeAlias> ,当这样配置时,user 可以用在任何使用 com.xp.pojo.User的地方。例子如下 <typeAliases> <typeAlias type="com.xp.pojo.User" alias="user"></typeAlias> </typeAliases> type:要取别名的那个类 的全限定类名 alias:要取的别名 方式二: 使用<package>,指定一个包名,Mybatis会在包名下搜索需要的Java Bean 扫描实体类的包, 在没有注解的情况下 ,它的默认别名就为这个类的类名(一般默认都是小写,比如你类名是User ,默认的就是user,但是直接写User也是可以识别的), 如果有注解 ,那别名就是注解的值 <typeAliases> <package name="com.xp.pojo"/> </typeAliases

SpringMVC自学日志07(整合Mybatic)

浪子不回头ぞ 提交于 2020-02-14 02:01:56
整合步骤 导入相关jar包 < ! -- junit -- > < dependency > < groupId > junit < / groupId > < artifactId > junit < / artifactId > < version > 4.12 < / version > < / dependency > < ! -- mybatis -- > < dependency > < groupId > org . mybatis < / groupId > < artifactId > mybatis < / artifactId > < version > 3.5 .2 < / version > < / dependency > < dependency > < groupId > mysql < / groupId > < artifactId > mysql - connector - java < / artifactId > < version > 5.1 .47 < / version > < / dependency > < ! -- mysql - connector - java -- > < dependency > < groupId > mysql < / groupId > < artifactId > mysql -

spring整合MyBatis步骤

微笑、不失礼 提交于 2020-02-14 00:16:59
思路: SqlsessionFactory -> Sqlsession -> StudentMapper -> CRUD 导入jar 准备测试数据(类-表) 如:Student(stuno, name, age) 创建studentMapper.xml并进行配置 MyBatis的配置文件 编写StudentDaoImpl 创建db.properties配置文件 在spring的配置文件引入db.properties 之前在MyBatis中配置数据库,现在在spring中配置 在springIOC中创建mybatis的核心类sqlSessionFactoryBean,并将mybatis的配置文件加载到spring IOC中创建StudentMapper(之前的StudentDao)和StudentService,注意StudentMapper的创建 来源: CSDN 作者: flipped___ 链接: https://blog.csdn.net/flipped___/article/details/104303205

MyBatis | MyBatis分页插件

谁说我不能喝 提交于 2020-02-13 22:48:01
如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。 IDE:IDEA 数据库:MySQL 5.5 Maven工程 1.引入依赖(本例中使用Maven) < dependency > < groupId > com . github . pagehelper < / groupId > < artifactId > pagehelper < / artifactId > < version > 5.1 .0 < / version > < / dependency > < dependency > < groupId > com . github . jsqlparser < / groupId > < artifactId > jsqlparser < / artifactId > < version > 1.3 < / version > < / dependency > 2.编辑mybatis核心配置文件,配置分页插件 < plugins > < plugin interceptor = "com.github.pagehelper.PageInterceptor" > < property name = "helperDialect" value = "mysql" / > < property name =

mybatis中的$和#的区别

纵然是瞬间 提交于 2020-02-13 08:47:45
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

在springboot项目中使用mybatis 集成 Sharding-JDBC

风格不统一 提交于 2020-02-13 07:48:50
前段时间写了篇如何使用Sharding-JDBC进行分库分表的例子,相信能够感受到Sharding-JDBC的强大了,而且使用配置都非常干净。官方支持的功能还包括读写分离、分布式主键、强制路由等。这里再介绍下如何在分库分表的基础上集成读写分离的功能。 读写分离的概念 就是为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。 设置主从库后,第一个问题是如何进行主从的同步。官方不支持主从的同步,也不支持因为主从同步延迟导致的数据不一致问题。工程实践上进行主从同步有很多做法,一种常用的做法是每天定时同步或者实时同步。这个话题太大,暂不展开。 读写分离快速入门 读写可以单独使用,也可以配合分库分表进行使用,由于上个分库分表的例子是基于 1.5.4.1 版本进行说明的,这里为了紧跟官方的步伐,升级Sharding-JDBC到最新的 2.0.0.M2 项目结构如下: pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot<

mybatis中的#和$的区别

£可爱£侵袭症+ 提交于 2020-02-13 07:40:02
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击

java详细面试题

时间秒杀一切 提交于 2020-02-13 06:00:23
struts和springMVC区别? stringbuffer和stringbuilder区别? mybatis原理? soa原理? dubbo的原理? solr怎么搭建,倒序索引? MQ消息队列? SQL语句? maven以及本地仓库? final关键字? 为什么使用ssm而不用ssh? struts2和springmvc区别? 开发工具,jvm,gc,设计模式,平时开发工程是你自己搭建吗? 项目中用到的技术dubbo,zookeeper,solr等? 这三年工作中你统计过自己的代码量大概有多少? redis是多例的还是单例的,在多线程时怎么使用? hashmap线程冲突怎么解决? 介绍一下spring,mybatis。aop用的是静态代理还是动态代理? 介绍电商项目,开发周期多长?技术人员有多少?任务怎么分配什么时候上线?项目模块? 说说你负责的模块的具体代码? 数据库表熟悉吗?有哪些字段? 为什么不使用HttpApi进行项目通信而使用dubbo? TCP和UDP的区别? http,https,ftp,sftp分别使用哪个协议? 给你一个mysql数据库,不使用硬件也不使用软件如何优化? SQL语句的执行顺序? 给你两个表写出笛卡尔积的结果? redis的list数据类型是双向队列,完全可替代MQ,为何还要使用MQ,dubbo的底层原理和实现?

SpringBoot图文教程「概念+案例 思维导图」「基础篇上」

五迷三道 提交于 2020-02-13 01:57:26
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测 面试题 ,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐新年好,点赞转发不要少 **文本已收录至GitHub开源仓库 Lu_JavaNodes 码云仓库地址 Lu_JavaNodes ,**包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦。 前言 庚子鼠年,封村儿,在试过了睡觉,打麻将,做凉皮,做蛋糕之后, 我不由的陷入了对人生和社会的大思考 两年的开发经验和三年的大数据讲师经验告诉我 ,是时候写些什么了,我也早觉得有写些东西的必要了。我向来是不惮以最多的无聊揣测这个假期的,但我没想到……(不能再往下了,再往下真就算抄袭了) 于是决定将自己的的毕生功力汇聚整理成册, 写出《图文教程》系列Java技术学习秘籍 ,本功法力求 『图文并茂』 『简单易懂』,概念和代码实践相结合,每个知识点辅助以自测面试题,希望大家通过本系列教程能够快乐学Java,从练气到飞升。 本期选择的技术是SpringBoot ,SpringBoot 现如今已是 Java 程序员 的必备修炼功法,具备SpringBoot大成的开发功力,才能行走江湖,纵横大厂小派而不惧需求。 在正式开始学习之前,先通过思维导图了解本教程的功法纲要 简单说明

mybatis - 执行 getById

限于喜欢 提交于 2020-02-12 23:03:09
1. getById 的执行 前面一篇 提到过, Mapper.java 创建的时候, 会通过 jdk 代理的方式来创建, 且代理处理类为: MapperProxy . 所以当执行 UserMapper 的 getById 方法的时候, 就会去 MapperProxy 中执行 invoke 方法. //MapperProxy.java @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { try { if (Object.class.equals(method.getDeclaringClass())) { return method.invoke(this, args); } else if (isDefaultMethod(method)) { return invokeDefaultMethod(proxy, method, args); } } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } final MapperMethod mapperMethod = cachedMapperMethod(method); return mapperMethod