Springboot 整合templateJdbc,用模板引擎thymeleaf,實現數據庫的連接
以jdbc的形式訪問mysql數據庫是比較基礎的知識,理解spring boot中如何使用jdbc對我們理解spring boot對mybatis等數據框架是很有意義的。
一、數據準備
step1. 進入MySQL monitor
cd D:\mysql-8.0.19-winx64\mysql-8.0.19-winx64\bin
mysql -u root -p
密碼
step2. 創建數據庫
輸入命令:mysql> create database mobiledb;
成功提示:Query OK, 1 row affected (0.02 sec)
step3. 使用數據庫
輸入命令:mysql> use mobiledb
成功提示:Database changed
step4. 創建表
輸入命令:mysql> create table users
(userid int not null auto_increment, primary key(userid), //設置主鍵和自增列
username varchar(30),
usersex varchar(10)
) ;
create table users(
userid int not null auto_increment, primary key(userid),
username varchar(30),
usersex varchar(10)
);
tep5. 向新建的mobile表插入數據(等等搭建好項目直接在頁面上傳)
方式二:多條插入,
輸入命令:mysql> insert into users(username,usersex)
values
(‘小米’,‘男’), (‘小紅’,‘女’), (‘小藍’,‘女’);
insert into users(username,usersex)
values
(‘小米’,‘男’);
step6. 檢測執行結果
查看數據庫:show databases;
查看錶:show table
查看錶結構:describe users;
查詢表數據:select * from users;
亂碼解決:https://www.cnblogs.com/paulhe/p/4229676.html
刪除表結構:drop table 表名稱
二、代碼實現:
目錄:
1、修改pom文件,引入相關依賴
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springboot</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springbootjdbc</artifactId>
<!--應用spring springmvc -->
<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>
<!--JDBC啓動器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 數據庫驅動座標 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!-- Druid數據源依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
</dependencies>
</project>
2、配置數據庫信息,在application.properties中添加如下內容:
jdbc:mysql://localhost:3306/mobiledb 中的modiledb 是你的數據庫名,
spring.datasource.url=jdbc:mysql://localhost:3306/mobiledb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
pring.thymeleaf.cache=false
spring.thymeleaf.content-type=text/html
spring.thymeleaf.check-template-location=true
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
[email protected]
spring.mail.password=ynuxsvplrsribjca
spring.mail.host=smtp.qq.com
3、創建實體類
package pojo;
public class Users {
private Integer userid;
private String username;
private String usersex;
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsersex() {
return usersex;
}
public void setUsersex(String usersex) {
this.usersex = usersex;
}
}
4、創建持久層(DAO)
接口:
package dao;
import java.util.List;
import pojo.Users;
public interface UserDao {
void insertUsers(Users users);
List<Users> selectUsersall();
Users selectUserid(Integer id);
void updataUsers(Users users);
void deleteUsers(Integer id);
}
實現接口:
package dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import dao.UserDao;
import pojo.Users;
/**
*
* 持久層
*
*/
@Repository
public class UsersDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 添加用戶
*/
@Override
public void insertUsers(Users users) {
String sql="insert into users(username,usersex) values(?,?)";
jdbcTemplate.update(sql,users.getUsername(),users.getUsersex());
}
/**
* 查詢所有用戶
*/
@Override
public List<Users> selectUsersall() {
String sql="select * from users";
return this.jdbcTemplate.query(sql, new RowMapper<Users>() {
public Users mapRow(ResultSet rs, int rowNum) throws SQLException {
Users user = new Users();
user.setUserid(rs.getInt("userid"));
user.setUsername(rs.getString("username"));
user.setUsersex(rs.getString("usersex"));
return user;
}
});
}
/**
* 預更新
*/
@Override
public Users selectUserid(Integer id) {
Users user=new Users();
String sql="select * from users where userid=?";
Object[] arr=new Object[] {id};//傳入的值存在arr
this.jdbcTemplate.query(sql, arr, new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException {
user.setUserid(rs.getInt("userid"));
user.setUsername(rs.getString("username"));
user.setUsersex(rs.getString("usersex"));
System.out.println(user.getUsername());
System.out.println(user);
}
});
return user;
}
/**
* 更新用戶
*/
@Override
public void updataUsers(Users users) {
String sql="update users set username=?,usersex=? where userid=?";
jdbcTemplate.update(sql,users.getUsername(),users.getUsersex(),users.getUserid());
}
@Override
public void deleteUsers(Integer id) {
String sql="delete from users where userid=?";
jdbcTemplate.update(sql,id);
}
}
5、創建業務層(Service)
接口:
package Service;
import java.util.List;
import pojo.Users;
public interface UsersService {
void addUser(Users users);
List<Users> selectUserall();
Users selectUserid(Integer id);
void updataUser(Users users);
void deleteUser(Integer id);
void sendFileTemplateEmaile(String sendTo,String Title,String info);
}
實現接口:
package Service.Impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.amqp.RabbitProperties.Template;
import org.springframework.context.annotation.Primary;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.thymeleaf.spring4.view.ThymeleafView;
import Service.UsersService;
import dao.ConfingEmailName;
import dao.UserDao;
import pojo.Users;
/**
*
* 用戶管理業務層
*
*/
@Service
public class UserServiceImpl implements UsersService {
@Autowired
private UserDao userDao;
/**
* 添加用戶
*/
@Override
@Transactional
public void addUser(Users users) {
this.userDao.insertUsers(users);
}
/**
* 查詢所有用戶
*/
@Override
public List<Users> selectUserall() {
return this.userDao.selectUsersall();
}
/**
* 預更新
*/
@Override
public Users selectUserid(Integer id) {
// TODO Auto-generated method stub
return this.userDao.selectUserid(id);
}
/**更新
*
*/
@Override
public void updataUser(Users users) {
this.userDao.updataUsers(users);
}
@Override
public void deleteUser(Integer id) {
this.userDao.deleteUsers(id);
}
@Autowired
private ConfingEmailName name;
@Autowired
private JavaMailSender send;
@Override
public void sendFileTemplateEmaile(String sendTo, String Title, String info) {
MimeMessage message = send.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(name.getSendEmailName());
helper.setTo(sendTo);
helper.setSubject(Title);
} catch (Exception e) {
e.printStackTrace();
}
send.send(message);
}
}
6、邏輯層(controller)
跳轉頁面:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
/**
* 頁面跳轉
*
*
*/
public class pageController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page) {
return page;
}
}
實現邏輯方法頁面:
package controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import Service.UsersService;
import pojo.Users;
@Controller
@RequestMapping("/user")
public class Usercontroller {
@GetMapping("/showInfo")
public String showInfo() {
return "OK";
}
@Autowired
private UsersService usersService;
/**
* 添加用戶
* @return
*/
@PostMapping("/addUser")
public String showInfo(Users users) {
try {
this.usersService.addUser(users);
}catch (Exception e) {
e.printStackTrace();
return "error";
}
return "redirect:/OK";
}
/**
* 查詢用戶
* @return
*/
@GetMapping("/selectUserall")
public String selectInfo(Model model) {
List<Users> list=null;
try {
list=this.usersService.selectUserall();
model.addAttribute("list",list);
}catch (Exception e) {
e.printStackTrace();
return "error";
}
return "showUsers";
}
/**
* 預更新用戶
* @return
*/
@GetMapping("/selectUserid")
public String selectid(Integer id,Model model) {
try {
Users user=this.usersService.selectUserid(id);
model.addAttribute("user", user);
}catch (Exception e) {
e.printStackTrace();
return "error";
}
return "updataUser";
}
/**
* 更新用戶
* @return
*/
@PostMapping("/updataUser")
public String updataUser(Users users) {
try {
this.usersService.updataUser(users);
}catch (Exception e) {
e.printStackTrace();
return "error";
}
return "redirect:/OK";
}
/**
* 刪除用戶
* @return
*/
@GetMapping("/delectUser")
public String delectUser(Integer id) {
try {
this.usersService.deleteUser(id);
}catch (Exception e) {
e.printStackTrace();
return "error";
}
return "redirect:/OK";
}
/**
* 發送郵箱
* @return
*/
@GetMapping("/send")
public String send(){
this.usersService.sendFileTemplateEmaile("[email protected]", "數據庫", "showUsers.html");
return"ok";
}
}
7、templates 前端頁面代碼:
addUser.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form th:action="@{/user/addUser}" method="post">
<input type="text" name="username"><br/>
<input type="text" name="usersex"><br/>
<input type="submit" value="OK"><br/>
</form>
</body>
</html>
showUsers.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center">
<tr>
<th>用戶ID</th>
<th>用戶姓名</th>
<th>用戶性別</th>
<th>操作</th>
</tr>
<tr th:each="u:${list}">
<td th:text="${u.userid}"></td>
<td th:text="${u.username}"></td>
<td th:text="${u.usersex}"></td>
<td>
<a th:href="@{/user/selectUserid(id=${u.userid})}">修改</a>
<a th:href="@{/user/delectUser(id=${u.userid})}">刪除</a>
<a th:href="@{/user/send(id=${u.userid})}">發送郵件</a>
</td>
</tr>
</table>
</body>
</html>
updataUser.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>更新</h1>
<form th:action="@{/user/updataUser}" method="post">
<input type="hidden" name="userid" th:value="${user.userid}">
<input type="text" name="username" th:value="${user.username}"><br/>
<input type="text" name="usersex" th:value="${user.usersex}"><br/>
<input type="submit" value="OK"><br/>
</form>
</body>
</html>
7、啓動類:
package Test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages={"controller","dao","dao.impl.mapper","Service","Service.Impl"})
public class Test {
public static void main(String[] args) {
SpringApplication.run(Test.class, args);
}
}
運行結果:
這裏插入數據
結果就不一一截圖,注意:要開啓你的數據庫,不然有錯誤。
由上面代碼我們發現,spring boot 只是簡化了xml的配置麻煩,並沒有減少我們java代碼的編寫量。
spring boot 不是spring 功能的增強,而是提供了一種快速使用spring 的方式:開箱即用,沒有代碼生成,也無需XML配置。