Springi和Mybatis整合小案例
2018-06-18 00:18:54来源:未知 阅读 ()
一案例效果展示:
登录模块:
用户注册模块:
二项目功能介绍:
(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; } public void setIdCard(String idCard) { this.idCard = idCard; } @Override public String toString() { return "User [username=" + username + ", password=" + password + ", sex=" + sex + ", idCardType=" + idCardType + ", idCard=" + idCard + "]"; } }
(4)在com.chenjiawei.service包下的类文件
1)UserService
package com.chenjiawei.service; import com.chenjiawei.po.User; public interface UserService { /** * 登录系统的操作方法 * 传入username 用户名 * password 密码 * 返回 boolean * true 为登录成功 * false 为登录失败 */ public boolean doLogin(String username,String password); /** * 判断用户是否已存在 * 传入参数 username 用户名 * 返回值 boolean true为用户名已存在,false为用户名不存在 */ public boolean isSameUsername(String username); /** * 判断用户注册是否成功 * 传入参数:user 用户类 * 返回boolean 若为true注册成功,若为false注册失败 */ public boolean doRegiest(User user); /** * 判断身份证是否已存在 * 传入参数:要查询的身份证信息 * 返回boolean true为已存在,false不存在 */ public boolean isSameIdCard(String idCard); }
(5)在com.chenjiawei.service.impl包下的类文件
1)UserServiceImpl
package com.chenjiawei.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.chenjiawei.mapper.UserMapper; import com.chenjiawei.po.User; import com.chenjiawei.service.UserService; @Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper um; /** * 登录系统的操作方法 * 传入username 用户名 * password 密码 * 返回 boolean * true 为登录成功 * false 为登录失败 */ @Override public boolean doLogin(String username, String password) { if(!username.trim().equals("") && username !=null && !password.trim().equals("") && password !=null){ User user=new User(); user.setUsername(username); user.setPassword(password); User user1=um.findUserByUsernameAndPassword(user); if(user1!=null){ System.out.println(user1); return true; }else{ return false; } }else{ return false; } } /** * 判断用户是否已存在 * 传入参数 username 用户名 * 返回值 boolean true为用户名已存在,false为用户名不存在 */ @Override public boolean isSameUsername(String username) { User user=um.findUserByUsername(username); if(user !=null){ return true; }else{ return false; } } /** * 判断用户注册是否成功 * 传入参数:user 用户类 * 返回boolean 若为true注册成功,若为false注册失败 */ @Override public boolean doRegiest(User user) { if(user !=null){ int i=um.insertUser(user); if(i>0){ return true; }else{ return false; } }else{ return false; } } /** * 判断身份证是否已存在 * 传入参数:要查询的身份证信息 * 返回boolean true为已存在,false不存在 */ @Override public boolean isSameIdCard(String idCard) { User user=um.findUserByIdCard(idCard); if(user ==null){ return false; }else{ return true; } } }
(6)在com.chenjiawei.test包下的文件
MyTest该类是启动程序的主类
package com.chenjiawei.test; import com.chenjiawei.frame.LoginFrame; public class MyTest { public static void main(String[] args) { new LoginFrame(); } }
(7)spring的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> <context:property-placeholder location="db.properties"/> <!-- 定于数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- 创建sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="mybatis-config.xml" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chenjiawei.mapper"/> </bean> <context:component-scan base-package="com.chenjiawei.service" /> </beans>
(8)数据库连接池属性配置db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis_test jdbc.username=root jdbc.password=123456
(9)mybatis日志文件
# Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... log4j.logger.com.chenjiawei=DEBUG # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
(10)mybaits的配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--开启别名 --> <typeAliases> <package name="com.chenjiawei.po"/> </typeAliases> </configuration>
以上是笔者开发结合spring和mybatis开发的简单程序,笔者知识有限,
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 天哪!手动编写mybatis雏形竟然这么简单 2020-06-06
- MyBatis整合双数据源 2020-06-04
- MyBatis缓存特性详解 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash