springboot集成mybatis及mybatis generator工具入门

本人从网上找了许多springboot集成mybatis的文章,都没有跑通,只能亲自边写边百度,才写出真正可以跑起来的程序,因为即使springboot与mybatis的版本与博主的不一样,都有可能跑不起来。版本不兼容真是个痛。

一、第一种方法,首先集成mybatis,手写mapper.xml,让程序能跑起来

整个工程目录结果如下:

springboot集成mybatis及mybatis generator工具入门_第1张图片

pom.xml配置如下:



	4.0.0

	com.example
	springbootmybais
	0.0.1-SNAPSHOT
	jar

	springbootmybais
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	

		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.3.2
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	



application.properties内容如下:该文件配置了数据库、mybatis需要配置的东西。

spring.application.name=sprong-boot-mybatis
server.port=8080
server.servlet.context-path=/

#mybatis mapper文件的位置,Sql语句所在文件
mybatis.mapper-locations=classpath*:mapping/*.xml
#扫描pojo类的位置,在此处指定扫描实体类的包,该文件中定义了操作数据库的接口
mybatis.type-aliases-package=com.example.springbootmybais.model

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

UserDao内容如下:该文件定义了操作数据库的接口。
package com.example.springbootmybais.mapper;

import com.example.springbootmybais.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper //加上该注解才能使用@MapperScan扫描到
public interface UserDao {
    User getUserById(@Param("id") int id);

    int updateUser(@Param("user") User user);

    int insertUser(@Param("user") User user);

    int deleteUserById(@Param("id") int id);
}

model-user内容如下,即java实体:

package com.example.springbootmybais.model;

public class User {
    private String id;

    private String username;

    private String password;

    public String getId() {
        return id;
    }

    public void setId(String 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserMapper内容如下:该文件比较重要,他是连接UserDao与User的桥梁,即数据库接口与实体对象的桥梁,里面可以写数据库语句。注意namespace字段需要填写dao文件位置。





  
  
    UPDATE user
    SET username = #{user.username},
    username = #{user.username},
    password = #{user.password}
    WHERE id = #{user.id}
  
  
    INSERT INTO
    user(id, username, password)
    VALUES (
    #{user.id},
    #{user.username},
    #{user.password}
    )
  
  
    DELETE user WHERE id = #{id}
  

Application内容如下:主要需要配置@MapperScan扫描对应的mapper,即数据库接口

package com.example.springbootmybais;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.springbootmybais.mapper")
public class SpringbootmybaisApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootmybaisApplication.class, args);
	}
}

本人用的mysql数据库,所以也需要在mysql数据库中建立相应的表。如下图为本人数据库:

springboot集成mybatis及mybatis generator工具入门_第2张图片

为了验证代码写的是否有无,并且是否可以正确查询数据库,所以建立了controller,通过访问web来实现验证代码是否无。

controller内容如下:

package com.example.springbootmybais.controller;

import com.example.springbootmybais.mapper.UserDao;
import com.example.springbootmybais.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Autowired
    private UserDao userDao;

    @RequestMapping("/hello")
    public String hello(){
        User user = userDao.getUserById(2);
        System.out.println(user.toString());
        return user.toString();
    }

}

然后启动Application,看看效果如下,当启动成功后,通过访问http://localhost:8080/hello,可以看到查询数据库成功,查询到了对应的user。哈哈,终于成功了!!!

springboot集成mybatis及mybatis generator工具入门_第3张图片

二、第二种方法,使用注解,不需要在resources文件下创建mapping文件

在java的mapper下创建UserAnnotaionDao.java,新加文件如下

springboot集成mybatis及mybatis generator工具入门_第4张图片

内容如下:

package com.example.springbootmybais.mapper;

import com.example.springbootmybais.model.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserAnnotationDao {

    @Select("SELECT * FROM user WHERE id=#{id}")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "password",column = "password")
    })
    User getUserById(int id);

    @Select("SELECT * FROM user")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "username",column = "username"),
            @Result(property = "password",column = "password")
    })
    List queryAll();

    @Update("UPDATE user SET username=#{user.username},password=#{user.password}")
    int updateUser(User user);
}

修改HelloController,查询user的id为3时的id,内容如下:

package com.example.springbootmybais.controller;

import com.example.springbootmybais.mapper.UserAnnotationDao;
import com.example.springbootmybais.mapper.UserDao;
import com.example.springbootmybais.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

//    @Autowired
//    private UserDao userDao;

    @Autowired
    private UserAnnotationDao userAnnotaionDao;

    @RequestMapping("/hello")
    public String hello(){
        User user = userAnnotaionDao.getUserById(3);
        System.out.println(user.toString());
        return user.toString();
    }

}

重新启动程序,再次访问localhost:8080/hello,显示如下:

springboot集成mybatis及mybatis generator工具入门_第5张图片

哈哈,成功了!!!

三、方法三,mybatis generator工具的使用

在前言中说到,mybatis也发现了我们需要重复的去创建pojo类、mapper文件以及dao类并且需要配置它们之间的依赖关系可能会很麻烦,所以mybtis提供了一个mybatis generator工具来帮我们自动创建pojo类、mapper文件以及dao类并且会帮我们配置好它们的依赖关系,而我们只需要关心我们的业务逻辑直接使用就行了。 
要使用mybatis generator工具需要在pom.xml文件中添加一个generator的maven工具。主要需要在添加generator的,pom内容如下:
 


		
			
				org.springframework.boot
				spring-boot-maven-plugin
			

			
				org.mybatis.generator
				mybatis-generator-maven-plugin
				1.3.2
				
					
						Generate MyBatis Artifacts
						deploy
						
							generate
						
					
				
				
					
					src/main/resources/mybatis-generator/generatorConfig.xml
					true
					true
				
				
					
						org.mybatis.generator
						mybatis-generator-core
						1.3.2
					
					
						mysql
						mysql-connector-java
						5.1.44
					
				
			

		
	

上面指定了mybatis generator工具配置文件的位置,在这个位置创建一个xml文件,并做如下配置,内容如下:





    
    
    
    
    

    
    
    
        
        
        
        
        
        
        

        
        
        
        
        

        

        
        
            
             
        

        
        
        
        
            
            
        

        
        
            
            
        
        
        
            
        
        
        
            
        
        
        
            
            
        

在同目录下创建mybatisGeneratorinit.properties文件:

#Mybatis Generator configuration
#dao类和实体类的位置
project =src/main/java
#mapper文件的位置
resources=src/main/resources
#根据数据库中的表生成对应的pojo类、dao、mapper
jdbc_driver =com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test
jdbc_user=root
jdbc_password=root

到此,整个配置就完成了,既然该工具的作用是将数据库中的表生成对应的实体、dao类和mapper文件,那么首先需要建立数据库表,当数据库表建立好后在pom.xml文件所在的目录执行如下命令:

mvn mybatis-generator:generate

然后就可以看到在指定目录下已经生成了对应的文件,关于mybatis generator的更多详细的配置可以参考这篇文章:Mybatis Generator最完整配置详解

查看本项目目录,可以看到自动生成的代码,如下:

springboot集成mybatis及mybatis generator工具入门_第6张图片

本文章上诉内容所有代码下载地址:https://download.csdn.net/download/zhizhuodewo6/10611179

四、方法四 使用代码自动生成

pom.xml引入以下库



	4.0.0

	com.example
	springbootmybais
	0.0.1-SNAPSHOT
	jar

	springbootmybais
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
	

	

		
			org.springframework.boot
			spring-boot-starter-web
		

		
		
			com.baomidou
			mybatis-plus
			2.1.8
		

		
		
			org.apache.velocity
			velocity
			1.7
		

		
			org.springframework.boot
			spring-boot-starter-jdbc
		
		

		
			mysql
			mysql-connector-java
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			

		
	



创建生成代码的工具类,内容如下:

package com.example.springbootmybais.generator;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MpGenerator {
    /**
     * 代码生成器演示
     */
    public static void main(String[] args){

        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D:\\mybatisplus\\generator");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("xi");

        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        // gc.setMapperName("%sDao");
        // gc.setXmlName("%sDao");
        // gc.setServiceName("MP%sService");
        // gc.setServiceImplName("%sServiceDiy");
        // gc.setControllerName("%sAction");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setTypeConvert(new MySqlTypeConvert(){
            // 自定义数据库表字段类型转换【可选】
            @Override
            public DbColumnType processTypeConvert(String fieldType) {
                System.out.println("转换类型:" + fieldType);
                // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
                return super.processTypeConvert(fieldType);
            }
        });
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
//        dsc.setPassword("admin123...");
        dsc.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf8");
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
        strategy.setTablePrefix(new String[] { "" });// 此处可以修改为您的表前缀
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(
                new String[] {
                        "school"}); // 需要生成的表
        // strategy.setExclude(new String[]{"test"}); // 排除生成的表
        // 自定义实体父类
        strategy.setSuperEntityClass("com.example.springbootmybais.entity.DataEntity");
        strategy.setEntityLombokModel(true);
        // 自定义实体,公共字段
        strategy.setSuperEntityColumns(new String[] { "id", "create_by", "create_by_name", "create_time", "update_by", "update_by_name", "update_time", "del_flag" });
        // 自定义 mapper 父类
        // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
        // 自定义 service 父类
        // strategy.setSuperServiceClass("com.baomidou.demo.TestService");
        // 自定义 service 实现类父类
        // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")org.com.hdzy.common.entity.DataEntity;
        // 自定义 controller 父类
        // strategy.setSuperControllerClass("com.baomidou.demo.TestController");
        // 【实体】是否生成字段常量(默认 false)
        // public static final String ID = "test_id";ee
        // strategy.setEntityColumnConstant(true);
        // 【实体】是否为构建者模型(默认 false)
        // public User setName(String name) {this.name = name; return this;}
        // strategy.setEntityBuliderModel(true);
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.xi.fzzl.dao");
        pc.setModuleName("");
        mpg.setPackageInfo(pc);

