springboot系列03:数据库操作及前端渲染
数据库操作
- 
pom.xml引入模块: 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
- 
application.properties配置数据库: 
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=111111 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.show-sql= true
hibernate.hbm2ddl.auto值对比:
- 
create:每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 
- 
create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。 
- 
update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 
- 
validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 
dialect 主要是指定生成表名的存储引擎为 InnoDBD;show-sql 是否打印出自动生成的 SQL;
新建数据库demo,建表语句:
DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `age` int(11) NULL DEFAULT NULL, `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `nick_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `pass_word` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `reg_time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `UK_mx7woyv2wwr462kfnpdhsfvxa`(`email`) USING BTREE, UNIQUE INDEX `UK_obbnmq5l56ghtreq7gj2ixt10`(`user_name`) USING BTREE, UNIQUE INDEX `UK_qsfr3pppdg879a7n2nfjuyf7h`(`nick_name`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
添加实体类:
package com.example.demo.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
@Entity
public class UserBean implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
    //用户名
    @Column(nullable = false, unique = true)
    private String userName;
    //密码
    @Column(nullable = false)
    private String passWord;
    //邮箱
    @Column(nullable = false, unique = true)
    private String email;
    //昵称
    @Column(nullable = true, unique = true)
    private String nickName;
    //年龄
    @Column
    private int age;
    //注册时间
    @Column(nullable = false)
    private String regTime;
//省略getter settet方法、构造方法    
}
- 
编写dao 
package com.example.demo.model;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserBeanRepository extends JpaRepository<UserBean, Long> {
    /**
     * 根据用户名查询用户
     * @param userName
     * @return
     */
    UserBean findByUserName(String userName);
    /**
     * 根据用户名或邮箱查询用户
     * @param username
     * @param email
     * @return
     */
    UserBean findByUserNameOrEmail(String username, String email);
}
Entity 中不映射成列的字段得加 @Transient 注解,不加注解也会映射成列!
- 
测试类,切换目录至test/java 
package com.example.demo.repository;
import com.example.demo.model.UserBean;
import com.example.demo.model.UserBeanRepository;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.text.DateFormat;
import java.util.Date;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserRepositoryTests {
    @Autowired
    private UserBeanRepository userBeanRepository;
    @Test
    public void testSave() throws Exception {
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
        String formattedDate = dateFormat.format(date);
        userBeanRepository.save(new UserBean("张亮", "13128600812", "1796969389@qq.com", "zhangl", 29, formattedDate));
 }
    @Test
    public void testFindAll() throws Exception {
        Assert.assertEquals(1, userBeanRepository.findAll().size());
    }
    @Test
    public void testFindByUserNameOrEmail() throws Exception {
        Assert.assertEquals("zhangl", userBeanRepository.findByUserNameOrEmail("张亮", "cc@126.com").getNickName());
    }
    @Test
    public void testDelete() throws Exception {
        userBeanRepository.delete(userBeanRepository.findByUserName("aa1"));
    }
}
前端渲染Thymeleaf 模板
Springboot 推荐使用 Thymeleaf 来代替 Jsp。Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 JSP,Velocity,FreeMaker 等,它也可以轻易的与 Spring MVC 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。
pom.xml引入模块:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在resources/templates新建index.html页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"></meta>
    <title>Hello</title>
</head>
<body>
<h1  th:text="${message}">Hello World</h1>
</body>
</html>
controller跳转到页面:
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class IndexController {
    @GetMapping("/index")
    public String index(Model model){
        model.addAttribute("message","张亮");
        return "index";
    }
}
application.properties配置:
spring.thymeleaf.cache=false
测试,启动主程序,浏览器访问http://localhost:8080/index
WebJars
WebJars 是将客户端(浏览器)资源(JavaScript,Css等)打成 Jar 包文件,以对资源进行统一依赖管理。WebJars 的 Jar 包部署在 Maven 中央仓库上。
使用步骤
- 
pom.xml引入相关模块,WebJars主官网 查找对于的组件,比如 Vuejs 
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>vue</artifactId>
    <version>2.5.16</version>
</dependency>
- 
页面引入 
<link th:href="@{/webjars/bootstrap/3.3.6/dist/css/bootstrap.css}" rel="stylesheet"></link>
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号