为了账号安全,请及时绑定邮箱和手机立即绑定

当Spring Boot遇见Mybatis(连接Mysql)

标签:
SpringBoot

前言

在本文中讲述了Spring Boot 如何整合Mybatis ,然后如何通过Mybaits连接到Mysql,项目是由gradle构建的,本文还讲述了controller层相关的知识。
Spring Boot 在Spring 家族现在混的风生水起,如果不是开发之前的老项目,那么几乎大多数人都在使用Spring Boot。使用的原因虽然有很多,但是归根结底的根本原因只有一个,那就是因为它太易用了,如果你想要创建一个最小的Spring Boot 项目可以看我的前面一篇文章与Spring Boot 初次见面,那么废话不多说,我们开始吧。
在这里首先附上这个项目的百度云 地址链接 密码:5050

准备工作

1.首先我们得需要先准备一个Spring Boot 工程

  1. 我们需要在本地安装上你需要连接的数据库,我这里使用的是Mysql数据库,这里给大家贴出mysql官网下载地址mysql 下载地址

  2. 对于新手来说,有可能通过命令行去使用数据库,太强人所难,我自己是使用 navicat这个工具进行连接的,下面给出navicat地址大家可以自行下载navicat 下载地址

正文

首先我们需要引入我们需要的mybatis相关的依赖。

这里多说一点,给大家推荐 maven repository 这个网站,无论你是使用maven或者是gradle进行构建的,你都可以在上面找到你要依赖的具体地址。

在build.gradle 中我们添加上需要的依赖:

//数据库连接驱动compile('mysql:mysql-connector-java:6.0.5') 
//配置mybatis 数据源compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1")

然后需要在application.properties中添加上需要配置的一些信息:

#设置数据库连接相关的参数spring.datasource.url=jdbc:mysql://localhost/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#配置mybatis 相关的参数mybatis.type-aliases-package: com.harry.first.entity

url中如果我们想使用自己的数据库,可以替换掉test就行,其他的参数分别代表的是时区以及编码格式(这个地方还是需要多加小心的,我之前就因为时区的问题,往数据库里用now()函数,结果发生了一直快一个小时的缘故,所以这里一定要注意。)
username是你数据库在安装时候设定的用户名,默认情况下会有一个root用户。
password是安装时候设定的密码,我当时是直接用yum进行下载的mysql,然后安装的时候,忘记设置了名字,后来又比较懒。所以你懂的。
接下来是设置好驱动的名字。
我在上一篇博客的时候,将java后端,进行了分层,分别是Controller,Service,Dao,以及entity。我们需要写的与数据库相关联的代码,就是放在了Dao层中。
使用Mybatis进行数据库的操作,我知道的一共有三种方式:

  • 通过java代码直接去调用SqlSession。在我看来,这种方式更像是我们曾经使用的JDBC,只不过mybatis已经给JDBC封装的很好了,我们已经不需要在进行connection,prepareStatement,resultSet等一系列繁琐的操作了。大致的过程是这样的:我们首先需要准备好一个mybatis-config.xml的文件名,里面写好了对mybatis的配置,紧接着通过流把文件的信息读进来,然后我们通过这些配置实例化出一个SqlSessionFactory(核心对象),再通过SqlSessionFactory.openSession()方法制造出SqlSession对象,再通过SqlSession对象对对应的数据库进行增删改查操作。我们对这种方式暂时不演示。详细的内容可以看下面的链接。Mybatis 核心对象

  • 我们也可以通过在resource包下创建一个mapper包,然后在mapper包下创建一个xml。这个xml与java包下=>dao包下的java文件是对应上的。xml中mapper标签里的namespace可以与dao接口中的接口名对应。xml中<select>,<update>,<insert>,<delete>标签中的id对应的是类中的方法名。(这种方法会在后面详细说,在这里有个概念就行。)

  • 封装的最好的应该就是这第三种方式了,我们只需要在dao包中的接口方法上面加上这个方法进行具体操作的注解即可。动动脑子就会知道,注解一共有@select,@update,@delete,@insert。虽然真是方便到了极致,但是封装的层次越高,对于开发人员,可以下手的范围也就越小,例如像动态sql,if,for这种在xml中可以进行的操作,就无法在这上面实现了。
    下面我们就进行实战演示。

真实项目演示

为了测试,我们首先创建一个user表然后创建表的sql如下:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

注解形式

然后我首先演示的是上文说的第三种方式,在dao包下创建UserDao接口,然后代码如下:

package com.harry.first.dao;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Options;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import com.harry.first.entity.User;public interface UserDao {    
    //返回的Integer值是受影响的行数
    @Insert("insert into user(name, age, password, email, phone) values(#{name}, #{age}, #{password}, #{email}, #{phone})")    //这是为了说明主键自增
    @Options(useGeneratedKeys = true, keyProperty = "id")    Integer addUser(User user);    
    @Update("update user set name=#{name},age=#{age},password=#{password},email=#{email},phone=#{phone}")    Integer updateUser(User user);    
    @Delete("delete from user where id = #{id}")    Integer deleteUser(Integer id);    
    @Select("select * from user ")    User getUser();

}

我在这里没有使用junit单元测试,而是直接使用了controller层定义api接口的方式,然后通过浏览器,进行访问,看是否插入成功。
创建一个UserController,下面的是controller层的代码:

package com.harry.first.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.harry.first.dao.UserDao;import com.harry.first.entity.User;@RestController@RequestMapping("/user")public class UserController {    
    @Autowired
    private UserDao userDao;    
    @GetMapping(value="/addUser")    public Integer addUser() {
        User user =new User("harry",22,"harry","912043310@qq.com","15566416991");        return userDao.addUser(user);
    }    
    @GetMapping("/updateUser")    public Integer updateUser() {
        User user =new User("luckyharry",22,"luckyharry","912043310@qq.com","15566416991");        return userDao.updateUser(user);
    }    
    @GetMapping("/deleteUser/{id}")    public Integer deleteUser(@PathVariable String id) {        return userDao.deleteUser(Integer.valueOf(id));
    }    @GetMapping("/getUser")    public User getUser() {        return userDao.getUser();
    }
}



作者:luckyHarry4
链接:https://www.jianshu.com/p/00c78e8ebeb7


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消