springboot+mybatis+maven+generator反向工程+mysql

  1. 利用maven构建基础工程
  2. 配置pom.xml
  3. 配置generator反向工程生成实体类
  4. 按照J2EE的开发方式 创建dao层 , service层 ,control层

参考该博主的博文,如侵删

一、利用maven构建基础工程

首先new 一个新的project,选择Spring Initializr,我用的是java1.8的版本,这里特别留意版本,后面有说遇到的坑

在这里插入图片描述
这里选择依赖包,web,JPA,MySQL,MyBatis,然后pom.xml就会自动帮你加入
在这里插入图片描述
最后一直next,finish就生成一个基础的项目了。(通常情况下,右下角有提示你是否下载maven依赖包,如果没有提示,可以选上面栏目的build下的build project )
在这里插入图片描述

二.配置pom.xml

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 http://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.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.wtg</groupId>
    <artifactId>newframework</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>newframework</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </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>
            <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.2</version>
                <configuration>
                    <configurationFile>src\main\resources\generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!--因为上面选了java8,这里就不需要加这个依赖-->
            <!--<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <verbose />&lt;!&ndash; 这个选项用来传递编译器自身不包含但是却支持的参数选项 &ndash;&gt;
                        &lt;!&ndash; <bootclasspath>${java.home}/lib/rt.jar:${java.home}/jre/lib/jce.jar</bootclasspath> &ndash;&gt;
                    </compilerArguments>
                </configuration>
            </plugin>-->
        </plugins>
    </build>
</project>

三、配置generator反向工程生成实体类

备注:上面的步骤完成之后,如果直接运行的话,会报错:Failed to determine a suitable driver class…(因为我们pom.xml里面集成了mybatis,但是却没有数据库的配置),如果是想写一个Hello World的入门的话,在添加依赖包的时候,只添加一个web就行了
在这里插入图片描述
反向工程配置文件:
        1.generator.properties

#dao类和实体类的位置
project=src/main/java

#mapper文件的位置
resources=src/main/resources

#配置数据库的驱动名称,链接地址,用户名,密码
#com.mysql.cj.jdbc.Driver这个是最新的jdbc.driver(jdbc驱动名称)、
#我用的mysql-connector-java-5.1.6.jar,下面配置有说,注意点①
#低版本用的是com.mysql.jdbc.Driver,具体名称要根据版本来决定
#下载地址:https://download.csdn.net/download/a3311743/10920580
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/frame_test
jdbc.user=root
jdbc.password=88888

        2.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>

    <!-- 引入配置文件,这里就是上面的generator.properties,里面声明了反向工程的配置 -->
    <properties resource="generator.properties"/>
    
    <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置,和上面的注意点①对应 -->
    <classPathEntry location="E:\Development-Software\mysql-connector-java-5.1.6.jar" />

    <!--一个数据库一个context -->
    <!--defaultModelType:用于设置产生的模型类型
          defaultModelType=flat——每一张表只生成一个实体类;
          还有conditional,hierarchical类型,常用的就flat,
          targetRuntime:1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
                         2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;注意点②
                         这里用的MyBatis3,因为MyBatis3Simple只生成了insert的方法,具体原因未明,有知道可以留言探讨-->
    <context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
    
        <!-- autoDelimitKeywords:自动识别数据库关键字,默认false,如果设置为true,
        根据SqlReservedWords中定    义的关键字列表;一般保留默认值,
        遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
        <property name="autoDelimitKeywords" value="true" />
        
        <!-- javaFileEncoding:生成的Java文件的编码 -->
        <property name="javaFileEncoding" value="utf-8" />
        
        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
        <property name="beginningDelimiter" value="`" />
        <property name="endingDelimiter" value="`" />

        <!-- 格式化java代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        
        <!-- 格式化XML代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        
        <!--实现了Serializable接口,实体类中的private static final long serialVersionUID = 1L;-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
        
        <!--实体类生成tostring方法-->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

        <!-- 数据库的注释是否需要映射 -->
        <commentGenerator >
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 ,true—取消,false—映射-->
            <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳,true—取消,false—生成-->
        </commentGenerator>

        <!-- jdbc连接,通过${}可读取generator.properties的配置信息 -->
        <jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.user}" password="${jdbc.password}" />
        
        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 
           forceBigDecimals: true:        使用BigDecimal对应DECIMAL和 NUMERIC数据类型
           forceBigDecimals: false:默认,   scale>0;length>18:使用BigDecimal;
                                            scale=0;length[10,18]:使用Long;
                                            scale=0;length[5,9]:使用Integer;
                                            scale=0;length<5:使用Short;
         -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- javaModelGenerator :java模型创建器 
        targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
        targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
        enableSubPackages:默认为false,为true时,在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下
        trimStrings:true时,设置是否在getter方法中,对String类型字段调用trim()方法
        -->
        <javaModelGenerator targetProject="${project}"  targetPackage="com.demo.entity" >
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        
        <!-- 生成mapxml文件 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="${resources}" >
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        
        <!-- 对于mybatis来说,即生成Mapper接口(dao层),注意,如果没有配置该元素,那么默认不会生成Mapper接口
        targetPackage:同javaModelGenerator
        targetProject:同javaModelGenerator
        type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
              1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
              2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
              3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
        注意点②,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
    -->
        <javaClientGenerator targetPackage="com.demo.dao" targetProject="${project}" type="XMLMAPPER" >
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        
        <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
         <!--tableName:表名,注意大小写敏感问题 
		     enableInsert(默认true):指定是否生成insert语句;
             enableSelectByPrimaryKey:默认true,指定是否生成按照主键查询对象的语句(就是getById或get);
             enableSelectByExample:默认true,MyBatis3Simple为false,指定是否生成动态查询语句;
             enableUpdateByPrimaryKey:默认true,指定是否生成按照主键修改对象的语句(即update);
             enableDeleteByPrimaryKey:默认true,指定是否生成按照主键删除对象的语句(即delete);
             enableDeleteByExample:默认true,MyBatis3Simple为false,指定是否生成动态删除语句;
             enableCountByExample:默认true,MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);
        12,enableUpdateByExample:默认true,MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性); -->
        <table tableName="userinfo" 
               enableCountByExample="true" 
               enableUpdateByExample="true" 
               enableDeleteByExample="true" 
               enableSelectByExample="true" 
               selectByExampleQueryId="true">
            <property name="useActualColumnNames" value="false" />
        </table>
    </context>
