springboot集成mybatis+通用mapper+mybatis-generator

springboot集成mybatis+通用mapper+mybatis-generator

前言

在java后端开发中,springboot已然成为主流框架为广大程序员所喜爱,因为springboot的极简配置性、与第三方的集成配置真的是做得非常优秀,用起来舒服得不要不要的,因此这一篇文章就来玩一下一些框架插件的集成。
先简单介绍一下每个框架或插件的功能和用途:

mybatis

mybatis是一个不完全的orm框架,支持定制化 SQL、存储过程以及高级映射。优化了JDBC操作访问数据库的同时,保留了由程序员自己定制化编写sql的传统,比较灵活

通用mapper

通用mapper封装了一些简单的对数据库的增删改查操作,减少了程序员编写一些简单的sql语句的麻烦,但比较遗憾的是只支持对单表的操作,即是涉及到多表的联合查询、关联之类的操作都不支持,只得乖乖自己写代码。

mybatis-generator

这个插件可以帮助我们自动生成与数据库表对应的实体类、mapper接口和mapper.xml文件,简化创建过程

创建springboot的maven工程

在idea的初始界面点击Create New Project,选择spring initializer,一路next即可。
在这里插入图片描述

完整的pom.xml

添加各个框架的依赖包,如下

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.gjx</groupId>
	<artifactId>mybatis_mapper</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>mybatis_mapper</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--web依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--Mybatis依赖-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!--mybatis通用mapper依赖-->
		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>2.0.2</version>
		</dependency>
		<!--数据库连接依赖-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!--单元测试依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.6</version>
				<configuration>
					<!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
					<overwrite>true</overwrite>
				</configuration>
				<dependencies>
					<!--mysql驱动包-->
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.45</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>
</project>

集成mybatis

1、引入依赖

因上一步完整的pom.xml中已经引入了mybatis的依赖,此步已经完成,相关依赖请看pom.xml中注释

2、编写application.yml文件

在yml中配置数据库链接,mybatis配置,如下

#端口配置
server:
  port: 8088
#jdbc配置
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mppro?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: root
#mybatis配置
mybatis:
#实体类所在包名,mybatis需要设置locations
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.gjx.mybatis_mapper.entity
3、创建数据库表
CREATE TABLE `user` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `userName` varchar(32) NOT NULL,
  `passWord` varchar(50) NOT NULL,
  `realName` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
4、创建UserMapper.xml、User实体类

在resources下创建mapper包,用于存放与dao接口想对应的xml文件,UserMapper.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.gjx.mybatis_mapper.dao.UserMapper">

    <resultMap id="BaseResultMap" type="com.gjx.mybatis_mapper.entity.User">
        <result 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>

    <select id="Sel" resultType="com.gjx.mybatis_mapper.entity.User">
        select * from user where id = #{id}
    </select>
</mapper>

User实体类,放于entity包

package com.gjx.mybatis_mapper.entity;

import org.springframework.stereotype.Repository;
import javax.persistence.*;

/**
 * @Author gjx
 * @email 13450753745@163.com
 * @description
 * @Date 2019/11/5
 */
@Repository
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "userName")
    private String userName;
    @Column(name = "passWord")
    private String passWord;
    @Column(name = "realName")
    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;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    public String getRealName() {
        return realName;
    }
    public void setRealName(String realName) {
        this.realName = realName;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", realName='" + realName + '\'' +
                '}';
    }
}
5、controller/service/impl

controller

package com.gjx.mybatis_mapper.controller;

