0、前言

  mybatis属于半自动的ORM,相比hibernate这种全自动的ORM,兼顾了性能与易用;目前企业项目中,基本都是mybatis的天下;今天就来整合mybatis与MySQL;

1、整合

  1.-1、添加依赖:

        <!-- 集成mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>

1-2、创建数据表:

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(32) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`userName` varchar(32) NOT NULL COMMENT '用户名称',
`passWord` varchar(50) NOT NULL COMMENT '用户密码',
`realName` varchar(32) DEFAULT NULL COMMENT '中文名字',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('', 'anson', '', '张三');
INSERT INTO `user` VALUES ('', 'Alex', '', '李四');
INSERT INTO `user` VALUES ('', 'kks', '', '王五');

1-3、增加实体类User.java

package com.anson.model;

public class User {
private Integer id;
private String username;
private String password;
private String realname;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname == null ? null : realname.trim();
}
}

1-4、增加Mapper接口UserMapper.java;注意添加@Repository注解

package com.anson.dao;

import com.anson.model.User;
import org.springframework.stereotype.Repository; @Repository //添加Repository注解
public interface UserMapper {
int deleteByPrimaryKey(Integer id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record);
}

1-5、添加Mapper对应的XML文件UserMapper.xml,注意<mapper namespace="com.anson.dao.UserMapper">对应Mapper包