//        // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
//        InjectionConfig cfg = new InjectionConfig() {
//            @Override
//            public void initMap() {
//                Map map = new HashMap();
//                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
//                this.setMap(map);
//            }
//        };
//
//        // 自定义 xxList.jsp 生成
//        List focList = new ArrayList();
//        focList.add(new FileOutConfig("/template/list.jsp.vm") {
//            @Override
//            public String outputFile(TableInfo tableInfo) {
//                // 自定义输入文件名称
//                return "D://my_" + tableInfo.getEntityName() + ".jsp";
//            }
//        });
//        cfg.setFileOutConfigList(focList);
//        mpg.setCfg(cfg);
//
//    // 调整 xml 生成目录演示
//         focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
//            @Override
//            public String outputFile(TableInfo tableInfo) {
//                return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";
//            }
//        });
//        cfg.setFileOutConfigList(focList);
//        mpg.setCfg(cfg);
//
//        // 关闭默认 xml 生成,调整生成 至 根目录
//        TemplateConfig tc = new TemplateConfig();
//        tc.setXml(null);
//        mpg.setTemplate(tc);

        // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/template 下面内容修改,
        // 放置自己项目的 src/main/resources/template 目录下, 默认名称一下可以不配置,也可以自定义模板名称
        // TemplateConfig tc = new TemplateConfig();
        // tc.setController("...");
        // tc.setEntity("...");
        // tc.setMapper("...");
        // tc.setXml("...");
        // tc.setService("...");
        // tc.setServiceImpl("...");
        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        // mpg.setTemplate(tc);

        // 执行生成
        mpg.execute();

        // 打印注入设置【可无】
//        System.err.println(mpg.getCfg().getMap().get("abc"));

    }
}

本地数据库表school如下截图:

springboot集成mybatis及mybatis generator工具入门_第7张图片

最后运行MyGenter的main方法,然后在本地就自动生成所需实体类与mapper,如下截图

springboot集成mybatis及mybatis generator工具入门_第8张图片

然后将所需代码拷贝如工程中即可。

该方法所需工程源码下载地址:https://download.csdn.net/download/zhizhuodewo6/10616121

如有什么疑问可以联系本博主,互相交流学习。

 

你可能感兴趣的:(JavaEE)