import com.gjx.mybatis_mapper.entity.User;
import com.gjx.mybatis_mapper.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
/**
 * @Author gjx
 * @email 13450753745@163.com
 * @description
 * @Date 2019/11/5
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/getUser")
    @ResponseBody
    public String GetUser(){
        return userService.Sel(1).toString();
    }
    @RequestMapping("/list")
    @ResponseBody
    public List<User> getAll(){
        return userService.getAll();
    }
}

service

package com.gjx.mybatis_mapper.service;

import com.gjx.mybatis_mapper.entity.User;
import java.util.List;
public interface UserService {
    public User Sel(int id);
    List<User> getAll();
}

impl

package com.gjx.mybatis_mapper.service.impl;

import com.gjx.mybatis_mapper.dao.UserMapper;
import com.gjx.mybatis_mapper.entity.User;
import com.gjx.mybatis_mapper.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @Author gjx
 * @email 13450753745@163.com
 * @description
 * @Date 2019/11/5
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;
    @Override
    public User Sel(int id) {
        return userMapper.Sel(id);
    }
    @Override
    public List<User> getAll() {
        return userMapper.selectAll();
    }
}
6、演示

启动项目后,访问 http://localhost:8088/user/list,结果如下,
在这里插入图片描述
集成mybatis成功

集成generator

1、导入依赖

此步省略,在之前已引入完整包

2、创建generatorConfig.xml配置文件

在src/main/resources目录创建generatorConfig.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

    <!-- defaultModelType="flat" 设置复合主键时不单独为主键创建实体 targetRuntime设置为MyBatis3Simple表示不生成example -->
    <context id="MySql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!-- 生成的POJO实现java.io.Serializable接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <!--注释-->
        <commentGenerator>
            <!-- 去掉生成的实体类、dao等文件中的注释 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 将数据库中表的字段描述信息添加到注释 -->
            <property name="addRemarkComments" value="true"/>
            <!-- 注释里不添加日期 -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!-- 数据库连接 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mppro"
                userId="root"
                password="root"/>

        <!-- 生成POJO对象,并将类放到com.songguoliang.springboot.entity包下 -->
        <javaModelGenerator targetPackage="com.gjx.mybatis_mapper.entity" targetProject="src/main/java">
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成mapper xml文件,并放到resources下的mapper文件夹下 -->
        <sqlMapGenerator targetPackage="mapper"  targetProject="src/main/resources"></sqlMapGenerator>


        <!-- 生成mapper xml对应dao接口,放到com.songguoliang.springboot.mapper包下-->
        <javaClientGenerator targetPackage="com.gjx.mybatis_mapper.dao" targetProject="src/main/java" type="XMLMAPPER"></javaClientGenerator>

        <!-- table标签可以有多个,至少一个,tableName指定表名,可以使用_和%通配符 -->
        <table tableName="t_room_use">
            <!-- 是否只生成POJO对象 -->
            <property name="modelOnly" value="false"/>
            <!-- 数据库中表名有时我们都会带个前缀,而实体又不想带前缀,这个配置可以把实体的前缀去掉
              注意:匹配规则时要注意首字母必须为大写
            -->
            <domainObjectRenamingRule searchString="^T" replaceString=""/>
        </table>
    </context>
</generatorConfiguration>
3、创建一个数据库表t_room_use
CREATE TABLE `t_room_use` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键Id',
  `floor_code` varchar(255) DEFAULT NULL COMMENT '楼层编码',
  `which_floor` varchar(255) DEFAULT NULL COMMENT '所在楼层',
  `room_number` varchar(255) DEFAULT NULL COMMENT '房间号',
  `area` decimal(10,2) DEFAULT NULL COMMENT '面积',
  `application` varchar(255) DEFAULT NULL COMMENT '用途',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4384 DEFAULT CHARSET=utf8;
4、pom.xml文件添加mybatis插件
<plugin>
	<groupId>org.mybatis.generator</groupId>
	<artifactId>mybatis-generator-maven-plugin</artifactId>
	<version>1.3.6</version>
	<configuration>
		<!-- 是否覆盖,true表示会替换生成的JAVA文件,false则不覆盖 -->
		<overwrite>true</overwrite>
	</configuration>
	<dependencies>
		<!--mysql驱动包-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.45</version>
		</dependency>
	</dependencies>
</plugin>
5、运行插件

如下
在这里插入图片描述
运行后即生成了如下类和xml
在这里插入图片描述
集成generator成功

集成通用mapper

1、修改application.xml文件

将如下内容复制粘贴

#通用mapper配置
mapper:
#公用接口类路径
  mappers: com.gjx.mybatis_mapper.baseDao.IBaseDao
  identity: MYSQL
2、导入依赖

此步省略

3、在需要使用通用mapper的mapper接口中继承IBaseDao
@Respository
public interface UserMapper extends IBaseDao<User>{}
4、在实体类中添加相关注解
/**
* 必须加@Repository和@Table
* 以及在属性中标明主键注解,和@Column
*/
@Repository
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "userName")
    private String userName;
    @Column(name = "passWord")
    private String passWord;
    @Column(name = "realName")
    private String realName;
}
5、测试

创建UserService后在方法中调用userMapper的方法,可以看到在userMapper中没有写方法然而却多了很多方法,这些都是通用mapper自带的方法,减少我们编写一些简单的增删改查方法
在这里插入图片描述
集成通用mapper成功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值