实现单表增删改查的mybatis项目

本项目是一个入门的纯mybatis项目,仅仅完成了对单表的增删改查,适合刚入门的菜鸟做训练,大牛跳过,菜鸟看不懂请留言,欢迎指点。
准备工具:
jdk 1.7
tomcant 7
myclipse 10.7

一、创建一个Web项目,项目名称自己定义,我的项目名称是:MybatisWholeProject
在这里插入图片描述
二、项目骨架
在这里插入图片描述
三、开发步骤
3.1导入jar包,将开发项目所需要的jar包复制到项目根目录下的lib文件夹下
junit-4.7.jar 用于单元测试
log4j-1.2.15.jar 打印日子
mybatis-3.3.0.jar 用于mybatis
mysql-connector-java-5.1.25-bin.jar 与mysql数据连接
在这里插入图片描述
3.2创建两个属性文件,分别为jdbc.properties和log4j.properties

3.2.1 jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
password=root
#定义初始连接数  
initialSize=0  
#定义最大连接数  
maxActive=20  
#定义最大空闲  
maxIdle=20  
#定义最小空闲  
minIdle=1  
#定义最长等待时间  
maxWait=60000  

3.2.2 log4j.properties

#定义LOG输出级别  
log4j.rootLogger=DEBUG,INFO,Console,File
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender    
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout    
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n      
  
#文件大小到达指定尺寸的时候产生一个新的文件  
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录  
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小  
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志  
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.logger.java.sql.ResultSet=INFO    
log4j.logger.org.apache=INFO    
#log4j.logger.java.sql.Connection=DEBUG    
#log4j.logger.java.sql.Statement=DEBUG    
log4j.logger.java.sql.PreparedStatement=DEBUG

3.3配置核心文件mybatis-config.xml
3.3.1 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>
	<!--引入外部properties文件 -->
	<properties resource="jdbc.properties"></properties>
	
	<!-- 设置配置,在控制台打印sql语句 -->
	<settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 映射文件的位置 -->
	<mappers>
		<mapper resource="com/llf/mappers/StudentMapper.xml" />
	</mappers>
</configuration>

3.4代码开发
3.4.1 类所在的包,这里分为7个包,不要觉得繁琐,耐心,继续往下
com.llf.dao 数据访问层的接口,定义与数据库交互的方法
com.llf.dao.impl 数据访问层的实现,实现与数据库交互的具体操作
com.llf.entity 实体层,类对象对应数据库中的表
com.llf.service 业务层的接口,定义业务逻辑的的方法
com.llf.service.impl 业务层的是想,实现业务逻辑的具体操作
com.llf.mappers 映射器类,类与表的映射以及执行sql语句都放在里面
com.llf.test 测试类,进行单元测试
com.llf.util 辅助类,解析配置文件,获取session

3.4.2.创建实体类Student
截图
在这里插入图片描述
代码

package com.llf.entity;

public class Student {
	private int studentId;
	private String studentName;
	private String studentAge;
	private String studentSex;
	public int getStudentId() {
		return studentId;
	}
	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public String getStudentAge() {
		return studentAge;
	}
	public void setStudentAge(String studentAge) {
		this.studentAge = studentAge;
	}
	public String getStudentSex() {
		return studentSex;
	}
	public void setStudentSex(String studentSex) {
		this.studentSex = studentSex;
	}
	
	@Override
	public String toString() {
		return "hi,大家好!"+"我是"+this.studentName;
	}
}

3.4.3 在mysql数据库创建一个名为mybatis数据库以及创建一个名为t_student表并插入两条数据
sql语句

drop table if exists t_student;
create table t_student(
sid int(20) primary key auto_increment,
sname varchar(20) not null,
sage varchar(5) not null,
ssex varchar(5) not null
);
insert into t_student(sname,sage,ssex)values('张三','20','男');
insert into t_student(sname,sage,ssex)values('李四','20','女');

运行查询之后的结果
在这里插入图片描述
3.3.4创建辅助类
截图
在这里插入图片描述代码

package com.llf.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.llf.entity.Student;

public class MybatisUtil {
	private final static SqlSessionFactory sqlSessionFactory;
	static {
		// mybatis的配置文件位置
		String resource = "mybatis-config.xml";
		InputStream inputStream = null;
		try {
			// 将xml的配置信息注入
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 建一个session的工厂类
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
	}

	public static SqlSession getSession() {
		// 获得一个session
		return sqlSessionFactory.openSession();
	}
}

3.4.5数据访问层
截图
在这里插入图片描述
代码1:StudentDao.java

package com.llf.dao;

import java.util.List;

import com.llf.entity.Student;

public interface StudentDao {
	public abstract void addStudent(Student student);
	void updateStudent(Student student);
	void deleteStudent(int id);
	List<Student> queryStudentList();
	Student queryStudent(int id);
}

代码2:StudentDaoImpl

package com.llf.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.llf.dao.StudentDao;
import com.llf.entity.Student;
import com.llf.util.MybatisUtil;

public class StudentDaoImpl implements StudentDao{
	private SqlSession sqlSession = MybatisUtil.getSession(); 
    //这里几个方法的第一个参数是StudentMapper.xml中的"命名空.id的属性值"
	@Override
	public void addStudent(Student student) {
		sqlSession.insert("sutdentMapper.addStudent", student);
		sqlSession.commit();
	}

