SpringBoot+Spring JdbcTemplate后端开发实例(连接mysql数据库)
来源:SegmentFault
时间:2023-01-28 09:52:18 276浏览 收藏
在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《SpringBoot+Spring JdbcTemplate后端开发实例(连接mysql数据库)》,聊聊MySQL、ORM、springboot、后端,希望可以帮助到正在努力赚钱的你。
项目整体目录如下:

用户表结构

mysql数据库配置

user实体类
package com.example.system.entity;
import java.util.Date;
/**
* 用户信息对象
* @author xutao
* 创建时间:2020-12-8 上午13:59:23
*/public class sysUser{
public int id;//id
public String username;//用户名
public String loginname;//登录账号
public String password;//密码
public int areaid;//区域编码
public int orgid;//机构id
public String sex;//性别
public String email;//邮箱
public int phone;//手机号码
public String ipaddress;//IP地址
public int errorcount;//错误计数
public Date lastlogintime;//上次登录时间
public Date passwdinvaltime;//密码失效时间
public Date locktime;//锁定时间
public int delflag;//删除标识
public Date createtime;//创建时间
public String createuser;//创建用户
public Date updatetime;//更新时间
public String updateuser;//更新用户
public int groupid;//组别id
public int roleid;//角色id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAreaid() {
return areaid;
}
public void setAreaid(int areaid) {
this.areaid = areaid;
}
public int getOrgid() {
return orgid;
}
public void setOrgid(int orgid) {
this.orgid = orgid;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
public String getIpaddress() {
return ipaddress;
}
public void setIpaddress(String ipaddress) {
this.ipaddress = ipaddress;
}
public int getErrorcount() {
return errorcount;
}
public void setErrorcount(int errorcount) {
this.errorcount = errorcount;
}
public Date getLastlogintime() {
return lastlogintime;
}
public void setLastlogintime(Date lastlogintime) {
this.lastlogintime = lastlogintime;
}
public Date getPasswdinvaltime() {
return passwdinvaltime;
}
public void setPasswdinvaltime(Date passwdinvaltime) {
this.passwdinvaltime = passwdinvaltime;
}
public Date getLocktime() {
return locktime;
}
public void setLocktime(Date locktime) {
this.locktime = locktime;
}
public int getDelflag() {
return delflag;
}
public void setDelflag(int delflag) {
this.delflag = delflag;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getCreateuser() {
return createuser;
}
public void setCreateuser(String createuser) {
this.createuser = createuser;
}
public Date getUpdatetime() {
return updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
public String getUpdateuser() {
return updateuser;
}
public void setUpdateuser(String updateuser) {
this.updateuser = updateuser;
}
public int getGroupid() {
return groupid;
}
public void setGroupid(int groupid) {
this.groupid = groupid;
}
public int getRoleid() {
return roleid;
}
public void setRoleid(int roleid) {
this.roleid = roleid;
}
}持久层接口dao
package com.example.system.dao;
import com.example.system.entity.sysUser;
/**
* 登录功能dao接口
* @author lmwang
* 创建时间:2020-12-9 下午16:53:20
*/
public interface loginDao {
//登录验证账号密码
public Object login(String loginName,String password);
//首次登录强制修改密码/重置密码(管理员权限)
public void updatePd(int id,String password);
//登录成功后获取用户唯一id
public Object queryById(String loginName);
//通过唯一id获取用户对象
public sysUser userById(int id);
//用户修改个人信息
public void updateSysUser(sysUser user);
}dao映射层daoimpl,继承dao接口
package com.example.system.dao.impl;
import com.example.system.dao.loginDao;
import com.example.system.entity.sysUser;
import com.example.system.util.JdbcDaoSupport4mysql;
import com.example.system.util.MysqlDb;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@MysqlDb
@Repository
public class loginDaoImpl extends JdbcDaoSupport4mysql implements loginDao {
@Override
public Object login(String loginName, String password) {
String sql="select password from sys_user where login_name='"+loginName+"'";
ArrayList<object> paralist = new ArrayList<object>();
return this.queryForList(sql,paralist);
}
@Override
public Object queryById(String loginName) {
String sql="select id from sys_user where login_name='"+loginName+"'";
ArrayList<object> paralist = new ArrayList<object>();
return this.queryForList(sql,paralist);
}
//密码修改与重置
@Override
public void updatePd(int id,String password) {
String sql="update sys_user set password='"+password+"' where id='"+id+"'";
this.getJdbcTemplate().update(sql, new Object[]{id,password});
}
@Override
public void updateSysUser(sysUser user) {
if(null!=user){
String sql="update sys_user set 1=1";
if(null!=user.getLoginname()){
}
if(0!=user.areaid){
sql+=",area_id= "+user.areaid;
}
if(null!=user.getSex()){
sql=",sex='"+user.getSex()+"' ";
}
if(null!=user.getEmail()){
sql=",email='"+user.getEmail()+"' ";
}
if(null!=user.getIpaddress()){
sql=",ip_address='"+user.getIpaddress()+"'";
}
sql+= " where loginName='"+user.getLoginname()+"' where id="+user.getId();
this.getJdbcTemplate().update(sql,new Object[]{user});
}
}
@Override
public sysUser userById(int id) {
String sql="select id,username,login_name,password,area_id,org_id,sex,email," +
"phone,ip_address,error_count,last_login_time,passwd_inval_time,lock_time," +
"del_flag, create_time,create_user,update_time,update_user," +
"group_id,role_id from sys_user where id='"+id+"'";
return this.getJdbcTemplate().query(sql,new Object[]{id},new ResultSetExtractor<sysuser>(){
@Override
public sysUser extractData(ResultSet rs) throws SQLException, DataAccessException {
sysUser user = new sysUser();
while(rs.next()) {
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setLoginname(rs.getString("login_name"));
user.setPassword(rs.getString("password"));
user.setAreaid(rs.getInt("area_id"));
user.setOrgid(rs.getInt("org_id"));
user.setSex(rs.getString("sex"));
user.setEmail(rs.getString("email"));
user.setPhone(rs.getInt("phone"));
user.setIpaddress(rs.getString("ip_address"));
user.setErrorcount(rs.getInt("error_count"));
user.setLastlogintime(rs.getDate("last_login_time"));
user.setPasswdinvaltime(rs.getDate("passwd_inval_time"));
user.setLocktime(rs.getDate("lock_time"));
user.setDelflag(rs.getInt("del_flag"));
user.setCreatetime(rs.getDate("create_time"));
user.setCreateuser(rs.getString("create_user"));
user.setUpdatetime(rs.getDate("update_time"));
user.setUpdateuser(rs.getString("update_user"));
user.setGroupid(rs.getInt("group_id"));
user.setRoleid(rs.getInt("role_id"));
}
return user;
}
});
}
}</sysuser></object></object></object></object>业务层service
package com.example.system.service;
import com.example.system.dao.loginDao;
import com.example.system.dao.sysLoginLogDao;
import com.example.system.entity.sysUser;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class loginService {
@Resource
private loginDao logindao;
@Resource
private sysLoginLogDao sysLoginLogDao;
//登录验证
public boolean login(String loginName,String password){
Object pd= logindao.login(loginName,password);
//密码验证
if(pd.equals(password)){
//登录成功
return true;
}
return false;
}
//修改/重置密码
public void updatePd(int id[],String password){
//password为null时,默认为重置标识reset,执行密码重置操作
if(null==password){
password="000000";
}
for (int i : id) {
logindao.updatePd(i,password);
}
}
//修改用户信息
public void updateSysUser(sysUser user){
logindao.updateSysUser(user);
}
//通过唯一id获取用户详情
public sysUser queryUser(int id){
return logindao.userById(id);
}
//查询登录用户的唯一id
public int queryUserById(String loginName){
return Integer.parseInt(logindao.queryById(loginName).toString());
}
}控制层controller,前后端分离开发,开放接口给前端调用
package com.example.system.controller;
import com.example.system.entity.sysUser;
import com.example.system.service.loginService;
import com.example.system.util.jwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 登录验证及相关操作Controller
*/@RestController
@RequestMapping(value="/system")
public class LoginController {
@Autowired
private loginService loginService;
//登录页
@RequestMapping(value="/getLoginPage.do")
public String getLoginPage(){
return "";
}
//辅控系统首页
@RequestMapping(value="/getIndexPage.do")
public String getIndexPage() {
return "";
}
/**
*登录验证
*/
@RequestMapping(value="/getLogin.do",method= RequestMethod.POST)
@ResponseBody
public Map getLogin(String loginName,String password){
Map map = new HashMap();
Boolean login=loginService.login(loginName,password);
if(login==false){
//登录信息验证失败
//返回验证提示
map.put("flag",login);//登录验证标识
map.put("info","账号密码输入有误!");
return map;
}else{
String token=null;//登录令牌
String refreshToken=null;//刷新令牌
int id=loginService.queryUserById(loginName);
try {
token=jwtUtil.createToken(id+"",loginName);
} catch (Exception e) {
e.printStackTrace();
}
//刷新token,免密登陆
refreshToken= UUID.randomUUID().toString().replaceAll("-","");
map.put("flag",login);//登录验证标识
map.put("time",86400);//1天=86400秒
map.put("token",token);
map.put("refreshToken", refreshToken);
return map;
}
}
/**
* 重置密码(管理员权限)
*/
@RequestMapping(value="/reset.do",method= RequestMethod.POST)
@ResponseBody
public void Reset(int[] id){
loginService.updatePd(id,null);
}
/**
* 修改密码
*/
@RequestMapping(value="/updatePd.do",method= RequestMethod.POST)
@ResponseBody
public void updatePd(int[] id,String password){
loginService.updatePd(id,password);
}
/**
* 修改用户信息
*/
@RequestMapping(value="/updateInfo.do",method= RequestMethod.POST)
@ResponseBody
public void updatePersonInfo(sysUser user){
loginService.updateSysUser(user);
}
}工具类
JdbcDaoSupport4mysql
package com.example.system.util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.example.system.entity.PageObj;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
/**
* mysql dao的父类
* @author chen.kui
* @date 2014年9月28日15:26:57
*/@Repository
public class JdbcDaoSupport4mysql{
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 为当前的DAO返回 JdbcTemplate
*/ public final JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
/**
* sql执行 分页
* 2015-12-2
*/
public Map<string object> queryByPage(String sql, ArrayList<object> paralist, PageObj pageObj){
Map<string object> modelMap = new HashMap<string object>();
List<object> list =this.queryByPage(sql, new RowMapper<object>(){
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<string> row = new HashMap<string>();
ResultSetMetaData rowdata =rs.getMetaData();
for(int i = 1 ; i queryForList(String sql,ArrayList<object> paralist){
return this.getJdbcTemplate().query(sql, paralist.toArray(),new RowMapper<object>(){
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<string> row = new HashMap<string>();
ResultSetMetaData rowdata =rs.getMetaData();
for(int i = 1 ; i> queryByPageForList(String sql, PageObj pageObj, Object... params) {
int startIndex = (pageObj.getPage()-1) * pageObj.getRows();
pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", params, Integer.class));
String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows();
return this.jdbcTemplate.queryForList(pageSql, params);
}
public List<map object>> queryByPageForList(String sql, PageObj pageObj) {
int startIndex = (pageObj.getPage()-1) * pageObj.getRows();
pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", Integer.class));
String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows();
return this.jdbcTemplate.queryForList(pageSql);
}
/**
* 通用的分页查询
* @param sql
* @param rowMapper
* @param pageObj
* @return
*/ public <t> List<t> queryByPage(String sql, Object[] params, RowMapper<t> rowMapper, PageObj pageObj) {
int startIndex = (pageObj.getPage()-1) * pageObj.getRows();
pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+") PAGE_", params, Integer.class));
String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows();
return this.jdbcTemplate.query(pageSql, params, rowMapper);
}
/**
* 通用的分页查询
* @param sql
* @param params
* @param rowMapper
* @param pageObj
* @return
*/ public <t> List<t> queryByPage(String sql, RowMapper<t> rowMapper, PageObj pageObj) {
int startIndex = (pageObj.getPage()-1) * pageObj.getRows();
pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_", Integer.class));
String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows();
return this.jdbcTemplate.query(pageSql, rowMapper);
}
public <t> List<t> queryByPage(String sql, RowMapper<t> rowMapper, PageObj pageObj, Object... params) {
int startIndex = (pageObj.getPage()-1) * pageObj.getRows();
pageObj.setTotal(this.getJdbcTemplate().queryForObject("SELECT COUNT(*) TOTAL FROM ("+sql+")PAGE_",params, Integer.class));
String pageSql = "SELECT PAGE_.* FROM("+sql+" )PAGE_ LIMIT "+startIndex+","+pageObj.getRows();
return this.jdbcTemplate.query(pageSql, rowMapper,params);
}
}</t></t></t></t></t></t></t></t></t></map></string></string></object></object></string></string></object></object></string></string></object></string>MysqlDb
package com.example.system.util;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Description 区别各数据库的实现类的注解
* @author zhang.dechang
* @date 2015年3月30日 上午10:06:00
* */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MysqlDb {
String value() default "";
}今天带大家了解了MySQL、ORM、springboot、后端的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
最新阅读
更多>
-
117 收藏
-
411 收藏
-
420 收藏
-
264 收藏
-
266 收藏
-
392 收藏
-
333 收藏
-
234 收藏
-
448 收藏
-
416 收藏
-
225 收藏
-
145 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习