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配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章