	@Override
	public void updateStudent(Student student) {
		sqlSession.update("sutdentMapper.updateStudent", student);
		sqlSession.commit();
		
	}

	@Override
	public void deleteStudent(int id) {
		sqlSession.delete("sutdentMapper.deleteStudent", id);
		sqlSession.commit();
		
	}

	@Override
	public List<Student> queryStudentList() {
		return sqlSession.selectList("sutdentMapper.queryStudentList");
		
	}

	@Override
	public Student queryStudent(int id) {
		return (Student)sqlSession.selectOne("sutdentMapper.queryStudent",id);
		
		
	}

}

3.4.6业务逻辑层
截图
在这里插入图片描述
代码1:StudentService.java

在这里插入package com.llf.service;

import java.util.List;

import com.llf.entity.Student;

public interface StudentService {
	public abstract void addStudent(Student student);
	void updateStudent(Student student);
	void deleteStudent(int id);
	List<Student> queryStudentList();
	Student queryStudent(int id);
}
代码片

代码2:StudentServiceImpl.java

package com.llf.service.impl;

import java.util.List;

import com.llf.dao.StudentDao;
import com.llf.dao.impl.StudentDaoImpl;
import com.llf.entity.Student;
import com.llf.service.StudentService;

public class StudentServiceImpl implements StudentService{
	private StudentDao student = new StudentDaoImpl();

	@Override
	public void addStudent(Student student) {
		this.student.addStudent(student);
	}

	@Override
	public void updateStudent(Student student) {
		this.student.updateStudent(student);
	}

	@Override
	public void deleteStudent(int id) {
		this.student.deleteStudent(id);
	}

	@Override
	public List<Student> queryStudentList() {
		return this.student.queryStudentList();
		
	}

	@Override
	public Student queryStudent(int id) {
		return this.student.queryStudent(id);
	}

}

3.4.7 映射器
截图
在这里插入图片描述
代码:StudentMapper.xml

<?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="sutdentMapper">
	<resultMap type="com.llf.entity.Student" id="studentResultMap">
		<id property="studentId" column="sid" />
		<result property="studentName" column="sname"/>
		<result property="studentAge" column="sage"/>
		<result property="studentSex" column="ssex"/>
	</resultMap>

	<insert id="addStudent" parameterType="com.llf.entity.Student" useGeneratedKeys="true" keyProperty="sid">
		insert into t_student(sname,sage,ssex)values(#{studentName},#{studentAge},#{studentSex}) 
	</insert>	
	
	<update id="updateStudent" parameterType="com.llf.entity.Student">
		update t_student set sname=#{studentName} , sage=#{studentAge}, ssex=#{studentSex} 
		where sid=#{studentId}
	</update>
	
	<delete id="deleteStudent" parameterType="int">
		delete from t_student where sid = #{studentId}
		
	</delete>
	
	<select id="queryStudentList" resultMap="studentResultMap">
		select * from t_student
	</select>

	<select id="queryStudent" parameterType="int" resultMap="studentResultMap">
		select * from t_student where sid =13
	</select>
</mapper>

3.4.8测试类
截图
在这里插入图片描述
代码:

package com.llf.test;

import java.util.List;

import org.junit.Test;

import com.llf.entity.Student;
import com.llf.service.StudentService;
import com.llf.service.impl.StudentServiceImpl;

public class TestStudent {
	private StudentService studentService = new StudentServiceImpl();
	@Test
	public void addStudent(){
		Student student = new Student();
		String studentName = "蒙文峰";
		String studentAge = "30";
		String studentSex = "男";
		student.setStudentName(studentName);
		student.setStudentAge(studentAge);
		student.setStudentSex(studentSex);
		this.studentService.addStudent(student);
	}
	
	@Test
	public void updateStudent(){
		Student student = new Student();
		int studentId = 3;
		String studentName = "何义";
		String studentAge = "30";
		String studentSex = "男";
		student.setStudentId(studentId);
		student.setStudentName(studentName);
		student.setStudentAge(studentAge);
		student.setStudentSex(studentSex);
		this.studentService.updateStudent(student);
	}
	
	@Test
	public void deleteStudent(){
		int studentId = 3;
		this.studentService.deleteStudent(studentId);
	}
	
	@Test
	public void queryStudentList(){
		List<Student> studentList = this.studentService.queryStudentList();
		for(Student s:studentList){
			System.out.println(s);
		}
	}
	
	@Test
	public void queryStudent(){
		System.out.println(this.studentService.queryStudent(3));
	}

}

四、测试结果
切换到测试类,然后一一执行单元测试中的方法
在这里插入图片描述
4.1在数据库插入一条记录
选中如下方法,然后右键–》Run As --> Junit Test
在这里插入图片描述
执行前表中的数据是:
在这里插入图片描述
执行后:
在这里插入图片描述
4.2在表中更改一条记录
选中如下方法,然后右键–》Run As --> Junit Test
在这里插入图片描述
执行前表中的数据是:
在这里插入图片描述
执行后:
在这里插入图片描述

4.3删除表中的一条记录
选中如下方法,然后右键–》Run As --> Junit Test
在这里插入图片描述
执行前:
在这里插入图片描述
执行后:
在这里插入图片描述
4.4查询出表中的所有记录,并打印出姓名
选中如下方法,然后右键–》Run As --> Junit Test
在这里插入图片描述
五、总结
mybatis是一个orm框架,也是一个持久层框架,核心思想就是:通过管理对象来操作数据库。
谢谢观看。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值