当前位置:首页 > 文章列表 > 数据库 > MySQL > SpringBoot+Spring JdbcTemplate后端开发实例(连接mysql数据库)

SpringBoot+Spring JdbcTemplate后端开发实例(连接mysql数据库)

来源:SegmentFault 2023-01-28 09:52:18 0浏览 收藏

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

项目整体目录如下:

image.png

用户表结构
image.png

mysql数据库配置
image.png

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  paralist = new ArrayList();
        return this.queryForList(sql,paralist);
    }
    @Override
 public Object queryById(String loginName) {
        String sql="select id from sys_user where login_name='"+loginName+"'";
        ArrayList  paralist = new ArrayList();
        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(){
            @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;
            }
        });
    }
}

业务层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 queryByPage(String sql, ArrayList paralist, PageObj pageObj){
      Map modelMap = new HashMap();
      List list =this.queryByPage(sql, new RowMapper(){
         @Override
 public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            Map row = new HashMap();  
             ResultSetMetaData rowdata =rs.getMetaData();
             for(int i = 1 ; i queryForList(String sql,ArrayList paralist){
      return this.getJdbcTemplate().query(sql, paralist.toArray(),new RowMapper(){
         @Override
 public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            Map row = new HashMap();  
             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> 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  List queryByPage(String sql, Object[] params, RowMapper 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  List queryByPage(String sql, RowMapper 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  List queryByPage(String sql, RowMapper 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);
   }
   
}

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删除
技术分享 | 大量 Opening tables 案例分析技术分享 | 大量 Opening tables 案例分析
上一篇
技术分享 | 大量 Opening tables 案例分析
MySQL json
下一篇
MySQL json
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    23次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    35次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    37次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    47次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    40次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码