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

pom.xml

<!-- 引入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接口即可
@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

@MapperScan("hello.dao")

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

驼峰命名

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

mybatis.configuration.mapUnderscoreToCamelCase=true

结果映射@Results

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

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

可复用的@Results

声明时给id赋值为user
	@Results(id="user",value={
@Result(property="nnNn",column="NN_NN")
})
在其他 方法中,重复使用id为user的结果映射
@ResultMap("user")

打印SQL日志到控制台

在application.properties中添加以下配置
logging.level.你的包名.mybatis接口包=debug
执行SQL时,会在控制台打印SQL日志

第一行:==>左边是执行SQL的接口及其方法,右边是执行语句
第二行:传参数1,String类型
第三行:查到一行数据

分页

首先要在pom.xml中引入文章开头的分页插件,分页逻辑写在service层。
@Service
@Transactional
public class HelloServiceImpl {
@Autowired
MybatisDao 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属性
	@Insert("insert into user(name) values(#{name})")
@Options(useGeneratedKeys=true,keyProperty="id")
public int add(User param);
service层
	User user = new User();
user.setName("tom");
mybatisDao.add(user);
System.out.println("回传ID值:"+user.getId());
控制台

存储过程

这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数
DELIMITER $$
CREATE PROCEDURE `hello`(IN id_in VARCHAR(10),OUT name_out VARCHAR(10))
BEGIN
SELECT NAME INTO name_out FROM USER WHERE id=id_in;
END$$
DELIMITER ;
dao层
mode=IN:传入参数,就是user.id
mode=OUT:传出参数,就是user.name
StatementType.CALLABLE:说明这是一个存储过程
	@Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})")
@Options(statementType= StatementType.CALLABLE )
public void call(User user);
service层
	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 (9) mybatis全注解化

    ORM对比图 框架对比 Spring JDBC Spring Data Jpa Mybatis 性能 性能最好 性能最差 居中 代码量 多 少 多 学习成本 低 高 居中 推荐指数 ❤❤❤ ❤❤❤❤❤ ...

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

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

  3. Spring Boot整合MyBatis(非注解版)

    Spring Boot整合MyBatis(非注解版),开发时采用的时IDEA,JDK1.8 直接上图: 文件夹不存在,创建一个新的路径文件夹 创建完成目录结构如下: 本人第一步习惯先把需要的包结构创建 ...

  4. 详解spring boot mybatis全注解化

    本文重点介绍spring boot mybatis 注解化的实例代码 1.pom.xml //引入mybatis <dependency> <groupId>org.mybat ...

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

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

  6. spring boot项目mybatis配置注解+配置文件

    maven依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...

  7. spring boot整合mybatis基于注解开发以及动态sql的使用

    让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...

  8. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  9. Spring Boot的MyBatis注解:@MapperScan和@Mapper(十七)

    1.Spring Boot与MyBatis融合的矛盾问题: Spring家族的使命就是为了简化而生,但是随着Spring的发展壮大,有点事与愿违了.为了坚持初心,Spring家族祭出了一大杀器---S ...

随机推荐

  1. javascript004_ECMA5数组新特性

    •对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf      lastIndexOf –迭代方法:every  filter   forEach   some   ...

  2. 事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句

    事务控制语句 在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作.因此开始一个事务,必须使用BEGIN.START TRANSACTION,或者执行SE ...

  3. Datenstruktur und Algorithmus

    In der Informatik und Softwaretechnik ist eine Datenstruktur ein Objekt zur Speicherung und Organisa ...

  4. jar 不是内部或外部命令 CLASS_PATH设置

    JDK安装没有问题,%JAVA_HOME%   和   path   %JAVA_HOME%\bin 设置都没有问题 设置CLASS_PATH  CLASS_PATH  .;%JAVA_HOME%\l ...

  5. ES6常用七大特性

    ES6可谓是对JS语言的一个颠覆性改变,增加了Module改善JS一直被诟病的模块化.Promise解决异步函数的回调地狱.Class的面相对象编程... 在学习ES6的过程中,大家或多或少都有看过阮 ...

  6. Python(1):入门

    安装: 在linux中一般都自带有python2.7的版本,如果想升级python到最新的版本可以参考其他博客(http://www.cnblogs.com/lanxuezaipiao/archive ...

  7. Delphi下OpenGL2d绘图(04)-画四边形

    一.前言 画四边形基本上与前几遍文字代码是相同.区别在于glBegin()的参数“GL_QUADS”.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 ...

  8. [转] 如何应用设计模式设计你的足球引擎(一和二)----Design Football Game(Part I and II)

    原文地址: http://www.codeproject.com/KB/architecture/applyingpatterns.aspx 作者:An 'OOP' Madhusudanan 译者:赖 ...

  9. 记一次C#面试

    最近参加了工作后的第一次面试,虽然最终没谈成,但是收获还是不少,不管是技术还是面试经验还是得多多积累呀. 这一次面试与在学校时候参加过的面试区别还是挺大的.校园招聘的面试问的问题似乎都比较具体,直接针 ...

  10. c# MVC模式学习笔记_数据验证

    改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ...