SpringBoot学习笔记-01

SpringBoot

1. SpringBoot的作用

     SpringBoot是默认整合了Spring、SpringMVC及相关常用框架的一个综合性框架,大量的减少了相关的配置,使得创建项目和使用变得更加简单。在常规配置方面,SpringBoot的思想是“约定大于配置”,即:大多数开发者都会使用某种配置方式的话,则SpringBoot就会直接配置成那个样子,然后,开发者在使用SpringBoot时就不用再进行相关配置,只需要知道已经被配置为那个样子了就可以了!

2.创建SpringBoot项目

1.打开浏览器,访问 https://start.spring.io,并填写相关配置,可以同时选择相关依赖,配置完成后,点击【Generate the project】即可生成项目

SpringBoot学习笔记-01_第1张图片

SpringBoot学习笔记-01_第2张图片

2.项目下载结束后,将其放在eclipse工作空间中,并导入,注意,此处导入为【Existing Maven Projects

SpringBoot学习笔记-01_第3张图片

3.导入成功后,初始项目结构如下图

SpringBoot学习笔记-01_第4张图片

此时需要等待其下载所需要的maven配置,因此此时电脑必须能正常连接maven服务器,依赖下载结束后,项目结构正常。

SpringBoot学习笔记-01_第5张图片    SpringBoot学习笔记-01_第6张图片

3.SpringBoot的HelloWord

       在【src/main/resources】下默认已经存在【static】的文件夹该文件是SpringBoot项目用于存放静态资源的文件夹,例如存放【html】文件、图片、【CSS】文件、【JS】文件等,相当于传统项目中的webapp文件夹,则可以在static创建【index.html】欢迎页面。

SpringBoot学习笔记-01_第7张图片

       在src/main/java下默认已经存在【cn.hzxh.spring.sample】包,该包名是根据创建项目时的参数决定的,这个包就是当前项目的根包(Base-Package),并且在该包下已经存在【SampleApplication.java】文件,该文件的名称也是根据创建项目时填写的artifact决定的,该文件中包含【main】方法,直接执行main()方法就可以启动当前项目,所以,该类也是SpringBoot的启动类!

SpringBoot学习笔记-01_第8张图片

       SpringBoot项目在启动时会启动内置的Tomcat,默认占用【8080】端口,如果此前该端口已经处于占用状态,则项目会启动失败!通过【http://localhost:8080】即可访问所涉及的网页,由于SpringBoot项目内置Tomcat,该Tomcat只为当前项目服务,所以启动时设置的Context Path是空字符串,在访问时URL中不必添加项目名称,而index.html是默认的欢迎页面,其文件名也不必体现在URL中。

        启动成功,访问主页

   SpringBoot学习笔记-01_第9张图片

4.SpringBoot + MyBatis

      SpringBoot项目默认没有集成持久层相关依赖,需要手动补充,或者创建项目时就选中。手动添加,打开【pom.xml】文件,添加依赖坐标。


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.0



    mysql
    mysql-connector-java
    runtime

关于依赖版本号,一般依赖的版本更新我们都说是不知道有什么区别的,SpringBoot会选择一个较为合适的依赖,添加至项目中,无其他情况,我们直接使用提供的依赖即可。

当添加以上依赖之后,SpringBoot项目再启动时就会尝试读取连接数据库的相关配置,如果还没有配置,则会启动失败!
src/main/resources下有application.properties,该文件就是SpringBoot的配置文件,在该文件中添加配置:

spring.datasource.url=jdbc:mysql://localhost:3306/db_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

       需要注意的是,此文件配置结束后,SpringBoot并不会按照配置信息进行连接,只是读取该文件,检查是否有相关配置,也就意味着,即使配置错误,项目启动也并不会失败,具体错误会在后面的单元测试中体现。
       一般情况下,不需要配置连接数据库的driverClassName,因为SpringBoot会自动从jar中读取!

5.测试数据库连接

    在src/test/java下,默认已经存在项目的根包及测试类,且测试类中已经存在一个空的测试方法:

SpringBoot学习笔记-01_第10张图片

      可以先执行以上contextLoads()方法的单元测试,如果测试出错,一定是测试环境或者框架环境有问题,多考虑为jar包已经损坏,应该重新下载或者更换版本!
     在该类中添加【getConnection】方法,用于测试数据库连接

	@Autowired
	private DataSource dataSource;
	
	@Test
	public void getConnection() throws SQLException {
		Connection conn = dataSource.getConnection();
		System.err.println(conn);
	}
	

【@Autowired】注解会自动将值注入对应的对象中,如果此单元测试通过,则数据库连接配置文件配置正确。

6.注册功能的持久层接口

先创建与数据表对应的实体类cn.hzxh.springboot.sample.entity.User

public class User implements Serializable{
	
	private static final long serialVersionUID = 1L;

	private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String phone;
        private String email;
        private Integer isDelete;
        private Integer departmentId;
    
