springboot -No3: 入门实现一个简单的查询数据库功能

springboot+mybatis+thymeleaf

进行一个简单的数据库数据查询

开发工具: eclipse + jdk8+maven-3.0.4+mysql5.7+druid


springboot和springmvc

springboot这个 框架用起来比springmvc方便多了,光是配置上面省去了我们多少工作量。对得起这个微服务

首先springboot不用我们单独的建立tomcat服务,也不用我们在那庞大的application-context中 去整合 hibernate/mybatis

毕竟从 datasource构建,定义sessinonFactory,然后定义 tarnscationManager,

然后去注入到 拦截器TranSactionInterceptor里面从而定义事物传播.

然后使用定义的拦截器注入到BeanNameAutoProxyCreator定义可以接受事物管理扫描的bean以及bean的代理

这个过程也是毕竟花费时间的。

这个过程中有一些步骤是可以继续封装的。

springboot帮我们省去了这些过程,我们可以很方便的使用

材料需要的网址:   

springboot :

    http://projects.spring.io/spring-boot/#quick-start

   

 mybatis:

   http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/


thymeleaf:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/



thymeleaf属性介绍

对于thymeleaf需要一些配置在上面的网站上可以找到


我们将上面的配置属性  copy到我们的  application.properties文件中

但是需要修改几个参数:

spring.thymeleaf.cache=false 

spring.thymeleaf.prefix=classpath:/templates/  这个是返回页面模板时候查找模板的前缀,根据实际情况进行修改

spring.thymeleaf.suffix=.html  这个是模板文件的后缀名


第一步:新建一个maven项目,在pom中整合thymeleaf和mybatis

还有jdbc和数据源

这个步骤很简单,我们建立一个   miaosha的maven项目

(前提是eclipse已经设置好了maven)

maven加入镜像

为了方便,我们把maven的settings.xml 稍微修改下,加入镜像,这样我们可以得到jar包

在 <mirrors>下面增加如下的镜像配置

<mirror>  
  <id>alimaven</id>  
  <name>aliyun maven</name>  
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
  <mirrorOf>central</mirrorOf>          
</mirror> 

还要启用本地源:

 <localRepository>D:\maven-data\repo</localRepository>

加入依赖

然后我们在 pom.xml中将 springboot,thymeleaf,mybatis的jar包依赖引进

pom.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		 <!--<version>2.0.1.RELEASE</version> -->
		<version>1.5.8.RELEASE</version>
	</parent>

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<!-- 集成 thymeleaf -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
	</dependency>
		
		<!-- 集成 mybatis -->
	<dependency>
	    <groupId>org.mybatis.spring.boot</groupId>
	    <artifactId>mybatis-spring-boot-starter</artifactId>
	     <version>1.3.1</version>
	</dependency>
	
	<!-- 集成jdbc -->
		<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
	
	<!-- 集成数据源 -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.0.5</version>
	</dependency>
	</dependencies>


第二步: 建立一个数据库我们获取数据

安装好mysql之后,使用 自带的wokbench视图化环境下建立一个 schema (数据库)

这里我们将建立一个 名为 miaosha的数据库.然后建立一个user的关系模式  user(id,name)






第三步: 新建application.properties 

配置thymeleaf和mybatis以及jdbc和druid

这个文件放到我们的 main/resoureces 下面就行

           (如果没有 main/resoureces 目录自己建立一个然后加入到classpath中)

 application.properties 文件中要配置这个  thymeleaf的属性 ,mybatis的属性和jdbc信息以及数据源信息

当然这些文件我们可以分类管理的,这里我们写在一起,方便

thymeleaf的属性以及templates设定

# THYMELEAF (ThymeleafAutoConfiguration)=====================
 # Whether to enable template caching.
spring.thymeleaf.cache=false 
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.enabled=true
spring.thymeleaf.mode=HTML5

#这个是页面返回时候的前缀路径,用于寻找模板
spring.thymeleaf.prefix=classpath:/templates/
#这个是模板的扩展名
spring.thymeleaf.suffix=.html 
spring.thymeleaf.servlet.content-type=text/html

注意到我们的模板的位置:  classpath:/templates/

所以我们要在classpath路径中建立一个  templates的文件夹用来存储模板

我们可以在 main/resources目录下 建立这个 templates文件夹

我们这次使用 hello.html作为 展示


Mybatis属性

