Springi和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;
}
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>
<!-- 配置Mapper自动装配-->
<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开发的简单程序,笔者知识有限,
上一篇: 美得无法形容
推荐阅读
-
spring集成mybatis原理(spring和mybatis整合步骤)
-
SpringBoot 整合jdbc和mybatis
-
Spring和Mybatis整合全过程实现(idea实现)适合初学spring和mybatis
-
Spring和Mybatis整合需要导入的依赖
-
前端笔记之微信小程序(三)GET请求案例&文件上传和相册API&配置https
-
8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
-
8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署
-
**Mybatis和Spring整合的时候 sqlSessionFactory出问题了!!求指点**
-
springboot 整合mybatis和druid数据源连接池
-
springboot整合mybatis和分页插件pagehelper