<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.jiu</groupId>
    <artifactId>DB-Mysql</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <!-- 声明项目配置依赖编码格式为 utf-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <fastjson.version>1.2.24</fastjson.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

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

        <!-- 添加MySQL依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.13</version><!--$NO-MVN-MAN-VER$ -->
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
server.port=8089

server.servlet.context-path=/ch6_1
spring.datasource.url=jdbc:mysql://localhost:3306/springbootjpa?serverTimezone=UTC&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jackson.serialization.indent-output=true 
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>显示查询结果</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" />
</head>
<body>
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">Spring Data JPA简单查询</h3>
        </div>
    </div>
    <div class="container">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title"><span th:text="${title}"></span></h3>
            </div>
            <div class="panel-body">
                <div class="table table-responsive">
                    <table class="table table-bordered table-hover">
                        <tbody class="text-center">
                            <tr th:each="user:${allUsers}">
                                <td>
                                    <span th:text="${user.id}"></span>
                                </td>
                                <td>
                                    <span th:text="${user.uname}"></span>
                                </td>
                                <td>
                                    <span th:text="${user.usex}"></span>
                                </td>
                                <td>
                                    <span th:text="${user.age}"></span>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>显示查询结果</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" />
</head>
<body>
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">Spring Data JPA简单查询</h3>
        </div>
    </div>
    <div class="container">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title"><span th:text="${title}"></span></h3>
            </div>
            <div class="panel-body">
                <div class="table table-responsive">
                    <table class="table table-bordered table-hover">
                        <tbody class="text-center">
                            <tr>
                                <td>
                                    <span th:text="${auser.id}"></span>
                                </td>
                                <td>
                                    <span th:text="${auser.uname}"></span>
                                </td>
                                <td>
                                    <span th:text="${auser.usex}"></span>
                                </td>
                                <td>
                                    <span th:text="${auser.age}"></span>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
package com.book.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Proxy;

/**
 * 如果没写表名,默认为类名的词组 (如MyUser类对应的表名为my_user)
 */
@Proxy(lazy = false)
@Entity
@Table(name = "User")
public class User {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private int id;// 主键
    /**
     * 使用@Column注解,可以配置列相关属性(列名,长度等), 可以省略,默认为属性名小写
     */
    private String uname;
    private String usex;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUsex() {
        return usex;
    }

    public void setUsex(String usex) {
        this.usex = usex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
package com.book.repository;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

import com.book.entity.User;

/**
 * 这里不需要使用@Repository注解数据访问层, 因为Spring Boot自动配置了JpaRepository
 */
public interface UserRepository extends JpaRepository<User, Integer>{
    public User findByUname(String uname);

    public List<User> findByUnameLike(String uname);
}
package com.book.service;

import java.util.List;

import com.book.entity.User;

public interface UserService {
    public void saveAll();
    public List<User> findAll();
    public User findByUname(String uname);
    public List<User> findByUnameLike(String uname);
    public User getOne(int id);
}
package com.book.service;

import java.util.List;
import java.util.ArrayList;

import com.book.entity.User;
import com.book.repository.UserRepository;

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

@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;// 依赖注入数据访问层

    @Override
    public void saveAll() {
        User mu1 = new User();
        mu1.setUname("陈恒1");
        mu1.setUsex("男");
        mu1.setAge(88);
        User mu2 = new User();
        mu2.setUname("陈恒2");
        mu2.setUsex("女");
        mu2.setAge(18);
        User mu3 = new User();
        mu3.setUname("陈恒3");
        mu3.setUsex("男");
        mu3.setAge(99);
        List<User> users = new ArrayList<User>();
        users.add(mu1);
        users.add(mu2);
        users.add(mu3);
        // 调用父接口中的方法saveAll
        userRepository.saveAll(users);

    }

    @Override
    public List<User> findAll() {
        // 调用父接口中的方法findAll
        return userRepository.findAll();
    }

    @Override
    public User findByUname(String uname) {
        return userRepository.findByUname(uname);
    }

    @Override
    public List<User> findByUnameLike(String uname) {
        return userRepository.findByUnameLike("%" + uname + "%");
    }

    @Override
    public User getOne(int id) {
        // 调用父接口中的方法getOne
        return userRepository.getOne(id);
    }

}
package com.book.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 com.book.service.UserService;

@Controller
public class UserTestController {
    @Autowired
    private UserService userService;

    @RequestMapping("/save")
    @ResponseBody
    public String save() {
        userService.saveAll();
        return "保存用户成功!";
    }

    @RequestMapping("/findByUname")
    public String findByUname(String uname, Model model) {
        model.addAttribute("title", "根据用户名查询一个用户");
        model.addAttribute("auser", userService.findByUname(uname));
        return "showAuser";
    }

    @RequestMapping("/getOne")
    public String getOne(int id, Model model) {
        model.addAttribute("title", "根据用户id查询一个用户");
        model.addAttribute("auser", userService.getOne(id));
        return "showAuser";
    }

    @RequestMapping("/findAll")
    public String findAll(Model model) {
        model.addAttribute("title", "查询所有用户");
        model.addAttribute("allUsers", userService.findAll());
        return "showAll";
    }

    @RequestMapping("/findByUnameLike")
    public String findByUnameLike(String uname, Model model) {
        model.addAttribute("title", "根据用户名模糊查询所有用户");
        model.addAttribute("allUsers", userService.findByUnameLike(uname));
        return "showAll";
    }
}
package com.book;

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

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