时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了。闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主流框架的情况下,今天在这里就直接将mybatis整合spring boot了。

  先简单地提一下Spring boot。在Mybatis还没火起来之前,大家用的是SSH(Struts2+Spring+Hibernate),之后mybatis以其小巧轻便的优点成为中小型项目的首选,与此同时基于Spring的自家mvc框架SpringMVC也火起来了,于是开发的框架又成了SSM(SpringMVC+Spring+Mybatis),但是Spring和Spring MVC本是同源,叫起来还得分开叫真是头疼,然后Spring boot出现了,它是基于Spring4的条件注册的一套快速开发整合包,同时又整合了Spring MVC了,所以说SpringMVC的那一套注解可以原封不动地搬来用。同时Spring boot为了解决Spring框架需要进行大量的配置的问题又引入自动配置的概念,也就是说能用注解我绝不用配置文件。关于Spring boot具体一点的东西我就直接在下面结合代码里讲了。

  首先呢,新建一个maven项目,记得勾选上create a simple project

之后的Group id、Artifact Id之类的就可以随便填了,以下是我建好的项目结构

项目建好后第一件事,添加依赖

  <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

解释一下几个关键的包

  • spring-boot-starter-parent:项目可以通过继承spring-boot-starter-parent包来获得一些合理的默认配置,在在dependencies里的部分配置可以不用填写version信息,自动继承parent包的版本,当然也可以不用。
  • spring-boot-starter:这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
  • spring-boot-starter-web:构建Web,包含RESTful风格框架SpringMVC和默认的嵌入式容器Tomcat,就是这个包整合了Spring mvc,同时自带嵌入式tomcat意味着我们启动项目时就只要运行main方法就行,不用再跑eclipse上自带的tomcat了
  • mybatis-spring-boot-starter:这个就没什么好说的,官方提供的spring boot和mybatis的整合包。

包导完之后我的习惯是先把整个项目的包结构搭建起来

然后在最外层的包里面写启动类,老规矩先贴代码

package com.fiberhome;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

这里只有一个注解@SpringBootApplication,但是作用却大得惊人,control键然后点击该注解看源码可知它替代了@@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的功能。接下来解释这个三个注解的作用,理解了这三个注解,自然理解了@SpringBootApplication。

  • @SpringBootConfiguration:该注解继承自@Configuration,一般与@Bean配合使用,使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。
  • @EnableAutoConfiguration:该注解的意思就是Springboot可以根据你添加的jar包来配置你项目的默认配置,比如当你添加了mvc的jar包,它就会自动配置web项目所需的配置
  • @ComponentScan:顾名思义该注解是用来扫描组件的,只要组件上有@component及其子注解@Service、@Repository、@Controller等,springboot会自动扫描到并纳入Spring 容器进行管理,有点类似xml文件中的<context:component-scan>,该注解不填属性的话就是默认扫描启动类所在的包,或者启动类所在包的下一级,所以启动类要放在最外层

紧接着把我的实体类(User.java)代码贴出来

package com.fiberhome.pojo;

import org.springframework.stereotype.Component;

