spring boot-mybatis(1)全注解化

转载 2018年04月16日 15:11:13

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

pom.xml

[html] view plain copy
  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>  

基本SQL操作

spring boot已经自动实现了mybatis所有配置,直接写dao接口即可操作数据库。
[java] view plain copy
  1. @Mapper  
  2. public interface MybatisDao {  
  3.     @Select("select * from  user where id = #{id}")  
  4.     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 plain copy
  1. @MapperScan("hello.dao")  
在配置类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅

驼峰命名

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

[plain] view plain copy
  1. mybatis.configuration.mapUnderscoreToCamelCase=true  

结果映射@Results

如果结果集不是JAVA对象而是Map,map中的列名会和数据库中的NN_NN一样,是不会自动驼峰转换的。可以使用@Result来指明结果映射,同样也适用JAVA对象
[java] view plain copy
  1. @Results({  
  2.     @Result(property="nnNn",column="NN_NN")      
  3. })  
  4. @Select("select * from  user")      
  5. public List<Map> findAll();   
使用List<Map>不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如List<User>

可复用的@Results

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

打印SQL日志到控制台

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

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

分页

首先要在pom.xml中引入文章开头的分页插件,分页逻辑写在service层。
[java] view plain copy
  1. @Service  
  2. @Transactional  
  3. public class HelloServiceImpl {  
  4.     @Autowired  
  5.     MybatisDao mybatisDao;  
  6.       
  7.     public void find(){    
  8.         //分页插件: 查询第1页,每页10行  
  9.         Page<User> page =PageHelper.startPage(110);    
  10.         mybatisDao.findAll();    
  11.         //数据表的总行数  
  12.         page.getTotal();  
  13.         //分页查询结果的总行数  
  14.         page.size();  
  15.         //第一个User对象,参考list,序号0是第一个元素,依此类推  
  16.         page.get(0);  
  17.     }  
执行原理: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 plain copy
  1. @Insert("insert into user(name) values(#{name})")  
  2. @Options(useGeneratedKeys=true,keyProperty="id")   
  3. public int add(User param);  
service层
[java] view plain copy
  1. User user = new User();  
  2. user.setName("tom");  
  3. mybatisDao.add(user);  
  4. System.out.println("回传ID值:"+user.getId());  
控制台

存储过程

这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数
  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 ;  
dao层
mode=IN:传入参数,就是user.id
mode=OUT:传出参数,就是user.name
StatementType.CALLABLE:说明这是一个存储过程
[java] view plain copy
  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);  
service层
[java] view plain copy
  1. public void call(){  
  2.     User user = new User();  
  3.     user.setId("14");  
  4.     mybatisDao.call(user);  
  5.     System.out.println(user.getName());  
执行结果


钩子使用指南

钩子使用指南 作者:李晋 发布时间:2001/02/27 文章摘要:  钩子(Hook),是Windows消息处理机制的一个平台(point),应用程序可以在上面设置子程以监视指定窗口的某种消息,而且...
  • CandyCat
  • CandyCat
  • 2001-05-17 21:54:00
  • 1423

spring boot(7)-mybatis全注解化

关于配置数据库可以参考上一篇文章,这里只讲mybatis pom.xml org.mybatis.spring.boot mybatis-spring-boot-starter ...
  • wangb_java
  • wangb_java
  • 2017-06-10 09:09:52
  • 5468

SpringMVC 全注解配置

pom.xml的配置 1.8 4.2.2.RELEASE 2.6.3 1.1.3
  • qq_19349607
  • qq_19349607
  • 2016-05-08 18:24:00
  • 1353

spring boot-mybatis整合

  • 2016年04月01日 12:01
  • 23KB
  • 下载

使用全注解配置Spring MVC

全注解配置Spring MVC和其原理
  • ykzhen2015
  • ykzhen2015
  • 2017-04-25 00:10:41
  • 2735

告别繁琐的配置文件 ---- 全注解Spring,Hibernate开发 不完全指南

当我最开始接触Spring和hibernate开发的时候,也是从别人(学长)那里拷贝过来一个项目,自己学习研究,在当时,像applicationContext.xml这种配置文件也是他写成什么样,我就...
  • Devil_cpp
  • Devil_cpp
  • 2012-08-01 10:17:30
  • 5287

Spring 4 MVC HelloWorld 纯注解方式(带源码)【超赞】

【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看】 【翻译 by 明明如月 QQ 605283073】 #项目下载地址:http://websystique.com/?...
  • w605283073
  • w605283073
  • 2016-05-07 15:25:53
  • 8332

spring mvc+mybatis+ spring 基于全注解事务配置

spring mvc 自动扫描注解时,不需要扫描@Service spring  自动扫描时,不需要扫描@Controller,并开启事务注解机制 ...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2016-04-07 10:20:55
  • 2660

Spring MVC之最简项目配置(全注解)

Environment: Java 1.8.0_131 maven 3.5.0 InteliJ IDEA 2017.1.4 tomcat 8.5.15 简介Spring 的目的在...
  • ice__snow
  • ice__snow
  • 2017-07-04 14:20:56
  • 498

SpringMVC全注解配置

  • 2016年11月13日 11:21
  • 25.09MB
  • 下载
收藏助手
不良信息举报
您举报文章:spring boot-mybatis(1)全注解化
举报原因:
原因补充:

(最多只允许输入30个字)