本文重点介绍spring boot mybatis 注解化的实例代码

1、pom.xml

//引入mybatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.</version>
</dependency>
// mybatis分页插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.</version>
</dependency>

2、基本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值

3、扫描Mapper

@MapperScan("hello.dao")

  在配置类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。

  而@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅

4、驼峰命名

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

mybatis.configuration.mapUnderscoreToCamelCase=true

5、结果映射@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>

6、可复用的@Results

  声明时给id赋值为user

@Results(id="user",value={
@Result(property="nnNn",column="NN_NN")
})

  在其他方法中,重复使用id为user的结果映射:@ResultMap("user")

7、打印SQL日志到控制台

  在application.properties中添加以下配置:logging.level.你的包名.mybatis接口包=debug 

  执行SQL时,会在控制台打印SQL日志

  第一行:==>左边是执行SQL的接口及其方法,右边是执行语句

  第二行:传参数1,String类型

  第三行:查到一行数据

8、分页

  首先要在pom.xml中引入文章开头的分页插件,分页逻辑写在service层。

@Service
@Transactional
public class HelloServiceImpl {
@Autowired
MybatisDao mybatisDao;
public void find(){
//分页插件: 查询第1页,每页10行
Page<User> page =PageHelper.startPage(, );
mybatisDao.findAll();
//数据表的总行数
page.getTotal();
//分页查询结果的总行数
page.size();
//第一个User对象,参考list,序号0是第一个元素,依此类推
page.get();
}

  执行原理:

  PageHelper.startPage会拦截下一个sql,也就是mybatisDao.findAll()的SQL。并且根据当前数据库的语法,把这个SQL改造成一个高性能的分页SQL,同时还会查询该表的总行数,具体可以看SQL日志。

  PageHelper.startPage和mybatisDao.findAll()最好紧跟在一起,中间不要有别的逻辑,否则可能出BUG

  Page<User> page:相当于一个list集合,findAll()方法查询完成后,会给page对象的相关参数赋值

9、回传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());

10、控制台

  存储过程

  这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数

DELIMITER $$
CREATE PROCEDURE `hello`(IN id_in VARCHAR(),OUT name_out VARCHAR())
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("");
mybatisDao.call(user);
System.out.println(user.getName());
}

  执行结果

详解spring boot mybatis全注解化的更多相关文章

  1. spring boot(7)-mybatis全注解化

    关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml <!-- 引入mybatis --> <dependency> <groupId>org. ...

  2. Spring Boot (9) mybatis全注解化

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

  3. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  4. 详解spring boot实现多数据源代码实战

    之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ...

  5. 详解Spring Boot配置文件之多环境配置

    一. 多环境配置的好处: 1.不同环境配置可以配置不同的参数~ 2.便于部署,提高效率,减少出错~ 二. properties多环境配置 1. 配置激活选项 spring.profiles.activ ...

  6. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  7. applicationContext.xml详解 spring+mybatis+struts

    今天给大家详细解释一项关于Spring的applicationContext.xml文件,这对于初学者来说,应该是很有帮助的, 以下是详解Spring的applicationContext.xml文件 ...

  8. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  9. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

随机推荐

  1. mysql_query error:Commands out of sync;you can't run this command now

    MYSQL_REST *result没有释放, 用mysql_free_result(result)即可.

  2. 转载:pyqt线程间通过 信号/槽 通信

    转自:http://blog.sina.com.cn/s/blog_613d5bb701016qzv.html 信号(singal)与槽(slot)用于对象相互通信,信号:当某个对象的某个事件发生时, ...

  3. jquery widgets 弹框

    <div id='dialog' style="display:none;"> <div style="text-align:center;" ...

  4. 不错的源码演示:admin5源码

    admin5源码官网:http://down.admin5.com/ 集资讯,源码,字体,itchat于一体的网站,可以下载喔! 实际项目中可以用得到.

  5. SQL 模糊查询LIKE concat用法

    concat用来拼接查询的字符串,如下代码所示 SELECT * FROM deployment WHERE name LIKE concat(concat('%',#{queryMessage}), ...

  6. 用 python 抓取知乎指定回答下的视频

    前言 现在知乎允许上传视频,奈何不能下载视频,好气哦,无奈之下研究一下了,然后撸了代码,方便下载视频保存. 接下来以 猫为什么一点也不怕蛇? 回答为例,分享一下整个下载过程. 调试一下 打开 F12, ...

  7. SharePoint Server 2013 通过IP无法访问站点

    通过IP访问SharePoint站点,出现“The Web application at http://172.21.19.132:1000 could not be found.... ”如下错误: ...

  8. 单例模式(singleton pattern)--------创造型模式

    缺点: 1.单例模式没有抽象层,单例模式的扩展较困那(开闭原则) 2.单例类的职责过重,既提供了业务方法,又提供了创建对象的方法,将对象的创建和对象本身的功能耦合在一起(违反单一职责原则,但是似乎又无 ...

  9. python2.0_s12_day9_事件驱动编程&异步IO

    论事件驱动与异步IO 事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理.另外两种常见的编程范式是(单线程)同步以及 ...

  10. 什么原因接触接触impala的

    最近一个项目,关于大数据的改造项目,底层选择Impala还是sparkSQL呢? 最后选择Impala.这样就开启了我的Impala学习之旅.我大部分负责Imapa接口开发工作. 我是控制不住的想整个 ...