@Component
public class User { private Long id;
private String username;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

然后我们从底层的代码写起,先是mapper接口

package com.fiberhome.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.fiberhome.pojo.User;
@Mapper
public interface UserMapper { //获取用户名单
public List<User> getUser() throws Exception;
//根据id删除用户
public void deleteUser(int id)throws Exception;
//新增用户
public void addUser(User user)throws Exception;
}

然后是对应该mapper接口的user.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fiberhome.mapper.UserMapper">
<select id="getUser" resultType="com.fiberhome.pojo.User">
select * from user
</select>
<delete id="deleteUser" parameterType="Integer">
delete from user where id =#{id}
</delete>
<insert id="addUser" parameterType="com.fiberhome.pojo.User">
insert into user(id,username,age)values(#{id},#{username},#{age})
</insert>
</mapper>

紧接着是Service层的代码

UserService.java

package com.fiberhome.service;

import java.util.List;
import com.fiberhome.pojo.User; public interface UserService {
//显示所有用户
public List<User>getUser()throws Exception;
//根据id删除用户
public void deleteUser(int id)throws Exception;
//新增用户
public void addUser(User user)throws Exception;
}

UserServiceImpl.java

package com.fiberhome.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.fiberhome.mapper.UserMapper;
import com.fiberhome.pojo.User;
@Service
public class UserServiceImpl implements UserService { @Autowired
private UserMapper userMapper;
@Override
public List<User> getUser() throws Exception {
return userMapper.getUser();
}
//根据id删除用户
@Override
public void deleteUser(int id) throws Exception {
userMapper.deleteUser(id);
}
//新增用户
@Override
public void addUser(User user) throws Exception {
userMapper.addUser(user);
}
}

最后是Controller代码

package com.fiberhome.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fiberhome.pojo.User;
import com.fiberhome.service.UserService; @RestController
public class UserController { @Autowired
private UserService userService;
@Autowired
private User user;
//显示用户
@RequestMapping("list")
public List<User> index() throws Exception {
return userService.getUser();
}
//删除用户
@RequestMapping("delete/{id}")
public String delete(@PathVariable int id) throws Exception {
userService.deleteUser(id);
return "你已经删掉了id为"+id+"的用户";
}
//增加用户
@RequestMapping("addUser")
public String addUser() throws Exception {
user.setAge(33);
user.setUsername("阿花");
userService.addUser(user);
return "增加用户";
}
}

以上代码已经写得很明白了,也没什么可解释的。值得注意的是为了将mapper装配到spring容器中去,要在mapper接口中加上@Mapper注解,或者在启动类中加上@MapperScan(“包路径”)注解。到了这里基本完工了,还差一个application.properties文件,用于存放数据库连接信息和mapper.xml文件位置

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations: classpath:mapper/*.xml

运行的时候只需运行启动类的main方法即可,由于springboot嵌入了tomcat,所以项目跑起来后tomcat会自启。

到这里mybatis和springboot就整合完了,有人可能会想,既然省了这么多xml文件,有没有方法可以连user.xml文件一起省了,答案是当然有了,接下来我还会带来mybatis注解开发,敬请期待。。。

  

Spring boot整合Mybatis的更多相关文章

  1. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  2. spring boot 整合 mybatis 以及原理

    同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...

  3. Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题

    现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...

  4. Spring Boot整合Mybatis报错InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider

    Spring Boot整合Mybatis时一直报错 后来发现原来主配置类上的MapperScan导错了包 由于我使用了通用Mapper,所以应该导入通用mapper这个包

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

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

  6. Spring Boot整合Mybatis完成级联一对多CRUD操作

    在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...

  7. Spring Boot系列(三):Spring Boot整合Mybatis源码解析

    一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...

  8. 太妙了!Spring boot 整合 Mybatis Druid,还能配置监控?

    Spring boot 整合 Mybatis Druid并配置监控 添加依赖 <!--druid--> <dependency> <groupId>com.alib ...

  9. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

随机推荐

  1. springboot情操陶冶-jmx解析

    承接前文springboot情操陶冶-@Configuration注解解析,近期笔者接触的项目中有使用到了jmx的协议框架,遂在前文的基础上讲解下springboot中是如何整合jmx的 知识储备 J ...

  2. Spring Boot 2.x(六):优雅的统一返回值

    目录 为什么要统一返回值 ReturnVO ReturnCode 使用ReturnVO 使用AOP进行全局异常的处理 云撸猫 公众号 为什么要统一返回值 在我们做后端应用的时候,前后端分离的情况下,我 ...

  3. BUG心得

    在<程序员,你会从 Bug 中学习么?>一文中,我写了我是怎样追踪这些年遇到的最有趣 bug 的.最近我重新浏览了这所有的 194 个条目(历时 13 年),看看我从这些 bug 中学到了 ...

  4. express中间件系统的基本实现

    一直觉得express的中间件系统这种流式处理非常形象,就好像加工流水线一样,每个环节都在针对同一个产品的不同部分完成自己的工作,最后得到一个成品.今天就来实现一个简易的[中间件队列]. 一. API ...

  5. Lucene.Net3.0.3+盘古分词器学习使用

    一.Lucene.Net介绍 Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索 ...

  6. 面向对象的一小步:添加ActiveRecord的Scope功能

    问题场景 我们用Yii2的ActiveRecord功能非常的方便,假如我们有个Model叫Student,那么ActiveQuery可以通过这种方式轻便地获得: $query = Student::f ...

  7. 前端入门13-JavaScript进阶之原型

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  8. Adaptive Placeholders

    https://wisdmlabs.com/blog/create-adaptive-placeholders-using-css/ https://circleci.com/blog/adaptiv ...

  9. 把vux中的@font-face为base64格式的字体信息解码成可用的字体文件

    在最近移动端项目中用到了vux,感觉用着还习惯,当把vux使用到PC端的时候出现了IE浏览器出现,这样的错误信息: CSS3114: @font-face 未能完成 OpenType 嵌入权限检查.权 ...

  10. Linux 中NFS服务器的搭建

    serve端IP:192.168.2.128 客户端IP:192.168.2.131 server端配置: 1.安装nfs,rpcbind,可以参考Linux 中yum的配置来安装: yum inst ...