MyBatis 示例-简介
简介
为了全面熟悉 MyBatis 的使用,整理一个 MyBatis 的例子,案例中包含了映射器、动态 SQL 的使用。本章先介绍项目结构和配置。
项目结构
- 项目框架:Spring Boot、MyBatis、Mybatis-PageHelper、Druid、Swagger;
- db 目录存放数据库 SQL 文件,项目中使用的表可以通过该 SQL 创建;
- com.yjw.demo.mybatis.biz 目录存放业务相关的类;
- com.yjw.demo.mybatis.common 目录存放公共配置类;
- Application 类为启动类;
- resources 目录下存放配置文件;
如何启动项目
- 在数据库中建表,建表语句在 db 目录
- 修改 application.yml 配置,通过 Application 类启动项目
配置
数据源配置
#druid数据源
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/mybatis-demo?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true&useSSL=true
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
initial-size: 5
max-active: 100
min-idle: 5
max-wait: 60000
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 200
validation-query: SELECT 'x'
test-on-borrow: false
test-on-return: false
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
filters: stat
MyBatis 配置
#mybatis配置
mybatis:
type-aliases-package: com.yjw.demo.mybatis.biz.pojo.entity;com.yjw.demo.mybatis.biz.pojo.query
mapper-locations: classpath:mapper/*.xml
configuration:
lazy-loading-enabled: true
aggressive-lazy-loading: false
- type-aliases-package:它一般对应我们的实体类所在的包,这个时候会自动取对应包中类名作为别名,不区分大小写,多个 package 之间可以用逗号或者分号等来进行分隔;
- mapper-locations:映射文件地址;
- lazy-loading-enabled:开启延迟加载,使得关联属性都按需加载,而不自动加载;
- aggressive-lazy-loading:设置为 true 时,MyBatis 的内容按层级加载,相同层级的数据会被加载出来,比如加载学生信息的时候,它会根据鉴别器去找到健康的情况,而当我们访问课程成绩的时候,由于学生证和课程成绩是一个层级,它也会去访问学生证的信息;
lazy-loading-enabled、aggressive-lazy-loading 这两个配置在级联那块会详细描述。
注意:如果这里配置了 configuration,MyBatis 配置文件(mybatis-config.xml)中就不能再配置了,两个地方都配置存在冲突,不能共用。
Dao 扫描配置
/**
* 启动,配置类
*
* @author yinjianwei
* @date 2017/12/06
*/
@SpringBootApplication
@MapperScan("com.yjw.demo.mybatis.biz.dao")
public class Application { public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
} }
启动类 Application 中配置了 @MapperScan 会自动扫描该路径下的所有 Mapper 类。
MyBatis 实用篇
MyBatis 示例-简介的更多相关文章
- MyBatis 示例-传递多个参数
映射器的主要元素: 本章介绍 select 元素中传递多个参数的处理方式. 测试类:com.yjw.demo.MulParametersTest 使用 Map 传递参数(不建议使用) 使用 MyBat ...
- MyBatis 示例-类型处理器
MyBatis 提供了很多默认类型处理器,参考官网地址:链接,除了官网提供的类型处理器,我们也可以自定义类型处理器. 具体做法为:实现 org.apache.ibatis.type.TypeHandl ...
- MyBatis 示例-联合查询
简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果.先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果. 测试类:com.yjw.demo.JointQ ...
- MyBatis 示例-缓存
MyBatis 提供两种类型的缓存,一种是一级缓存,另一种是二级缓存,本章通过例子的形式描述 MyBatis 缓存的使用. 测试类:com.yjw.demo.CacheTest 一级缓存 MyBati ...
- MyBatis 示例-动态 SQL
MyBatis 的动态 SQL 包括以下几种元素: 详细的使用参考官网文档:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 本章内容简单描述这 ...
- MyBatis 示例-插件
简介 利用 MyBatis Plugin 插件技术实现分页功能. 分页插件实现思路如下: 业务代码在 ThreadLocal 中保存分页信息: MyBatis Interceptor 拦截查询请求,获 ...
- MyBatis 示例-主键回填
测试类:com.yjw.demo.PrimaryKeyTest 自增长列 数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了 ...
- Unit07: MyBatis框架简介 、 MyBatis基本应用
Unit07: MyBatis框架简介 . MyBatis基本应用 1. myBatis (1)myBatis是什么? 是一个开源的持久层框架. 注:myBatis底层仍然是jdbc. (2)编程步骤 ...
- Mybatis 示例之 复杂(complex)属性(property)
Mybatis示例专栏:http://blog.csdn.net/column/details/mybatis-sample.html Mybatis的复杂属性,Mybatis的这个特点很少被提及,但 ...
随机推荐
- JS实现数组去重的方法
1.使用ES6的Set进行去重 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- go语言 链表练习
package main import "fmt" //定义节点 type Node struct { Data int Next *Node } /* * 返回第一个节点 * h ...
- [Spark] 03 - Programming
写在前面 ETL Pipeline 学习资源 Ref: 使用 AWS Glue 和 Amazon Athena 实现无服务器的自主型机器学习 Ref: AWS Glue 常见问题 Extract is ...
- HashMap浅析
一.概述 HashMap,基于哈希结构的Map接口的一个实现,无序,允许null键值对,线程不安全的.可以使用集合工具类Collections中的synchronizedMap方法,去创建一个线程安全 ...
- idea 安装 lombok插件
一,前言 lombok是什么?lombak是一个工具,主要用来简化,减少代码的编写.使代码看起来更清晰,简洁. 而且lombok只是一个工具,不会打包到war中,不会增加任何消耗.只是在编译期中帮助我 ...
- 为elastic的索引做快照并恢复快照到新集群
1. 为指定的所有做快照 curl -XPUT "192.168.1.1:9200/_snapshot/my_backup/testindex_20170803?wait_for_compl ...
- 第八届蓝桥杯java b组第五题
标题:取数位 求1个整数的第k位数字有很多种方法.以下的方法就是一种. 对于题目中的测试数据,应该打印5. 请仔细分析源码,并补充划线部分所缺少的代码. 注意:只提交缺失的代码,不要填写任何已有内容或 ...
- Knative 实战:基于 Knative Serverless 技术实现天气服务-上篇
提到天气预报服务,我们第一反应是很简单的一个服务啊,目前网上有大把的天气预报 API 可以直接使用,有必要去使用 Knative 搞一套吗?杀鸡用牛刀?先不要着急,我们先看一下实际的几个场景需求: 场 ...
- Highly Efficient Analysis of Glycoprotein Sialylation in Human Serum by Simultaneous Quantification of Glycosites and Site-Specific Glycoforms (通过同时定量糖基化位点和位点特异性糖型来高效分析人血清中的糖蛋白唾液酸化)-阅读人:陈秋实
期刊名:Journal of Proteome Research 发表时间:(2019年9月) IF:3.78 单位: 中国科学院大连化学物理研究所 中国科学院大学 大连医科大学第二附属医院 物种:人 ...
- Java 学习笔记之 Daemon线程
Daemon线程: 线程: 用户线程 守护线程 守护线程是一种特殊的线程,在进程中不存在非守护线程了,则守护线程自动销毁. public class DaemonThread extends Thre ...