1、项目依赖
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
 

<?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>

    <groupId>com.boot.demo</groupId>
    <artifactId>bootdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bootdemo</name>
    <description>Demo project for Spring Boot</description>

	<!--父项目依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

	<!--构建设置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

	<!--项目依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
		
		<!--mybatis和tk.mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
		
		<!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
		
		<!--自动生成getter,setter,equals,hashCode和toString等等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>

        <!--添加jsp依赖 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    </dependencies>

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

</project>

2、配置文件

  Spring Boot配置文件有两种:application.yml和application.properties,作用是一样的,不过因为yml文件是树状结构,写起来有更好的层次感,更易于理解,所以很多人都选择了yml文件。

#配置数据源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb?characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  mvc:
    view:
      prefix: /WEB-INF/
      suffix: .jsp

#配置mybatis
mybatis:
  typeAliasesPackage: com.boot.demo.bootdemo.domain
  mapper-locations: classpath:mapper/*.xml

#配置mapper
mapper:
  not-empty: false
  identity: MYSQL

#配置Tomcat,配置80,可在浏览器访问项目时不用加端口号(默认端口8080)
server:
  port: 80

3、Java Bean
Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。 

@Data
@Table(name = "user")
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private String name;
    private Date createDate;
}

4、自定义Mapper
Tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效。这个插件里面封装好了我们需要用到的很多sql语句,不过这个插件是通过我们去调用它封装的各种方法来实现sql语句的效果。对于单表查询不需要写SQL语句,这样就不用像mybatis那样每次写一个接口就要写一条sql语句。这样大大减少了我们的工作量。
 

public interface MyMapper<T> extends BaseMapper<T>, MySqlMapper<T> {
}

5、UserMapper和UserMapper.xml
通用mapper可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查。什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件。它不是为了替代mybatis,而是让mybatis的开发更方便。例如:第三种方式。
 

@Mapper
public interface UserMapper extends MyMapper<User> {
    //第一种方式,注解sql,方便,但维护性略差
    @Select("select * from user")
    List<User> selectAll();

    //第二种方式,xml方式,易维护
    int save(User user);

    //第三种方式:通用mapper,本身提供了很多现成的增删改查sql,方法不在文件中体现;例如:int deleteByPrimaryKey()
}
<?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.boot.demo.bootdemo.mapper.UserMapper">
    <!--第一种方式,注解sql在方法上-->
    <!--第二种方式对应的sql-->
    <insert id="save" parameterType="User" >
        insert into user (id, name, create_date)
        values (#{id}, #{name}, #{createDate})
    </insert>
    <!--第三种方式,是通用mapper现成的增删改查sql,不用在文件中体现-->
</mapper>

6、服务实现类
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
 

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;

    //第一种方式对应的Service
    public List<User> listAll() {
        return userMapper.selectAll();
    }

    //第二种方式对应的Service
    public int saveUser(User user) {
        return userMapper.save(user);
    }

    //第三种方式对应的Service,通用mapper,直接调用现成的增删改查sql
    public int delUser(Long id) {
        return userMapper.deleteByPrimaryKey(id);
    }
}

7、控制层

  @RestController注解相当于@ResponseBody + @Controller合在一起的作用。如果要返回json内容,就用@RestController,如果要返回到指定页面,就用@Controller。

@Controller
public class UserController {
    @Resource
    private UserService userService;

    //第一种方式对应的Controller
    @GetMapping(value = "/listUser")
    @ResponseBody
    public List<User> listAll() {
        return userService.listAll();
    }

    //第二种方式对应的Controller
    @PostMapping(value = "/saveUser")
    @ResponseBody
    public String saveUser(HttpServletRequest request) {
        User user = new User();
        user.setName(request.getParameter("username"));
        user.setCreateDate(new Date());
        return userService.saveUser(user)==1?"SUCCESS":"FAIL";
    }

    //第三种方式对应的Controller
    @GetMapping(value = "/delUser")
    @ResponseBody
    public String delUser(HttpServletRequest request) {
        Long id = Long.parseLong(request.getParameter("id"));
        return userService.delUser(id)==1?"SUCCESS":"FAIL";
    }

    //跳转到主页
    @GetMapping(value = "index")
    public String index(){
        return "index";
    }

    //跳转到登录页面
    @GetMapping(value = "login")
    public String login(){
        return "login";
    }
}