        //SET/GET/ToString...    

}

然后,创建持久层接口cn.tedu.springboot.sample.mapper.UserMapper
可以在每一个抽象方法之前使用注解配置所对应的SQL语句,例如:

public interface UserMapper {

	@Insert("insert into t_user ("
			+ "username,password,"age,address,"email,department"
			+ ") values ("
			+ "#{username},#{password},#{age},#{address},#{email},#{department})")
	@Options(useGeneratedKeys=true,keyProperty="id")
	Integer insert(User user);

	User findByUsername(String username);

}

       这种做法是MyBatis本身就支持的,并不是SpringBoot所特有的!这种做法最大的优点在于:对应关系非常直观。主要的缺陷在于:配置长篇的SQL语句时,代码不易于阅读和维护!所以,一般仍然推荐使用XML配置映射的SQL语句!

       为了保证MyBatis框架能确定接口文件的位置,可以在接口的声明之前添加【@Mapper】注解,不过,这样的做法就要求每一个持久层接口之前都需要添加该注解,也可以在启动类【SampleApplication】之前添加【@MapperScan】注解进行配置,则后续只需要把持久层接口都放在这个包中就可以了,无需反复添加注解:

@SpringBootApplication
@MapperScan("cn.hzxh.springboot.sample.mapper")
public class SampleApplication {

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

}

7. 注册功能的映射

与此前一样,在【src/main/resources】下创建名为【mappers】的文件夹然后使用【UserMapper.xml】进行配置。

  





    
    
    
    
    
        
        
        
        
        
        
        
        
    

    
    
    
    
        INSERT INTO t_user (
            username, password,
            age, phone,
            email, is_delete,
            department_id
        ) VALUES (
            #{username}, #{password},
            #{age}, #{phone},
            #{email}, #{isDelete},
            #{departmentId}
        )
    

    

另外,还需要配置XML文件的位置,则打开【application.properties】文件添加配置:

mybatis.mapper-locations=classpath:mappers/*.xml

8.持久层单元测试

     在【src/test/java】下创建【cn.hzxh.springboot.sample.mapper.UserMapperTests】单元测试类,将默认存在的【SampleApplicationTests】类之前的2行注解复制到【UserMapperTest】类之前:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
	
      //凡是在SSM中,能通过getBean的方式获取的对象,SpringBoot中都可以通过添加此注解来实现自动装配
	@Autowired
	private UserMapper userMapper;
	
	@Test
	public void insert() {
		User user = new User();
		user.setUsername("SpringBoot");
		user.setPassword("root");
		Integer rows = userMapper.insert(user);
		System.err.println("rows:" + rows);
	}
	
	@Test
	public void findByUsername() {
		String username = "SpringBoot";
		User user = userMapper.findByUsername(username);
		System.err.println("user:" + user);
	}
	
}

9. 编写控制器处理请求

       创建控制器处理请求后的返回结果对象的类型【cn.hzxh.springboot.sample.util.JsonResult

public class JsonResult {

	private Integer state;
	private String message;
	
	public Integer getState() {
		return state;
	}
	public void setState(Integer state) {
		this.state = state;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	
}

       创建【cn.hzxh.springboot.sample.controller.UserController】控制器类

/**
 * 使用@RestController相当于@Controller和@ResponseBody的组合使用方式
 * 当使用了@RestController时,该控制器类中所有处理请求的方法都是相当于添加了@ResponseBody注解的!
 * 一旦使用了该注解,该控制器类中的方法将不可以转发或者重定向,
 * 如果一定要转发或者重定向,必须使用ModelAndView作为处理请求的方法的返回值!
 */
@RestController
@RequestMapping("user")
public class UserController {

	@Autowired
	private UserMapper userMapper;

	//在SpringBoot项目中,默认已经将DispatcherServlet映射的路径配置为/*,即所有请求,无需写reg.do
	@RequestMapping("reg")
	public JsonResult reg(User user) {
	
		JsonResult js = new JsonResult();
		User u = userMapper.findByUsername(user.getUsername());
		if(u != null) {//该用户已经被注册
			js.setState(1);
			js.setMessage("注册失败,该用户已经被注册");
		}else {//可以注册,执行注册
			userMapper.insert(user);
			js.setState(2);
			js.setMessage("注册成功");
		}
		return js;
	}

}

      SpringBoot项目不需要开发者配置组件扫描,它默认的组件扫描就是项目的根包,即【cn.hzxh.springboot.sample】包,当前项目中所有的组件都必须在这个包或者其子包下!

      完成后,通过启动类启动项目,打开浏览器,输入以下内容进行测试。

http://localhost:8080/user/reg?username=junit&password=1234

10.添加前端页面,实现页面数据交互





用户注册


用户注册






测试通过

SpringBoot学习笔记-01_第11张图片

你可能感兴趣的:(技术专区)