</generatorConfiguration>

找到View—Tool Windows—Maven Project—Plugins—mybatis-generator,右键Run Maven Build
在这里插入图片描述
就能生成
在这里插入图片描述

四. 按照J2EE的开发方式 创建dao层 , service层 ,control层

方法一
运用UserMapper.xml来增删改查,这方法后面再补充

方法二
**原理:**入口在UserControl,然后UserControl中调用UserService接口方法,UserServiceImpl中继承UserService接口,重写方法(方法中调用UserinfoMapper的操作)
访问顺序:UserControl——UserService——UserServiceImpl——UserinfoMapper
创建顺序:UserService——UserServiceImpl——UserinfoMapper——UserControl、

UserService.java

package com.demo.service;

import com.demo.entity.Userinfo;

public interface UserService {

    public void insert(Userinfo user);

    public void insertSelective(Userinfo user);

    public void delete(String id);

    public void update(Userinfo user);

    public Userinfo select(String id);

}

UserServiceImpl.java

package com.demo.service.imp;


import com.demo.dao.UserinfoMapper;
import com.demo.entity.Userinfo;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserinfoMapper userinfoMapper;

    @Override
    public void insert(Userinfo user) {
        userinfoMapper.insert(user);
    }

    @Override
    public void insertSelective(Userinfo user) {
        userinfoMapper.insertSelective(user);
    }

    @Override
    public void delete(String id) {

    }

    @Override
    public void update(Userinfo user) {

    }

    @Override
    public Userinfo select(String id) {
        return null;
    }
}

UserMapper.java

package com.demo.dao;

import com.demo.entity.Userinfo;
import com.demo.entity.UserinfoExample;
import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Mapper
public interface UserinfoMapper {
    int countByExample(UserinfoExample example);

    int deleteByExample(UserinfoExample example);

//    @Insert("INSERT INTO userinfo (user_id,user_name,user_age) values ( #{userId},#{userName},#{userAge})")
    int insert(Userinfo record);
	
	@Insert("这里是sql")
    int insertSelective(Userinfo record);

	@Insert("这里是sql")
    List<Userinfo> selectByExample(UserinfoExample example);

	@update("这里是sql")
    int updateByExampleSelective(@Param("record") Userinfo record, @Param("example") UserinfoExample example);

	@update("这里是sql")
    int updateByExample(@Param("record") Userinfo record, @Param("example") UserinfoExample example);
}

UserControl.java

package com.demo.control;

import com.demo.entity.Userinfo;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserControl {

    @Autowired
    private UserService userService;

    @RequestMapping("/hello")
    public String hello(){
        return "hello";
    }

    @RequestMapping("/insert")
    public String insert(Userinfo user){

        userService.insert(user);
        return user.getUserName();
    }

}

五、运行

上面的文件建好之后,再在NewframeworkApplication.java(启动类)中添加
@SpringBootApplication
@MapperScan(“com.demo.dao”)
再运行这个方法(图中红框)
在这里插入图片描述

在地址栏上输入链接:http://localhost:8080/insert?userId=4&userName=22&userAge=33
数据就插入到数据库了
在这里插入图片描述
在这里插入图片描述

附录:

文件结构图
在这里插入图片描述
数据库字段:
在这里插入图片描述

如果看了觉得好,请点个赞~你的支持是博主努力的动力!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值