# aliases :将数据库的关系映射到 bean
mybatis.type-aliases-package=miaosha.dao.domain
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=3000
# mybatis中的xml文件
mybatis.mapperLocations = classpath:miaosha/dao/xml/*.xml

jdbc和数据源属性

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaosha?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#这个是druid的一个配置属性
spring.datasource.filters=stat
spring.datasource.maxActive=2
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxOpenPreparedStatements=20


第四步:建立工程各个层次包


hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'hello:'+${name}" ></p>
</body>
</html>

4.1 建立domain和UserDao

---------------------------------------------

       User.java

package miaosha.dao.domain;

public class User {
	private int id ;
	private String name ;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	} 
	
}

UserDao.java

package miaosha.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import miaosha.dao.domain.User;

@Mapper
public interface UserDao {

	@Select("select * from user where id=#{id}")
	public User findUserById(@Param("id") int id);
}


4.2 建立service

 

UserServiceImpl.java

package miaosha.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import miaosha.dao.UserDao;
import miaosha.dao.domain.User;
import miaosha.service.UserService;

/**
 * service
 * @author kaifeng1
 *
 */
@Service("userService")
public class UserServiceImpl implements UserService{

	@Autowired
	private UserDao userDao ;
	public User findUserById(int id) {
		return this.userDao.findUserById(id);
	}

}
 
 

4.3建立页面结果返回类

CodeMsg.java

package miaosha.result;

/**
 * 项目结果码
 * 这里把这个类设计为  默认的修饰,去掉public这样 这个类只能在当前包下面使用
 * 不会暴露给外面的包
 * 
 * @author kaifeng1
 *
 */
 class CodeMsg {
	private int code;
	private String msg;

	public static CodeMsg SUCESS = new CodeMsg(200, "sucess");
	public static CodeMsg ERROR = new CodeMsg(300, "error");

	private CodeMsg(int code, String msg) {
		this.code = code;
		this.msg = msg;
	}

	public int getCode() {
		return code;
	}

	public String getMsg() {
		return msg;
	}

}

Result.java

package miaosha.result;

/**
 * 返回结果封装
 * 
 * @author kaifeng1
 *
 * @param <T>
 */
public final class Result<T> {

	private int code;
	private String msg;
	private T data;

	/**
	 * 成功
	 * @param data
	 * @return
	 */
	public static <T> Result<T> sucess(T data) {
		Result<T> r = new Result<T>(CodeMsg.SUCESS);
		r.data = data;
		return r;
	}

	/**
	 * 失败
	 * @param data
	 * @return
	 */
	public static <T> Result<T> error(T data) {
		Result<T> r = new Result<T>(CodeMsg.ERROR);
		r.data = data;
		return r;
	}

	private Result(T data) {
		this.data = data;
	}

	private Result(CodeMsg codeMsg) {
		this.code = codeMsg.getCode();
		this.msg = codeMsg.getMsg();
	}

	public int getCode() {
		return code;
	}

	public String getMsg() {
		return msg;
	}

	public T getData() {
		return data;
	}

}
 
 

4.4 建立Controller

 controller的写法和springmvc没有什么区别的

主要想说的是 如何返回到 我们thymeleaf的模板  hello.html

我们的application.proerties中已经配置了  头和尾,

我们controller中如果是一个页面跳转的方法,那么这个返回结果将和 配置中的进行拼接

从而找到我们指定的模板.

SampleController.java

package miaosha.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import miaosha.dao.domain.User;
import miaosha.result.Result;
import miaosha.service.UserService;

/**
 * controller
 * @author kaifeng1
 *
 */
@Controller
@RequestMapping("/sample")
public class SampleController {
	
	@Autowired
	private UserService userService ;

	@RequestMapping("/hello")
	@ResponseBody
	Result<String> hello() {
		return Result.sucess("hello world !");
	}
	
	@RequestMapping("/thymeleaf")
	public String toHelloHtml(Model model) {
		User user  = this.userService.findUserById(1);
		model.addAttribute("name", user.getName());
		return "hello" ;
	}
	
}

4.5建立启动springboot的类

需要说明的是,上面的controller也可以充当这个类的。

这个类其实呢就是为了启动用的。如同我们启动了tomcat服务一样的.

但是有一点要注意: 这个类的位置很重要

因为进行扫描的时候是从 这个类开始从上到下进行扫描的

像我们上面的controller和service都是分层好的。

如果使用  controller充当启动类,那么扫描就只会在 controller包和controller子包中进行,那么

service和dao下面的就扫描不到了

所以我们把启动类发到了 最顶层

MainApp.java

package miaosha;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//@EnableAutoConfiguration
@SpringBootApplication
public class MainApp {

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

可以看到这个类有一个main函数,直接运行即可



打开浏览器:输入 http://www.localhost:8080/sample/hello


再次输入 http://www.localhost:8080/sample/thymeleaf


我们发现 数据库的数据展示到页面的了






猜你喜欢

转载自blog.csdn.net/fk002008/article/details/79950196