在IDEA创建springboot+mybatis+spring 详细demo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/klli15/article/details/93091510

在IDEA创建springboot+mybatis+spring 详细demo

开发环境

  • IDE: intellJ idea 2019.1
  • Tomcat: tomcat 8
  • JDK:Java 1.8
  • gradle: 2.14.1

步骤

  1. 创建项目
    在指定gradle的时候,可以指定本地的gradle路径,或者使用 recommanded 的gradle(创建时会自动下载)
    创建项目
    初始结构

  2. 编辑 build.gradle 文件

    build.gradle 是gradle默认执行的文件

    主要代码是:

    //build.gradle
    //这是不指定本地gradle的做法,如果指定本地gradle,可以将 buildscript 这段删掉
    buildscript {
        ext {
            springBootVersion = '1.5.4.RELEASE'
        }
        repositories {
        	maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }  //使用 阿里云的库
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: "application"
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = 1.8
    
    repositories {
    	maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    }
    
    configurations {
        providedRuntime
    }
    // 这段待会再解释,主要因为 idea IDE 编译时不会主动处理 xml 文件
    task copyMapping(type: Copy) {
            copy {
                from("src/main/java") {
                    include("com/test/demo/mapper/*.xml")
                }
                into("${projectDir}/build/resources/main") //请确认你的编译输出路径是这样的
            }
        }
    //引入相关依赖
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-web') //必备
        compile('org.springframework.boot:spring-boot-starter-thymeleaf') //必备
        providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') 
        compile("org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}")
        compile('org.springframework.boot:spring-boot-starter-test')
        compile('org.springframework.boot:spring-boot-starter')
        compile('mysql:mysql-connector-java:5.1.38')
        compile group: 'org.mybatis', name: 'mybatis', version: '3.4.1'
        compile group: 'org.mybatis', name: 'mybatis-spring', version: '1.3.0'
    }
    
  3. 编辑代码
    创建完后的项目结构如下图

    3.1 User.java

    //实体类,方法为getter/setter方法,没啥好说的
    package com.test.demo.entities;
    
    public class User {
        private Integer userid;
        private String name;
        private Integer age;
        private String address;
        private String password;
    
        public String getPassword() {
            return password;
        }
    
        public String getName() {
            return name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public Integer getUserid() {
            return userid;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setUserid(Integer userid) {
            this.userid = userid;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    //这个是类强制转为String时调用的函数
        @Override
        public String toString() {
            return "name:"+this.name+"\npassword:"+this.password;
        }
    }
    

    3.2 UserMapper.java

    // Mapper类,用以作为与 持久层(数据库)打交道的类
    package com.test.demo.mapper;
    
    import com.test.demo.entities.User;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    @Mapper
    public interface UserMapper {
        List<User> getAllUsers();
    }
    

    3.3 UserMapper.xml

    <!--本文件涉及到 Mybatis 的语法,请先行学习 -->
    <!--本配置文件用以将 UserMapper进行配置,至于为什么使用配置文件,是为了解耦,方便修改 -->
    <?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.test.demo.mapper.UserMapper">
        <resultMap id="map" type="com.test.demo.entities.User">
            <result column="userid" property="userid" jdbcType="INTEGER"/>
            <result column="name" property="name" jdbcType="VARCHAR"/>
            <result column="age" property="age" jdbcType="INTEGER"/>
            <result column="address" property="address" jdbcType="VARCHAR"/>
            <result column="password" property="password" jdbcType="VARCHAR"/>
        </resultMap>
        <!-- id 的值必须要与 Mapper.java 中的某一方法的方法名相同,resultType 代表返回的类型是啥,Mybatis可以帮你自动装配-->
        <select id="getAllUsers" resultType="com.test.demo.entities.User" resultMap="map">
            select * from user ; 
        </select>
    </mapper>
    

3.4 TestService.java

// 定义服务的接口,面向接口编程
	package com.test.demo.service;
	
	import com.test.demo.entities.User;
	
	import java.util.List;
	
	public interface TestService {
	//    public Boolean validateUser(String username, String password);
	    public List<User> getAllUsers();
	    public User aUser();
	}

3.5 TestSeviceImpl.java

//TestService 的实现类
package com.test.demo.service.impl;

import com.test.demo.entities.User;
import com.test.demo.mapper.UserMapper;
import com.test.demo.service.TestService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

@Service
public class TestServiceImpl implements TestService {
//自动装配,注入(实际就是Spring框架将userMapper类实例化并赋值给 userMapper变量)
    @Resource
    private UserMapper userMapper;

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

3.5 TestController.java

package com.test.demo.controller;

import com.test.demo.service.TestService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@Controller
public class TestController {
    @Resource
    private TestService testService;
	//这个方法处理的请求url
    @RequestMapping("/")
    // 说明这个方法返回的String是作为响应的内容返回,而不是返回给spring 进行字符串拼接以便返回 jsp/html 页面等
    @ResponseBody  
    public String index(){
    	//看这里,只需要直接调用testService 即可获取数据,无需了解具体的实现细节,体现封装性、解耦以及方便拓展
        return testService.getAllUsers().toString();
    }
    @RequestMapping("/say")
    @ResponseBody
    public String say(){
        return "helloWorld";
    }
}

3.6 Main.java

package com.test.demo;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.DependsOn;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import java.sql.SQLException;
// 这个注解说明这个是 SpringBoot 启动项目的入口
@SpringBootApplication
@ComponentScan(basePackages = "com.test.demo")
@MapperScan(basePackages = "com.test.demo.mapper",sqlSessionFactoryRef = "sqlSessionFactory")
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
// 初始化数据源
    @Bean("masterDatasource")
 // 说明配置文件前缀
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource masterDatasource(){
        return new DataSource();
    }
//初始化 sql会话工厂
    @Bean(name = "sqlSessionFactory")
    @DependsOn("masterDatasource")
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Throwable {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
//  	下面注释掉的语句用以显式注明 Mybatis 去哪找 返回的实体类以及去哪找 Mapper.xml 文件
//        bean.setTypeAliasesPackage("com.test.demo.entites");
//        Resource[] resources = new PathMatchingResourcePatternResolver()
//                        .getResources("classpath:mapper/*.xml");
//        bean.setMapperLocations(resources);
        return bean.getObject();
    }
}

如果不显式说明mapper.xml 的地址,则Mybatis默认(隐式)会在两个地方寻找 xml文件 (以下所说的路径 都是指编译输出路径,而不是源代码路径)

  1. Mapper.class 所在的目录下
  2. 在 resources 目录下的、与 Mapper.class 相同路径名的目录下寻找。举个例子, 本文 UserMapper.java 编译输出后的路径是 build/classes/main/com/test/demo/mapper/UserMapper.class ,那么Mybatis 就会去 寻找build/resources/main/com/test/demo/mapper/UserMapper.xml 是否存在,如果不存在,则会报 找不到Mapper.xml
    因此,由于 idea IDE 在编译时会自动忽略 *.xml 文件,所以我们就得使用 copyMapping (见第2点)来将所有的xml文件移动到 resources 下的相应路径。

3.5 application.properties

# 在 resources 下创建这个文件,文件名必须为 application.properties 或 application.yml ,否则 springboot 无法识别
	spring.datasource.master.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
	spring.datasource.master.username=USERNAME
	spring.datasource.master.password=PASSWORD
	spring.datasource.master.driverClassName=com.mysql.jdbc.Driver
  1. 创建数据库
    表结构

注意事项
1. 数据库名为: ssm ——与 application.properties 中 url 指明访问的数据库名一致
2. 表名为 user —— 与 3.3节 UserMapper.xmlselect * from user; 中指明数据表名一致
3. 数据类型要一致——留意看 User.java 中各个成员变量的类型 与 UserMapper.xml 中的 resultMap 中的相应类型,你会有所发现,如果不一致,Mybatis 无法帮你匹配好。
4. 最后记得插进几条数据,不然就算系统运行起来了,也找不到任何数据

  1. 运行配置
    运行配置

要在build之后,将 xml 文件copy到相应路径,所以需要指定 copyMapping 任务。

  1. 最终项目结构
├─.gradle
│  └─2.14.1
│      └─taskArtifacts
├─.idea
│  └─modules
├─out //输出文件
│  └─production
│      ├─classes
│      │  └─com
│      │      └─test
│      │          └─demo
│      │              ├─controller
│      │              ├─entities
│      │              ├─mapper
│      │              └─service
│      │                  └─impl
│      └─resources
│          └─com
│              └─test
│                  └─demo
│                      └─mapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─test
    │  │          └─demo
    │  │              ├─controller
    │  │              ├─entities
    │  │              ├─mapper
    │  │              └─service
    │  │                  └─impl
    │  └─resources
    └─test
        ├─java
        └─resources

  1. 相关链接:
    6.1 源代码: https://gitee.com/klli852/springBoot

END

猜你喜欢

转载自blog.csdn.net/klli15/article/details/93091510