<?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.anson.dao.UserMapper">
<resultMap id="BaseResultMap" type="com.anson.model.User">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="userName" jdbcType="VARCHAR" property="username" />
<result column="passWord" jdbcType="VARCHAR" property="password" />
<result column="realName" jdbcType="VARCHAR" property="realname" />
</resultMap>
<sql id="Base_Column_List">
id, userName, passWord, realName
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.anson.model.User">
insert into user (id, userName, passWord,
realName)
values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{realname,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.anson.model.User">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="username != null">
userName,
</if>
<if test="password != null">
passWord,
</if>
<if test="realname != null">
realName,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="username != null">
#{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="realname != null">
#{realname,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.anson.model.User">
update user
<set>
<if test="username != null">
userName = #{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
passWord = #{password,jdbcType=VARCHAR},
</if>
<if test="realname != null">
realName = #{realname,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.anson.model.User">
update user
set userName = #{username,jdbcType=VARCHAR},
passWord = #{password,jdbcType=VARCHAR},
realName = #{realname,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>

1-6、编写service接口UserService.java:

package com.anson.service;

import com.anson.model.User;

public interface UserService
{
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}

编写接口实现类UserServiceImpl.java,注意增加@Service注解:

package com.anson.service.Impl;

        import com.anson.dao.UserMapper;
import com.anson.model.User;
import com.anson.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* @description: service实现类
* @author: anson
* @Date: 2019/9/5 0:37
* @version: 1.0
*/
@Service
public class UserServiceImpl implements UserService
{
@Autowired
UserMapper usermapper; @Override
public User selectByPrimaryKey(Integer id)
{
return usermapper.selectByPrimaryKey(id);
}
@Override
public int deleteByPrimaryKey(Integer id)
{
return usermapper.deleteByPrimaryKey(id);
}
@Override
public int insert(User record)
{
return usermapper.insert(record);
}
@Override
public int insertSelective(User record)
{
return usermapper.insertSelective(record);
}
@Override
public int updateByPrimaryKeySelective(User record)
{
return usermapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(User record)
{
return usermapper.updateByPrimaryKey(record);
} }

1-7、编写controller:

package com.anson.controller;

import com.anson.model.User;
import com.anson.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
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.RequestMethod;
import org.springframework.web.bind.annotation.RestController; /**
* @description: TODO
* @author: anson
* @Date: 2019/9/5 0:42
* @version: 1.0
*/ @RestController
@Api(value = "用户接口")
@RequestMapping("/user")
public class UserController
{
@Autowired
private UserService userservice; @ApiOperation(value = "获取用户", notes = "根据id查询用户信息")
@ApiImplicitParam(name = "id", value = "用户id", required=true, dataType="int") //API参数
@RequestMapping(value="/getUserById/{id}",method= RequestMethod.GET)
public User selectByPrimaryKey(@PathVariable int id)
{
return userservice.selectByPrimaryKey(id);
}
}

1-8、启动类中增加包扫描注解:

@SpringBootApplication
@MapperScan("com.anson.dao") //增加Mapper包扫描注解
public class application
{
public static void main(String[] args)
{
SpringApplication.run(application.class,args);
}
}

1-9、配置文件中增加数据源和mybatis的注解:

#服务器配置
server.port=8090 #mysql数据源配置
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password =88888888 #mybatis配置
mybatis.type-aliases-package=com.anson.model
mybatis.mapperLocations=classpath:mapper/*Mapper.xml #showSql
logging.level.com.anson.dao=debug

好了,完毕,运行,可以在swagger中查看和运行接口:

可以看到已经正常运行了;

好了,本节到此为止,下节将讲介绍mybatis-generator自动生成实体、mapper和mapper对应的XML

源码地址:https://github.com/anson-yang/cloverDemo.git

小白的springboot之路(三)、集成mybatis与MySQL的更多相关文章

  1. 小白的springboot之路(一)、环境搭建、第一个实例

    小白的springboot之路(一).环境搭建.第一个实例 0- 前言 Spring boot + spring cloud + vue 的微服务架构技术栈,那简直是爽得不要不要的,怎么爽法,自行度娘 ...

  2. 小白的springboot之路(十五)、mybatis的PageHelper分页插件使用

    0.前言 用mybatis,那么分页必不可少,基本都是用PageHelper这个分页插件,好用方便: 1.实现 1.1.添加依赖: <!-- 3.集成 mybatis pagehelper--& ...

  3. SpringBoot 集成Mybatis 连接Mysql数据库

    记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...

  4. SpringBoot 入门教程:集成mybatis,redis

    SrpingBoot相较于传统的项目具有配置简单,能快速进行开发的特点,花更少的时间在各类配置文件上,更多时间在具体业务逻辑上. SPringBoot采用纯注解方式进行配置,不喜欢xml配置的同学得仔 ...

  5. 小白的springboot之路(十六)、mybatis-plus 的使用

    0-前言 mybatis plus是对mybatis的增强,集成mybatis plus后,简单的CRUD和分页就不用写了,非常方便,五星推荐: 1-集成 1-1.添加依赖 <!-- .集成my ...

  6. Spring Boot(六)集成 MyBatis 操作 MySQL 8

    一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集. ...

  7. 小白的springboot之路(二)、集成swagger

    0-前言 现在的项目开发,基本都是前后端分离,后端专注于API接口开发,都需要编写和维护API接口文档.如果你还在用Word来编写接口文档,那你就out了,这个时候,当当当当~神兵利器swagger隆 ...

  8. 小白的springboot之路(五)、集成druid

    0-前言 Druid阿里巴巴开源的一个java数据库连接池,是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能:集成它能够方便我们对数据库连接进行监控和分析,下面我们来集成它: ...

  9. 小白的springboot之路(十二)、集成log4j2日志

    0.前言 日志记录对系统来说必不可少,spring boot中常用的日志组件有log4j.logback.log4j2,其中logback是spring boot默认的,已自带:选用log4j2就可以 ...

随机推荐

  1. USACO 07DEC 道路建设(Building Roads)

    Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he ...

  2. 如何在SqlServer中使用层级节点类型hierarchyid

    Sql Server2008开始新增的 hierarchyid 数据类型使存储和查询层次结构数据变得更为简单. 为了使用这个类型,笔者在此进行简单记录,同时为需要的朋友提供一个简单的参考. --获取层 ...

  3. css3关于body的默认滑动机制

    css关于body的默认滑动机制 大家都知道 body里面只要高度超出了原来的高度就可以滚动要取消这个机制 只能设置height:100% overflow:hidden就能取消了

  4. linux破解密码

    1.关机2.按e进入grub 3.在linux16行末尾输入 rd.break console=tty1   4.按ctrl+“X”执行.  5.输入 mount -o remount,rw /sys ...

  5. python中字符串常见操作(二)

    # 可迭代对象有:字典,列表,元组,字符串,集合 str1 = '192.168.1.1' str2 = 'as df gh jk' str3 = '小李子' str4 = ['aa','bb','c ...

  6. 两张图弄懂函数的递归(以golang为例)

    函数递归时要遵守的原则: 执行一个函数时,就要创建一个新的受保护的独立空间(新函数栈) 函数的局部变量是独立的,不会相互影响: 递归必须向退出递归的条件逼近,否则就会无限递归: 当一个函数执行完毕,或 ...

  7. 使用 MUI 自制 弹出层

    使用 MUI 自制 弹出层 <div class="zp-mask" style="display: none; width: 100%;height: 100%; ...

  8. 802.11r协议理解

    首先阅读了相关协议内容整理出了如下的802.11r时序图所谓基础,然后会详细理解其中的每一个步骤:

  9. 领扣(LeetCode)两数之和II - 输入有序数组 个人题解

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...

  10. Lab8:文件系统

    文件系统的概念 文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能 文件是具有符号名,由字节序列构成的数据项集合 文件系统的功能 分配文件磁盘空间 管理文件块(位置和顺序) 管理空闲空 ...