spring和mybatis整合小案例
Posted 勿忘丶心安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring和mybatis整合小案例相关的知识,希望对你有一定的参考价值。
一案例效果展示:
登录模块:
用户注册模块:
二项目功能介绍:
(1)登录系统功能介绍:
1)如果用户未输入用户名和密码,直接点击“”确认“按钮”,会提示用户名和密码不能为空;
如图:
2)如果用户未输入用户名,用户名输入框失去焦点,会提示用户不能为空
3)如果用户未输入密码,密码输入框失去焦点,会提示密码不能为空
4)如果用户输入了用户名和密码,会弹出登录中的提示框,但用户名或密码错误,系统会在控制台输出登录失败:
图一:
图二:
5)如果用户名和密码正确,会弹出登录提示框,并在控制台输出登录成功.
(2)注册系统功能介绍
1)注册窗体的输入框添加的焦点监听器,会约束用户的输入。
2)如果用户输入的信息合法,则向数据库插入一条记录。
三:项目目录结构
四、代码
(1)在com.chenjiawei.frame包下的类文件:
1)登录窗体代码:
package com.chenjiawei.frame; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.chenjiawei.service.UserService; /** * 登录窗体 * @author SS * */ public class LoginFrame extends JFrame implements ActionListener,FocusListener,Runnable{ private JTextField TextUsername,TextPassword; private JLabel UsernameErrorTipe,PasswordErrorTipe; private JButton regist,login; private Boolean canLogin=false; private Thread thread; private String username; private String password; private LoginTipeFrame ltf; public LoginFrame(){ init(); setVisible(true);//设置窗体可视化 setTitle("登录"); //设置标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体的关闭操作 setBounds(500, 200, 600, 500); thread=new Thread(this); } /** * 初始化窗体内部控件 */ private void init(){ Box box1 =Box.createHorizontalBox(); //创建用户名水平盒子 Box box2 =Box.createHorizontalBox(); //创建密码水平盒子 Box box3 =Box.createHorizontalBox(); //创建登录或取消水平盒子 Box box=Box.createVerticalBox(); //创建垂直盒子 JLabel LabUsername=new JLabel("用户名:"); TextUsername=new JTextField(10); UsernameErrorTipe=new JLabel("用户名不存在"); UsernameErrorTipe.setVisible(false); TextUsername.addFocusListener(this); //添加焦点事件 JLabel LabPassword=new JLabel("密 码:"); TextPassword=new JTextField(10); PasswordErrorTipe=new JLabel("密 码 错 误 "); PasswordErrorTipe.setVisible(false); TextPassword.addFocusListener(this); //添加焦点事件 regist=new JButton("注册"); login=new JButton("登录"); regist.addActionListener(this); login.addActionListener(this); //将对于控件添加到盒子里面 box1.add(LabUsername); box1.add(Box.createHorizontalStrut(10)); box1.add(TextUsername); box1.add(Box.createHorizontalStrut(10)); box1.add(UsernameErrorTipe); box2.add(LabPassword); box2.add(Box.createHorizontalStrut(10)); box2.add(TextPassword); box2.add(Box.createHorizontalStrut(10)); box2.add(PasswordErrorTipe); box3.add(regist); box3.add(Box.createHorizontalStrut(10)); box3.add(login); box.add(Box.createVerticalStrut(150)); box.add(box1); box.add(Box.createVerticalStrut(10)); box.add(box2); box.add(Box.createVerticalStrut(10)); box.add(box3); this.setLayout(new FlowLayout()); //设置布局 this.add(box); } /** * 给登录和注册按钮添加事件处理程序 */ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == login){ System.out.println("登录"); username=TextUsername.getText().trim(); password=TextPassword.getText().trim(); if(username.trim() !=null && !username.trim().equals("") && password.trim() !=null && !password.equals("")){ canLogin=true; thread.start(); //开启线程 } if(canLogin){ System.out.println("登录........"); ltf=new LoginTipeFrame(); //实例化登录提示窗体 }else{ UsernameErrorTipe.setText("用户名不能为空"); PasswordErrorTipe.setText("密码不能为空"); UsernameErrorTipe.setVisible(true); PasswordErrorTipe.setVisible(true); } }else if(e.getSource()==regist){ new RegiesrFrame(); this.dispose(); //关闭当前窗体 } } /** * 给用户输入框和密码输入框添加事件处理程序 */ @Override public void focusGained(FocusEvent e) { if(e.getSource()==TextUsername){ UsernameErrorTipe.setText(""); UsernameErrorTipe.setVisible(false); }else if(e.getSource()==TextPassword){ PasswordErrorTipe.setText(""); PasswordErrorTipe.setVisible(false); } } @Override public void focusLost(FocusEvent e) { if(e.getSource()==TextUsername){ if(TextUsername.getText().trim() ==null || TextUsername.getText().trim().equals("")){ UsernameErrorTipe.setText("用户名不能为空"); UsernameErrorTipe.setVisible(true); canLogin=false; } }else if(e.getSource()==TextPassword){ if(TextPassword.getText().trim() == null || TextPassword.getText().trim().equals("")){ PasswordErrorTipe.setText("密码不能为空"); PasswordErrorTipe.setVisible(true); canLogin=false; } } } @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService us=applicationContext.getBean(UserService.class); boolean isSuccessLogin=us.doLogin(username, password); if(isSuccessLogin){ System.out.println("登录成功"); ltf.dispose(); //关闭登录提示窗体 }else{ System.out.println("登录失败"); ltf.dispose(); //关闭登录提示窗体 } } }
2)注册窗体
package com.chenjiawei.frame; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JRadioButton; import javax.swing.JTextField; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.chenjiawei.po.User; import com.chenjiawei.service.UserService; /** * 注册窗体 * @author SS * */ public class RegiesrFrame extends JFrame implements ActionListener,FocusListener{ private JTextField TextUsername,TextPassword,TextConfimPassword,TextIDCard; private JLabel UsernameErrorTipe,PasswordErrorTipe,ConfimPasswordErrorTipe,IDCardErrorTipe; private JRadioButton boy,gril,China,HongKong,Others; private JButton canace,regiest; private Boolean isUsername=false,isPassword=false,isConfimPassword=false,isIDCard=false; //判断用户名、密码、确认密码、身份证是否可以注册 public RegiesrFrame(){ init(); setBounds(500, 200, 600, 500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("注册"); } /** * 初始化控件 */ private void init(){ Box box1=Box.createHorizontalBox(); Box box2=Box.createHorizontalBox(); Box box3=Box.createHorizontalBox(); Box box4=Box.createHorizontalBox(); Box box5=Box.createHorizontalBox(); Box box6=Box.createHorizontalBox(); Box box7=Box.createHorizontalBox(); Box box=Box.createVerticalBox(); JLabel LabUsername=new JLabel("用 户 名:"); TextUsername=new JTextField(10); UsernameErrorTipe=new JLabel(" 用户名不合法"); UsernameErrorTipe.setVisible(false); TextUsername.addFocusListener(this); //给输入框添加焦点监听器 JLabel LabPassword=new JLabel("密 码:"); TextPassword=new JTextField(10); PasswordErrorTipe=new JLabel(" 密码不合法"); PasswordErrorTipe.setVisible(false); TextPassword.addFocusListener(this); //给输入框添加焦点监听器 JLabel LabConfimPassword=new JLabel("确认密码:"); TextConfimPassword=new JTextField(10); ConfimPasswordErrorTipe=new JLabel("两次密码不一致"); ConfimPasswordErrorTipe.setVisible(false); TextConfimPassword.addFocusListener(this); //给输入框添加焦点监听器 JLabel Sex=new JLabel("性 别:"); boy=new JRadioButton(" 男 "); gril=new JRadioButton(" 女 "); ButtonGroup group1=new ButtonGroup(); group1.add(boy); group1.add(gril); JLabel LabIDCardType=new JLabel("身份证类型: "); China=new JRadioButton("大 陆"); HongKong=new JRadioButton("港 澳"); Others=new JRadioButton("其 他 "); ButtonGroup group2=new ButtonGroup(); group2.add(China); group2.add(HongKong); group2.add(Others); JLabel LabIDCard=new JLabel("身 份 证:"); TextIDCard=new JTextField(10); IDCardErrorTipe=new JLabel(" 身份证不合法"); IDCardErrorTipe.setVisible(false); TextIDCard.addFocusListener(this); //给输入框添加焦点监听器 canace=new JButton("取消"); regiest=new JButton("注册"); canace.addActionListener(this); regiest.addActionListener(this); box1.add(LabUsername); box1.add(Box.createHorizontalStrut(10)); box1.add(TextUsername); box1.add(Box.createHorizontalStrut(10)); box1.add(UsernameErrorTipe); box2.add(LabPassword); box2.add(Box.createHorizontalStrut(10)); box2.add(TextPassword); box2.add(Box.createHorizontalStrut(10)); box2.add(PasswordErrorTipe); box3.add(LabConfimPassword); box3.add(Box.createHorizontalStrut(10)); box3.add(TextConfimPassword); box3.add(Box.createHorizontalStrut(10)); box3.add(ConfimPasswordErrorTipe); box4.add(Sex); box4.add(Box.createHorizontalStrut(10)); box4.add(boy); box4.add(Box.createHorizontalStrut(10)); box4.add(gril); box5.add(LabIDCardType); box5.add(Box.createHorizontalStrut(10)); box5.add(China); box5.add(Box.createHorizontalStrut(10)); box5.add(HongKong); box5.add(Box.createHorizontalStrut(10)); box5.add(Others); box6.add(LabIDCard); box6.add(Box.createHorizontalStrut(10)); box6.add(TextIDCard); box6.add(Box.createHorizontalStrut(10)); box6.add(IDCardErrorTipe); box7.add(canace); box7.add(Box.createHorizontalStrut(30)); box7.add(regiest); box.add(Box.createVerticalStrut(50)); box.add(box1); box.add(Box.createVerticalStrut(10)); box.add(box2); box.add(Box.createVerticalStrut(10)); box.add(box3); box.add(Box.createVerticalStrut(10)); box.add(box4); box.add(Box.createVerticalStrut(10)); box.add(box5); box.add(Box.createVerticalStrut(10)); box.add(box6); box.add(Box.createVerticalStrut(10)); box.add(box7); this.setLayout(new FlowLayout()); //设置布局 this.add(box); } /** * 给注册和取消添加按钮监听器 */ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == regiest){ //&& isPassword && isConfimPassword && isIDCard if(isUsername && isPassword && isConfimPassword && isIDCard){ String username=TextUsername.getText().trim(); String password=TextPassword.getText().trim(); String sex="男"; if(gril.isSelected()){ sex="女"; } String idCardType="大陆"; if(HongKong.isSelected()){ idCardType="港澳"; }else if(Others.isSelected()){ idCardType="其他"; } String idCard=TextIDCard.getText().trim(); ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService us=applicationContext.getBean(UserService.class); //封装User数据 User user=new User(); user.setUsername(username); user.setPassword(password); user.setSex(sex); user.setIdCardType(idCardType); user.setIdCard(idCard); System.out.println(user); //添加用户数据 boolean doRegiest=us.doRegiest(user); if(doRegiest){ dispose(); new ConfimFrame("注册成功",1); }else{ new ConfimFrame("注册失败",0); } }else{ new ConfimFrame("信息不完善,请填写信息",0); } } } /** * 给输入框获取焦点的回调函数 * @param e */ @Override public void focusGained(FocusEvent e) { if(e.getSource() == TextUsername){ UsernameErrorTipe.setVisible(false); }else if(e.getSource() == TextPassword){ PasswordErrorTipe.setVisible(false); }else if(e.getSource() == TextConfimPassword){ ConfimPasswordErrorTipe.setVisible(false); }else if(e.getSource() == TextIDCard){ IDCardErrorTipe.setVisible(false); } } /** * 输入框失去焦点的回调函数 */ @Override public void focusLost(FocusEvent e) { if(e.getSource() == TextUsername){ String username =TextUsername.getText().trim(); //获取输入框文本内容 if(TextUsername.getText().trim() == null || TextUsername.getText().trim().equals("")){ UsernameErrorTipe.setText("用户名不能为空"); UsernameErrorTipe.setVisible(true); isUsername=false; //用户名不合法 }else{ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=applicationContext.getBean(UserService.class); boolean isSameUsername=userService.isSameUsername(username); if(isSameUsername){ UsernameErrorTipe.setText("用户名已存在"); UsernameErrorTipe.setVisible(true); isUsername=false; //用户名不合法 }else{ UsernameErrorTipe.setText("该用户名可以注册"); UsernameErrorTipe.setVisible(true); isUsername=true; //用户名合法 } } }else if(e.getSource() == TextPassword){ String password=TextPassword.getText().trim(); if(password ==null || password.equals("")){ PasswordErrorTipe.setText("密码不能为空"); PasswordErrorTipe.setVisible(true); isPassword=false; //密码不合法 }else{ if(password.length()>=6){ PasswordErrorTipe.setText(""); PasswordErrorTipe.setVisible(false); isPassword=true; //密码合法 }else{ PasswordErrorTipe.setText("密码长度不能小于6"); PasswordErrorTipe.setVisible(true); isPassword=false; //密码不合法 } } }else if(e.getSource() == TextConfimPassword){ String password=TextPassword.getText().trim(); String ConfimPassword=TextConfimPassword.getText().trim(); if(ConfimPassword ==null || ConfimPassword.equals("")){ ConfimPasswordErrorTipe.setText("确认密码不能为空"); ConfimPasswordErrorTipe.setVisible(true); isConfimPassword=false; //确认密码不合法 }else{ if(password.equals(ConfimPassword)){ ConfimPasswordErrorTipe.setText(""); ConfimPasswordErrorTipe.setVisible(false); isConfimPassword=true; //确认密码合法 }else{ ConfimPasswordErrorTipe.setText("两次密码不一致"); ConfimPasswordErrorTipe.setVisible(true); isConfimPassword=false; //确认密码不合法 } } }else if(e.getSource() == TextIDCard){ String idCard=TextIDCard.getText().trim(); if(idCard.length()==18){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService=applicationContext.getBean(UserService.class); boolean isSameIdCard= userService.isSameIdCard(idCard); if(!isSameIdCard){ IDCardErrorTipe.setVisible(false); isIDCard=true; //身份合法 }else{ IDCardErrorTipe.setText("身份证已存在"); IDCardErrorTipe.setVisible(true); isIDCard=false;//身份合法 } }else{ IDCardErrorTipe.setVisible(true); isIDCard=false;//身份合法 } } } }
3)登录提示窗体
package com.chenjiawei.frame; import java.awt.Frame; import javax.swing.Box; import javax.swing.JFrame; import javax.swing.JLabel; import org.apache.tools.ant.taskdefs.Sleep; import aj.org.objectweb.asm.Handle; /** * 登录提示窗体 * @author SS * */ public class LoginTipeFrame extends JFrame implements Runnable{ private JLabel tipe; private String msg="登录"; private Thread thread; public LoginTipeFrame(){ init(); setVisible(true);//设置窗体可视化 setTitle("登录状态提示框"); //设置标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体的关闭操作 setBounds(680, 360, 200, 200); thread=new Thread(this); thread.start(); } /** * 初始化控件 */ private void init(){ Box box=Box.createVerticalBox(); Box box1=Box.createHorizontalBox(); tipe=new JLabel(msg); box1.add(tipe); box.add(Box.createVerticalStrut(60)); box.add(box1); this.add(box); } @Override public void run() { int n=1; while(n<=3){ for(int i=1;i<=5;i++){ try { thread.sleep(200); msg+="."; tipe.setText(msg); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } msg="登录"; n++; } } }
(2)在com.chenjiawei.mapper包下的类文件
1)数据库操作接口类UserMapper:
package com.chenjiawei.mapper; import com.chenjiawei.po.User; public interface UserMapper { public User findUserByUsernameAndPassword(User user); public User findUserByUsername(String username); public int insertUser(User user); public User findUserByIdCard(String idCard); }
2)数据库映射文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.chenjiawei.mapper.UserMapper"> <!--登录查询 --> <select id="findUserByUsernameAndPassword" parameterType="user" resultType="user"> select * from tb_user where username=#{username} and password=#{password} </select> <!-- 用户名是否已存在 --> <select id="findUserByUsername" parameterType="String" resultType="user"> select * from tb_user where username=#{username} </select> <!--添加用户信息 --> <insert id="insertUser" parameterType="user"> insert into tb_user(username,password,sex,idCardType,idCard) values(#{username},#{password},#{sex},#{idCardType},#{idCard}) </insert> <!--查询身份证信息是否已存在 --> <select id="findUserByIdCard" parameterType="String" resultType="user"> select * from tb_user where idCard=#{idCard} </select> </mapper>
(3)在com.chenjiawei.po包下的类文件
1)用户实体类
package com.chenjiawei.po; /** * 用户实体类 * @author SS * */ public class User { private String username; private String password; private String sex; private String idCardType; private String idCard; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getIdCardType() { return idCardType; } public void setIdCardType(String idCardType) { this.idCardType = idCardType; } public String getIdCard() { return idCard; } Spring Boot:Spring Boot整合Mybatis案例Java之SSM框架整合-案例IDEA版(一篇文章精通系列)Spring+SpringMVC+MyBatis(整合源代码)
Java之SSM框架整合-案例IDEA版(一篇文章精通系列)Spring+SpringMVC+MyBatis(整合源代码)