SpringBoot与Mybatis整合实例详解
介绍
从Spring Boot项目名称中的Boot可以看出来,SpringBoot的作用在于创建和启动新的基于Spring框架的项目,它的目的是帮助开发人员很容易的创建出独立运行的产品和产品级别的基于Spring框架的应用。SpringBoot会选择最适合的Spring子项目和第三方开源库进行整合。大部分Spring Boot应用只需要非常少的配置就可以快速运行起来。
SpringBoot包含的特性
- 创建可以独立运行的Spring应用
- 直接嵌入Tomcat或Jetty服务器,不需要部署WAR文件
- 提供推荐的基础POM文件来简化Apache Maven配置
- 尽可能的根据项目依赖来自动配置Spring框架
- 提供可以直接在成产环境中使用的功能,如性能指标,应用信息和应用健康检查
- 没有代码生成,也没有XML配置文件
SpringBoot与Mybatis的完美融合
首先得先创建一个SpringBoot项目,然后基于这个项目在融合进Mybatis
下面给出pom.xml的完整配置:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>20171111</groupId>
- <artifactId>springboot</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>springboot</name>
- <url>http://maven.apache.org</url>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.3.2.RELEASE</version>
- <relativePath></relativePath>
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.6</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-validator</artifactId>
- <version>4.2.0.Final</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
- <dependency>
- <groupId>net.sourceforge.nekohtml</groupId>
- <artifactId>nekohtml</artifactId>
- <version>1.9.22</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
之后创建一个启动类,其实在配置SpringBoot项目的时候就已经创建过一个启动类了,这里只是贴下代码:
- package springboot;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
- import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
- @SpringBootApplication
- public class HelloworldDemoApplication implements EmbeddedServletContainerCustomizer{
- public static void main(String[] args){
- SpringApplication.run(HelloworldDemoApplication.class, args);
- }
- public void customize(ConfigurableEmbeddedServletContainer container) {
- // TODO �Զ����ɵķ������
- container.setPort(8088);
- }
- }
然后,创建配置文件在resource根目录下创建application.properties文件:
- spring.thymeleaf.mode=LEGACYHTML5
- spring.datasource.url=jdbc:mysql://10.0.20.252:3306/mybatis
- spring.datasource.username=root
- spring.datasource.password=Free-Wi11
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- server.port=8088
这里的server.port=8088是定义了该项目的端口,如果不指定,则使用默认端口8080
然后定义一个java的实体类,User.java
- package com.fpc.Entity;
- public class User {
- private int id;
- private String name;
- private int age;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
这里实体类的字段要和数据库的字段对应起来,如果实体类的字段和数据库的字段不相同,则需要使用别名:
这里我们看下数据库中的字段和数据:
- mysql> select * from users;
- +----+-----------+------+
- | id | name | age |
- +----+-----------+------+
- | 1 | Lily | 24 |
- | 2 | b | 27 |
- | 5 | userrrrrr | 25 |
- +----+-----------+------+
- 3 rows in set (0.00 sec)
之后,定义一个dao的接口:
- package springboot.Mapper;
- import java.util.List;
- import org.apache.ibatis.annotations.Mapper;
- import org.apache.ibatis.annotations.Select;
- import com.fpc.Entity.User;
- @Mapper
- public interface UserDao {
- @Select("select * from users where age=#{age}")
- public List<User> get(int age);
- }
@Mapper就是我们要与mybatis融合关键的一步,只要一个注解就搞定了。
然后再写一个测试类,也就是Controller:
- package springboot.Controller;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.ResponseBody;
- import com.fpc.Entity.User;
- import springboot.Mapper.UserDao;
- @Controller
- @RequestMapping("/b")
- public class UserController {
- @Autowired
- private UserDao userDao;
- @RequestMapping("/showDao/{age}")
- @ResponseBody
- public List<User> show(@PathVariable("age") int age) {
- // return userServices.show();
- // return "hellllllllllllllllllllllll";
- System.out.println(age);
- return userDao.get(age);
- }
- // @RequestMapping("/showDao")
- // public Object showDao(int age) {
- // return userServicesImpl.showDao(age);
- // }
- }
@RestController是对应的restful风格的控制器,但是我这里直接用的@Controller
运行该项目,Run as - Maven Build
打开浏览器,输入:localhost:8088/b/showDao/27,运行的结果如下:
按名字查找年龄为27的user,如果直接在数据库中查找也会得到一样的结果:
- mysql> select * from users where age=27;
- +----+------+------+
- | id | name | age |
- +----+------+------+
- | 2 | b | 27 |
- +----+------+------+
- 1 row in set (0.00 sec)
总结
- Controller,Entity,Mapper都要在跟启动类HelloworldDemoApplication在同一个目录下,而且启动类要在外层,项目目录结构会在下面给出。
- 声明一个UserDao的接口,在Mapper文件夹下,其中用注解的形式写了SQL语句,而且要在接口的外面协商@Mapper(这是关键)
- 在Controller中,直接通过@Autowired将UserDao直接注入到Controller中,然后就可以在Controller中进行操作了。
项目工程目录
SpringBoot与Mybatis整合实例详解的更多相关文章
- MyBatis与Spring的整合实例详解
从之前的代码中可以看出直接使用 MyBatis 框架的 SqlSession 访问数据库并不简便.MyBatis 框架的重点是 SQL 映射文件,为方便后续学习,本节讲解 MyBatis 与 Spri ...
- SpringBoot与PageHelper的整合示例详解
SpringBoot与PageHelper的整合示例详解 1.PageHelper简介 PageHelper官网地址: https://pagehelper.github.io/ 摘要: com.gi ...
- 深入浅出mybatis之启动详解
深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- 《深入理解mybatis原理2》 Mybatis初始化机制详解
<深入理解mybatis原理> Mybatis初始化机制详解 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- 事件驱动模型实例详解(Java篇)
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类 ...
- Mybatis案例超详解(上)
Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...
- MyBatis Mapper XML 详解
MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...
随机推荐
- 一条经典SQL语句优化实例
1.概述 如下SQL语句发生严重消耗资源的问题,使得OS's load average会在30以上,一条语句需要执行上百秒. /*PIXPatient 184176条DomainPatient 184 ...
- BZOJ 3922 - Karin的弹幕
Karin的弹幕 Problem's Link ---------------------------------------------------------------------------- ...
- [工具使用] 如何访问github
1.ping github.com,记录github的ip:192.30.252.129 2.找到系统的 hosts文件位置: C:\Windows\System32\drivers\etc\host ...
- 【BZOJ】1637: [Usaco2007 Mar]Balanced Lineup(前缀和+差分+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1637 很神思想.. 前缀和应用到了极点... 我们可以发现当数量一定时,这个区间最前边的牛的前边一个 ...
- ThinkPHP项目笔记之模板篇
顾名思义:模板就是网页页面,有的是静态,有的的动态 基本语法: 1. <li><a href="{:U('User/searchlist')}">返回列表& ...
- 『Spring.NET+NHibernate+泛型』框架搭建之DAO(三)★
本节内容介绍Nhibernate所封装的数据库訪问层.只是我增加了泛型进行封装.大概思路:首先,我们有一个接口层,另一个相应的实现层.在接口层中我们先定义一个父接口,父接口中定义每个接口都可能会用到的 ...
- querySelectorAll 和getElementsByClassName的区别
querySelectorAll 返回的是映射 改变其值不会改变document 而getElementsByClassName 改变它就会改变document 摘自JavaScript权威指南(jQ ...
- hdu 1425:sort(排序,经典题。快排模板)
sort Time Limit : 6000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- Java去除所有非中文字符串
"fdsfjasd阿斯顿飞机阿斯蒂芬,,,,,,,,....".replaceAll("[^\u4E00-\u9FA5]", "");
- Angular2 兼容 UC浏览器、QQ浏览器、猎豹浏览器
找到/src/polyfills.ts文件 把/** IE9, IE10 and IE11 requires all of the following polyfills. **/下注释掉的代码恢复 ...