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(整合源代码)

Spring 整合 Mybatis 完整案例演示

Spring+SpringMVC+MyBatis+Maven框架整合

Spring整合Mybatis框架小demo