Spring Boot入门及整合mybatis

Spring Boot入门

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,使用Spring Boot可以大大的提供软件的开发效率。

特点: 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提供生产就绪型功能,如指标,健康检查和外部配置 6. 绝对没有代码生成和对XML没有要求配置

Spring Boot实例

首先依次选择New->Spring starter project创建spring boot 项目。

点击Next,选择spring boot的版本,这里选择1.5.9 版本,选择starter,通过搜索找到web 并勾选,点击完成即可。

项目结构说明

创建好的项目,结构如下:

  • Src/main/java。编写代码存放的目录,自动生成了程序入口代码 SpringBootDemo1Application.java。
  • Src/main/resources。资源文件存放目录,自动生成了配置文件 application.properties
  • Src/test/java。测试代码存放目录,自动生成了测试代码SpringBootDemo1ApplicationTests.java

pom文件简介

spring boot项目默认使用maven来构建,其中spring boot依赖的部分配置如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>

引入web依赖

Web starter依赖引入,会增加web容器、springweb、springmvc、jackson-databind等相关的依赖。

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

启动程序入口说明

创建SpringBoot项目时,系统会默认生成一个启动程序,该类使用main函数来启动spring boot程序。例如:SpringBootDemoApplication代码

@SpringBootApplication
public class SpringBootDemoApplication {

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

增加controller

然后在与SpringBootDemoApplication同级的包下新建一个controller。

public class DemoController {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
}

启动SpringBootDemoApplication

在SpringBootDemoApplication文件上右键选择run as->Spring Boot App即可启动项目。

在浏览器中输入:http://localhost:8080/即可访问。

application.properties

打开项目src目录下的resources文件,会发现一个application.properties文件,该文件是spring boot系统配置文件。例如:

server:
  port: 8080
  context-path: /


spring:
   datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/db_demo
      username: root
      password: xxxx
   jpa:
     hibernate.ddl-auto: update
     show-sql: true
   thymeleaf:
    cache: false

整合mybatis

其实使用IDE工具可以直接添加mybatis相关的依赖,此次使用pom文件的方式来实现。打开pom文件,在pom.xml中添加如下依赖:

<!-- mybatisjar -->

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId
<version>1.3.1</version>
</dependency>

<!-- mysql连接jar -->

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>

在application.properties 文件下 添加mysql的连接配置(切记不要在行尾留有空格,否则报com.mysql.jdbc.Driver Class Not Found error,其实只是含有空格导致找不到类)。

然后,在项目的src目录下新建一个User类.

public class User {
    private Integer id;
    private String name;
    private Integer age;
    //省略get和set
}

添加UserMapper接口:

@Mapper
public interface UserMapper {
    // 通过Parameter新增
    @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
    int insertByParameter(@Param("name") String name, @Param("age") Integer age);

    // 通过Map新增
    @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})")
    int insertByMap(Map<String, Object> map);  

    // 通过Object新增
    @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
    int insertByObject(User user);

    // Delete By Id
    @Delete("DELETE FROM user WHERE id =#{id}")
    void delete(Long id);

    // Update
    @Update("UPDATE user SET age=#{age} WHERE name=#{name}")
    void update(User user);

    // Find by Parameter
    @Select("SELECT * FROM USER WHERE NAME = #{name}")
    User findByName(@Param("name") String name);

    // 通过@Results,绑定返回值
    @Results({
        @Result(property = "name", column = "name"),
        @Result(property = "age", column = "age")
    })
    @Select("SELECT name, age FROM user")
    List<User> findAll();  
}

最后是协议个测试文件:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void add() throws Exception {
        // insert by parameter
        userMapper.insertByParameter("zhangShan", 20);

        // insert by object
        User user = new User();
        user.setAge(21);
        user.setName("LiSi");
        userMapper.insertByObject(user);

        // insert by map
        Map<String, Object> map = new HashMap<>();
        map.put("name", "huangwu");
        map.put("age", 22);
        userMapper.insertByMap(map);

        User zhangShan = userMapper.findByName("zhangShan");
        Assert.assertEquals(20, zhangShan.getAge().intValue());
        User LiSi = userMapper.findByName("LiSi");
        Assert.assertEquals(21, LiSi.getAge().intValue());
        User huangwu = userMapper.findByName("huangwu");
        Assert.assertEquals(22, huangwu.getAge().intValue());
    }

    @Test
    public void udpate() throws Exception {
        User user = userMapper.findByName("zhangShan");
        user.setAge(50);
        userMapper.update(user);

        user = userMapper.findByName("zhangShan");
        Assert.assertEquals(50, user.getAge().intValue());

        userMapper.delete(user.getId());
    }

    @Test
    public void findAll() throws Exception {
        List<User> users = userMapper.findAll();
        Assert.assertNotNull(users);
    }

}       

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禁心尽力

Java设计模式之模板方法设计模式(银行计息案例)

       不知道为什么,这几天对Java中的设计模式非常感兴趣,恰巧呢这几天公司的开发任务还不算太多,趁着有时间昨天又把模板方法模式深入学习了一下,做了一个...

38180
来自专栏禁心尽力

这次真的忽略了一些ActiveMQ内心的娇艳

首先ActiveMQ有俩种消息队列模式:点对点和发布订阅,这俩种都有不可替代的应用场景,前者适用于消息唯一传递的业务,后者适用于分布式环境下进行多面数据同步的...

38590
来自专栏向治洪

hashCode与equals的区别

hashCode与equals HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相...

218100
来自专栏向治洪

JVM体系结构认知

虚拟机 何为虚拟机呢?虚拟机是模拟执行某种指令集体系结构(ISA)的软件,是对操作系统和硬件的一种抽象。其软件模型如下图所示: ? 计算机系统的这种抽象类似于...

24990
来自专栏禁心尽力

多线程编程:阻塞、并发队列的使用总结

最近,一直在跟设计的任务调度模块周旋,目前终于完成了第一阶段的调试。今天,我想借助博客园平台把最近在设计过程中,使用队列和集合的一些基础知识给大家总结一下,方便...

28750
来自专栏向治洪

volatile和Synchronized区别

volatile和Synchronized区别 volatile Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进...

20080
来自专栏向治洪

原子性、可见性以及有序性

虚拟机 何为虚拟机呢?虚拟机是模拟执行某种指令集体系结构(ISA)的软件,是对操作系统和硬件的一种抽象。其软件模型如下图所示: ? 计算机系统的这种抽象类似于...

36270
来自专栏禁心尽力

如何使用线程锁来提高多线程并发效率

       今天对synchronized关键字的用法又有了更高一层的理解,特此记录一下。        一直对自己设计的多通道做单不是狠满意,并发效率低下。...

26270
来自专栏哲学驱动设计

090923 T 一个对象一对多关联的问题

编程时遇到对象关联API的设计问题,感觉可能这种api的设计方案本身就有问题,所以目前还未有解决方案。 问题如下: using System; using ...

19570
来自专栏禁心尽力

多线程之策略模式

今天给各位分享一种Java23种设计模式中最常见的设计模式--策略模式。为什么将策略模式和多线程绑在一起呢,不知道各位有没有注意过我们在进行多线程编程的时候,创...

23170

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励