关于配置数据库可以参考上一篇文章,这里只讲mybatis

pom.xml

[html] view plaincopyprint?
  1. <!-- 引入mybatis -->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>1.3.0</version>
  6. </dependency>
  7. <!-- mybatis分页插件 -->
  8. <dependency>
  9. <groupId>com.github.pagehelper</groupId>
  10. <artifactId>pagehelper-spring-boot-starter</artifactId>
  11. <version>1.1.1</version>
  12. </dependency>
<!-- 引入mybatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version>
</dependency>
<!-- mybatis分页插件 -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.1.1</version>
</dependency>

基本SQL操作

spring boot已经自动实现了mybatis所有配置,直接写dao接口即可
[java] view plaincopyprint?
  1. @Mapper
  2. public interface MybatisDao {
  3. @Select("select * from user where id = #{id}")
  4. public List<User> findById(User param);
@Mapper
public interface MybatisDao {@Select("select * from  user where id = #{id}")public List<User> findById(User param);

@Mapper:声明一个mybatis的dao接口,会被spring boot扫描到
@Select:声明一个查询方法,相应的增删改使用@Insert @Delete@Update
List<User>:返回集合。如果只返回一个结果,返回值是User。如果是增删改方法返回值是int
User param:传参,#{id}就是param对象的id值

扫描Mapper

[java] view plaincopyprint?
  1. @MapperScan("hello.dao")
@MapperScan("hello.dao")

在配置类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。而@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅

驼峰命名

在properties中添加以下配置,在执行查询后,可以将数据库的NN_NN格式字段,在java结果集对象中自动转换成驼峰命名参数

[plain] view plaincopyprint?
  1. mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.mapUnderscoreToCamelCase=true

结果映射@Results

如果结果集不是JAVA对象而是Map,map中的列名会和数据库中的NN_NN一样,是不会自动驼峰转换的。可以使用@Result来指明结果映射,同样也适用JAVA对象
[java] view plaincopyprint?
  1. @Results({
  2. @Result(property="nnNn",column="NN_NN")
  3. })
  4. @Select("select * from user")
  5. public List<Map> findAll();
  @Results({@Result(property="nnNn",column="NN_NN")    })@Select("select * from  user")    public List<Map> findAll(); 

使用List<Map>不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如List<User>

可复用的@Results

[java] view plaincopyprint?
  1. @Results(id="user",value={
  2. @Result(property="nnNn",column="NN_NN")
  3. })
    @Results(id="user",value={@Result(property="nnNn",column="NN_NN")})

在其他 方法中,重复使用id为user的结果映射
[java] view plaincopyprint?
  1. @ResultMap("user")
@ResultMap("user")

打印SQL日志到控制台

在application.properties中添加以下配置
[plain] view plaincopyprint?
  1. logging.level.你的包名.mybatis接口包=debug
logging.level.你的包名.mybatis接口包=debug

执行SQL时,会在控制台打印SQL日志
第一行:==>左边是执行SQL的接口及其方法,右边是执行语句
第二行:传参数1,String类型
第三行:查到一行数据

分页

首先要在pom.xml中引入文章开头的分页插件,分页逻辑写在service层。
[java] view plaincopyprint?
  1. @Service
  2. @Transactional
  3. public class HelloServiceImpl {
  4. @Autowired
  5. MybatisDao mybatisDao;
  6. public void find(){
  7. //分页插件: 查询第1页,每页10行
  8. Page<User> page =PageHelper.startPage(1, 10);
  9. mybatisDao.findAll();
  10. //数据表的总行数
  11. page.getTotal();
  12. //分页查询结果的总行数
  13. page.size();
  14. //第一个User对象,参考list,序号0是第一个元素,依此类推
  15. page.get(0);
  16. }
@Service
@Transactional
public class HelloServiceImpl {@AutowiredMybatisDao mybatisDao;public void find(){  //分页插件: 查询第1页,每页10行Page<User> page =PageHelper.startPage(1, 10);  mybatisDao.findAll();  //数据表的总行数page.getTotal();//分页查询结果的总行数page.size();//第一个User对象,参考list,序号0是第一个元素,依此类推page.get(0);}

执行原理:PageHelper.startPage会拦截下一个sql,也就是mybatisDao.findAll()的SQL。并且根据当前数据库的语法,把这个SQL改造成一个高性能的分页SQL,同时还会查询该表的总行数,具体可以看SQL日志。
PageHelper.startPage和mybatisDao.findAll()最好紧跟在一起,中间不要有别的逻辑,否则可能出BUG。
Page<User> page:相当于一个list集合,findAll()方法查询完成后,会给page对象的相关参数赋值

回传ID

假设数据库表的ID主键是自动增长的,现在添加一条数据,想要得到这条数据自动增长的ID,方法如下
dao层
useGeneratedKeys=true:获取数据库生成的主键
keyProperty="id":把主键值存入User param对象的id属性

[java] view plaincopyprint?
  1. @Insert("insert into user(name) values(#{name})")
  2. @Options(useGeneratedKeys=true,keyProperty="id")
  3. public int add(User param);
   @Insert("insert into user(name) values(#{name})")@Options(useGeneratedKeys=true,keyProperty="id") public int add(User param);

service层
[java] view plaincopyprint?
  1. User user = new User();
  2. user.setName("tom");
  3. mybatisDao.add(user);
  4. System.out.println("回传ID值:"+user.getId());
   User user = new User();user.setName("tom");mybatisDao.add(user);System.out.println("回传ID值:"+user.getId());

控制台

存储过程

这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数
[sql] view plaincopyprint?
  1. DELIMITER $$
  2. CREATE PROCEDURE `hello`(IN id_in VARCHAR(10),OUT name_out VARCHAR(10))
  3. BEGIN
  4. SELECT NAME INTO name_out FROM USER WHERE id=id_in;
  5. END$$
  6. DELIMITER ;
DELIMITER $$
CREATE PROCEDURE `hello`(IN id_in VARCHAR(10),OUT name_out VARCHAR(10))
BEGINSELECT NAME INTO name_out FROM USER WHERE id=id_in;END$$
DELIMITER ;

dao层
mode=IN:传入参数,就是user.id
mode=OUT:传出参数,就是user.name
StatementType.CALLABLE:说明这是一个存储过程

[java] view plaincopyprint?
  1. @Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})")
  2. @Options(statementType= StatementType.CALLABLE )
  3. public void call(User user);
   @Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})")@Options(statementType= StatementType.CALLABLE )public void call(User user);

service层
[java] view plaincopyprint?
  1. public void call(){
  2. User user = new User();
  3. user.setId("14");
  4. mybatisDao.call(user);
  5. System.out.println(user.getName());
  public void call(){User user = new User();user.setId("14");mybatisDao.call(user);System.out.println(user.getName());

执行结果


spring boot(7)-mybatis全注解化相关推荐

  1. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  2. Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司需要人.产品.业务和方向,方向又要人.产品.业务和方向,方向- 循环』 本文提纲 一 ...

  3. 详解spring boot mybatis全注解化

    https://www.cnblogs.com/goloving/p/9125948.html https://www.jianshu.com/p/8cffcc105b3a https://blog. ...

  4. 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...

    1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...

  5. Spring Boot 整合MyBatis(23)

    Spring Boot 整合MyBatis Spring Boot 整合 Druid 引入依赖 配置 application.yml pring Boot 整合 tk.mybatis 引入依赖 配置 ...

  6. 干货必看|Spring Boot整合MyBatis框架详解

    在开发中,我们通常会对数据库的数据进行操作,Sprirng Boot对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持.所以今天壹哥就给大家讲解一下,如何在SpringBoot环境中整合 ...

  7. 2021-5-10:Spring Boot整合MyBatis

    Spring Boot整合MyBatis Spring Boot 整合MyBatis (一)基础环境搭建 1.数据准备 创建数据库.数据表并插入一定的数据 (1)创建博客数据库blog 在Navica ...

  8. Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台项目

    项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管理系统模板,扩展 Layui 原生 U ...

  9. Spring Boot与MyBatis整合

    2019独角兽企业重金招聘Python工程师标准>>> 数据库以MySQL为例 IDE:spring tool suite 1. 新建项目 file -> new -> ...

最新文章

  1. 【Android】启动过程:Bootloader-System/Recovery
  2. windows服务autofac注入quartz任务
  3. 安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)
  4. 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路
  5. Ajax+SpringMVC+JSON登录验证
  6. 数据结构最佳路径代码_【微服务】149:商品数据结构
  7. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)
  8. 【机械仿真】基于matlab GUI机械臂运动控制【含Matlab源码 063期】
  9. Icons Cube4Nano专业外置声卡设备机架、音视频会议的播放和录音设置
  10. ftp中转服务器,bat实现的ftp中转
  11. Mybatis 插件(plugins)
  12. Firefox选择哪个IE TAB
  13. 如何制定有效的项目章程?【含项目章程模板】
  14. 物联网技术,主要包括哪些核心技术
  15. Python Selenium 疑难杂症解方(四):上传文件
  16. 常用统计量及其常见分布
  17. word 宏命令批量把当前文件夹下的doc另存为docx格式
  18. 一个苏州IT人的5年挨踢经历-------面试,薪资,企业,经历全方位揭示(之二)
  19. 浅析N沟道增强型MOS管的工作原理
  20. 计算机应用基础win,计算机应用基础(Win 7+Office 2010)

热门文章

  1. xpr文件格式用什么打开
  2. Linux各版本内核下载地址
  3. Emacs学习使用之路(一)
  4. 6.10 通过屏幕截图功能快速插入网页图片 [原创Excel教程]
  5. 分享几个好用的易语言编程助手
  6. SQL高级查询案例讲解与分析
  7. ​做让用户安心合规的智能家居产品——智能家庭用户个人信息保护方案
  8. 大数据推荐算法概念简述
  9. 当远程连接MySQL数据库的时候显示Can't connect to MySQL server (10060
  10. java监测服务器信息(cpu,内存,运行时间等),springboot监控服务器信息