Springboot与MyBatis简单整合
之前搭传统的ssm框架,配置文件很多,看了几天文档才把那些xml的逻辑关系搞得七七八八,搭起来也是很麻烦,那时我完全按网上那个demo的版本要求(jdk和tomcat),所以最后是各种问题没成功跑起来。 今天尝试用springboot来整合,不敢相信才失败几次就成功了!!
现在来记录一下过程:
首先springboot基本的建立就不讲了,之前的博客里面有写。
添加POM依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
关于dao层的依赖就是后面两个mysql的connector和mybatis的starter(这个可是好东西)
开始写代码:
这里我们有个简单是数据表:
我们的目的是 用get发一个带有 id值的请求,服务器根据id值返回这个图书管理员的全部信息并用json的方式直接显示在页面上,
Controller:
@RestController
public class LibrarianController { @Autowired
private LibrarianService librarianService; @GetMapping("/getLibrarian")
public Librarian getALibrarianInfo(int id) {
//System.out.println("test :id: "+id);
return librarianService.selectLibrarian(id);
}
}
RestController是responsebody+Controller两个注解的合体,一般就拿来直接传json数据。 为什么可以直接传个对象过去呢?这是因为springboot内置了jackson模块,可以在maven的依赖下看到这方面的jar包(之前我写是按网上的教程用gson来处理的,比起来这个简直无敌)
然后看到我们注入的sevice,下面是service
Service:
public interface LibrarianService {
Librarian selectLibrarian(int id);
}
就是个接口
ServiceImpl:
@Service
public class LibrarianServiceImpl implements LibrarianService{ @Autowired
private LibrarianMapper librarianMapper; @Override
public Librarian selectLibrarian(int id) {
// TODO Auto-generated method stub
return librarianMapper.selectLibrarian(id);
}
}
这里记得要加@Service备注,才会被spring生成bean然后注入到controller那里去。
然后看到这里注入了个mapper
Dao:
package com.example.dao; import org.apache.ibatis.annotations.Mapper; import com.example.entity.Librarian; @Mapper
public interface LibrarianMapper {
Librarian selectLibrarian(int id);
}
这里加的@Mapper是 MyBatis的备注,目的是为了让spring能够根据xml和这个接口动态生成这个接口的实现。如果是加@Repository,就是spring生成一个bean,自动注入service的相关引用中。
然后是Mapper的xml文件(我的MyBatis的相关sql用的是xml)
mapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.LibrarianMapper"> <!-- 可根据自己的需求,是否要使用 -->
<resultMap type="Librarian" id="LibrarianMap"> <id column="id" property="id" jdbcType="INTEGER" />
<result column="userName" property="useName" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="age" property="age" jdbcType="INTEGER" />
<result column="position" property="position" jdbcType="VARCHAR" /> </resultMap> <select id="selectLibrarian" parameterType="INTEGER" resultMap="LibrarianMap">
select *
from t_librarian
where 1=1
and id = #{id,jdbcType=INTEGER}
</select> </mapper>
第三行的namespace很重要噢,它是指定这个xml所对应的是哪个dao(mapper)接口
resultMap是做个pojo和数据库表的对应(这里只写个Librarian不用写全路径是因为做了设置,下面会说)
select标签的id对应的就是mapper接口中的方法名,parameterType就是传进来的参数类型
简单的配置与设置:
好现在讲讲设置,这里会想到,那些Controller啊,@Service啊还有MyBatis的注解@Mapper什么的spring怎么知道在哪呢?不用像mvc那样搞个扫描设置吗?
是的要的,这些我们在启动类做了简单的设置:
package com.example.main; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* 指定所扫的包,会自动扫描指定包下的全部标有@Component的类,并注册成bean,
* 当然包括@Component下的子注解@Service,@Repository,@Controller。
* @author 85060
*
*/
@SpringBootApplication(scanBasePackages={"com.example.*"})
@MapperScan("com.example.dao")
public class SpringBootDemoApplication { public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
关于这个SpringBootApplication,它其实是好几个注解的合体(之前的博客里有讲),所以可以直接在这写扫包的设置,然后那个@MapperScan是MyBatis提供的设置注解。
然后还有点配置文件:
spring.thymeleaf.cache=false
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db_library
spring.datasource.username=root
spring.datasource.password=4008 mybatis.type-aliases-package=com.example.entity
mybatis.mapperLocations=classpath:mappers/*.xml
主要有关的是第四行开始的,最后两行一个是设置基本包(包别名)也就是为什么在mapper.xml中可以只写一个Librarian的原因。
最后一行的很重要,是告诉系统在哪里去找mapper.xml文件。
上一个最后的效果图:
再放一个项目结构图:
放两个springboot和mybatis整合讲得比较好的博客供参考:
https://blog.csdn.net/gebitan505/article/details/54929287(要是着看到这个就省好多功夫了!)
https://blog.csdn.net/blackwoodcliff/article/details/50776155
Springboot与MyBatis简单整合的更多相关文章
- IntelliJ IDEA 2017版 spring-boot与Mybatis简单整合
一.编译器建立项目 参考:http://www.cnblogs.com/liuyangfirst/p/8372291.html 二.代码编辑 1.建立数据库 /* Navicat MySQL Data ...
- SpringBoot+SpringMVC+MyBatis快速整合搭建
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
- spring+springMVC+mybatis简单整合
spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...
- springboot+springmvc+mybatis项目整合
介绍: 上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置,这样不仅浪费了时间,也比较容易出错,由于这样问题的产生, ...
- SpringBoot和Mybatis的整合
这里介绍两种整合SpringBoot和Mybatis的模式,分别是“全注解版” 和 “注解xml合并版”. 前期准备开发环境 开发工具:IDEAJDK:1.8技术:SpringBoot.Maven.M ...
- springboot对mybatis的整合
1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver pom.xml配置文件导入依赖 <!--mybatis-sp ...
- SpringBoot系列——MyBatis整合
前言 MyBatis官网:http://www.mybatis.org/mybatis-3/zh/index.html 本文记录springboot与mybatis的整合实例:1.以注解方式:2.手写 ...
- 30分钟带你了解Springboot与Mybatis整合最佳实践
前言:Springboot怎么使用想必也无需我多言,Mybitas作为实用性极强的ORM框架也深受广大开发人员喜爱,有关如何整合它们的文章在网络上随处可见.但是今天我会从实战的角度出发,谈谈我对二者结 ...
- SpringBoot与SpringDateJPA和Mybatis的整合
一.SpringBoot与SpringDateJPA的整合 1-1.需求 查询数据库---->得到数据------>展示到页面上 1-2.整合步骤 1-2-1.创建SpringBoot工程 ...
随机推荐
- Training Very Deep Networks
Rupesh Kumar SrivastavaKlaus Greff ̈J urgenSchmidhuberThe Swiss AI Lab IDSIA / USI / SUPSI{rupesh, k ...
- 编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类
建议23:避免将List<T>作为自定义集合类的基类 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口.FCL结合类应该以组合的形式包含至自定义的集合 ...
- tornado设置cookie过期时间(expires time)
具体的tornado设置过期时间的东西, 我也是查资料才发现的, 现在就贴代码吧 用户登录之后, 设置cookie, 我使用set_secure_cookie的, 它默认是有个30天的过期时间, 导致 ...
- 让Fireball CodeEditor控件禁止中文双倍输入
第一次使用这个控件的时候,输入注释时候, 中文都是双倍输入,很是郁闷,查到资料,在 让Fireball CodeEditor控件支持中文 这篇文章中使用的方法,将代码复制过来发现不适用, 后来再一次偶 ...
- 十五、Node.js-fs模块(中)
有了上一篇JS同步异步知识的铺垫,我们一起学习一下fs模块的同步和异步知识: Node.js内置的fs模块就是文件系统模块,负责读写文件. 和所有其它JavaScript模块不同的是,fs模块同时提供 ...
- 20165219 2017-2018-2 《Java程序设计》第6周学习总结
20165219 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容小结 第八章 String类 常用方法 public int length() 求字符串长度 pu ...
- 738. Monotone Increasing Digits
Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...
- luoguP2418 yyy loves OI IV
https://www.luogu.org/problemnew/show/P2418 暴力 DP 做这题只有 30 分 考虑用线段树优化这个 DP 先处理一下整个房间都膜拜一个人的情况,然后将 1 ...
- django中ModelForm解决多表单组合显示问题
一.多表单组合显示问题 在项目中用ModelForm生成页面时 当有多表单组合显示时,会显示全部的关联表单数据. 而在实际项目中可能会出现只想让用户选择部分数据,这时候这样的显示就有问题. 二.问题解 ...
- Scanner类的用法
Scanner类,一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器. 用于扫描输入文本的实用程序.位于java.util包中. 使用Scanner接收键盘输入的字符,步骤: 1.导入Sca ...