MyBatis 项目学习

MyBatis 项目学习

一、项目目录结构

首先对整个项目目录做个大致了解。
①dao(Data Access Object)是数据访问对象,扮演MVC架构中的Model的角色,主要来封装访问数据的一些方法。
②domain,有人也叫做entity或者pojo,这个包下面封装了一些数据实体。
③mapping,这个包下面定义了数据库有关的映射文件(XML)。
④conf.xml,这个MyBatis的核心配置文件。定义了连接池(包括连接数据库必要的一些参数),映射文件路径。
⑤db.properties,这个里面就是把连接数据库的配置参数统一放在这里,要让这个文件配置生效,就要把这个文件导入到之前的conf.xml中。注意在项目移植的过程中,需要在这个文件下面更改一下配置参数。

二、设计流程

(1)首先,需要创建一个数据库mybatis并在这个数据库下面创建st_Student数据表。SQL语句如下:
-- 创建数据库,指定数据库默认编码
CREATE DATABASE `mybatis` DEFAULT CHARSET = utf8;

USE `mybatis`;

-- 创建学生表
CREATE TABLE st_Student (
	StuID VARCHAR (12) PRIMARY KEY NOT NULL,
	StuName VARCHAR (8) NOT NULL,
	Sex VARCHAR (2) NOT NULL,
	BirthDate datetime NOT NULL,
	Native VARCHAR (40) NOT NULL,
	EntranceTime datetime NOT NULL,
	PoliticalFace VARCHAR (12) NOT NULL,
	Address VARCHAR (50) NOT NULL,
	PerPhone VARCHAR (11) NOT NULL,
	HPhone VARCHAR (11) NOT NULL,
	IDNum VARCHAR (18) NOT NULL,
	Photo VARCHAR (200) NOT NULL,
	ClassID VARCHAR (9) NOT NULL,
	DormitoryId VARCHAR (4) NOT NULL,
	National VARCHAR (2) NOT NULL,
	EmploymentStatus VARCHAR (10) NOT NULL
) DEFAULT CHARSET = utf8;

-- 插入数据
INSERT INTO `mybatis`.`st_student` (
	`StuID`,
	`StuName`,
	`Sex`,
	`BirthDate`,
	`Native`,
	`EntranceTime`,
	`PoliticalFace`,
	`Address`,
	`PerPhone`,
	`HPhone`,
	`IDNum`,
	`Photo`,
	`ClassID`,
	`DormitoryId`,
	`National`,
	`EmploymentStatus`
)
VALUES
	(
		'201412345678',
		'某某',
		'男',
		'1996-01-23',
		'中国湖南',
		'2014-09-01',
		'共青团员',
		'中国湖南',
		'12345678901',
		'01212345678',
		'43012219960901XXXX',
		'这是照片',
		'0001',
		'111',
		'汉',
		'无'
	);



(2) db.properties文件

(3)conf.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 resource="db.properties"></properties>
	<typeAliases>
		<typeAlias alias="Student" type="top.xiongxingwang.domain.Student" />
	</typeAliases>
	
	<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="top/xiongxingwang/mapping/studentMapper.xml" />
	</mappers>
</configuration>
(4)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">

<!-- top.xiongxingwang.mapping.studentMapper -->
<mapper namespace="top.xiongxingwang.dao.IStudentOperation">

	<select id="getStuById" parameterType="String" resultType="Student">
		select * from `st_student` where StuID=#{stuID};
	</select>
	<select id="getAllStu"  resultType="Student">
		SELECT * FROM `st_student`;
	</select>
	<update id="updateById" parameterType="Student">
		update `st_student`
		<set>
			<if test="stuName != null and stuName != '' "> st_student.StuName=#{stuName}, </if>
			<if test="sex != null and sex != '' "> st_student.Sex=#{sex}, </if>
			<if test="birthDate != null and birthDate != '' "> st_student.BirthDate=#{birthDate}, </if>
			<if test="Native != null and Native != '' "> st_student.Native=#{Native}, </if>
			<if test="entranceTime != null and entranceTime != '' "> st_student.EntranceTime=#{entranceTime}, </if>
			<if test="politicalFace != null and politicalFace != '' "> st_student.PoliticalFace=#{politicalFace}, </if>
			<if test="address != null and address != '' "> st_student.Address=#{address}, </if>
			<if test="perPhone != null and perPhone != '' "> st_student.PerPhone=#{perPhone}, </if>
			<if test="hPhone != null and hPhone != '' "> st_student.HPhone=#{hPhone}, </if>
			<if test="IDNum != null and IDNum != '' "> st_student.IDNum=#{IDNum}, </if>
			<if test="photo != null and photo != '' "> st_student.Photo=#{photo}, </if>
			<if test="classID != null and classID != '' "> st_student.ClassID=#{classID}, </if>
			<if test="dormitoryId != null and dormitoryId != '' "> st_student.DormitoryId=#{dormitoryId}, </if>
			<if test="national != null and national != '' "> st_student.National=#{national}, </if>
			<if test="employmentStatus != null and employmentStatus != '' "> st_student.EmploymentStatus=#{employmentStatus} </if>
		</set>
		where st_student.StuID=#{stuID};
	</update>

	<insert id="insertOne" parameterType="Student">
		INSERT INTO `st_student` (
		`StuID`,
		`StuName`,
		`Sex`,
		`BirthDate`,
		`Native`,
		`EntranceTime`,
		`PoliticalFace`,
		`Address`,
		`PerPhone`,
		`HPhone`,
		`IDNum`,
		`Photo`,
		`ClassID`,
		`DormitoryId`,
		`National`,
		`EmploymentStatus`
		)
		VALUES
		(
		#{stuID},
		#{stuName},
		#{sex},
		#{birthDate},
		#{Native},
		#{entranceTime},
		#{politicalFace},
		#{address},
		#{perPhone},
		#{hPhone},
		#{IDNum},
		#{photo},
		#{classID},
		#{dormitoryId},
		#{national},
		#{employmentStatus}
		);
	</insert>

	<delete id="deleteById" parameterType="String">
		DELETE FROM `st_student` WHERE StuID = #{stuID};
	</delete>
</mapper>

(5)IStudentOperation.java
package top.xiongxingwang.dao;

import java.util.ArrayList;

import top.xiongxingwang.domain.Student;

public interface IStudentOperation {
	/**
	 * 通过ID获取Student
	 * 
	 * @param id
	 * @return
	 */
	public Student getStuById(String id);

	/**
	 * 获取所有的Student
	 * 
	 * @return
	 */
	public ArrayList<Student> getAllStu();

	/**
	 * 根据ID更新学生信息
	 * 
	 * @param student
	 */
	public void updateById(Student student);

	/**
	 * 插入一条学生记录
	 * 
	 * @param student
	 */
	public void insertOne(Student student);

	/**
	 * 批量导入学生记录
	 * 
	 * @param student
	 */
	public void insertList(ArrayList<Student> student);

	/**
	 * 根据ID删除学生记录
	 * 
	 * @param id
	 */
	public void deleteById(String stuId);

}

(6)Student.java
package top.xiongxingwang.domain;

import java.util.Date;

public class Student {

	private String stuID;
	private String stuName;
	private String sex;
	private Date birthDate;
	private String Native;
	private Date entranceTime;
	private String politicalFace;
	private String address;
	private String perPhone;
	private String hPhone;
	private String IDNum;
	private String photo;
	private String classID;
	private String dormitoryId;
	private String national;
	private String employmentStatus;

	public Student() {

	}

	public Student(String stuID, String stuName, String sex, Date birthDate, String native1, Date entranceTime, String politicalFace, String address,
			String perPhone, String hPhone, String iDNum, String photo, String classID, String dormitoryId, String national, String employmentStatus) {
		super();
		this.stuID = stuID;
		this.stuName = stuName;
		this.sex = sex;
		this.birthDate = birthDate;
		Native = native1;
		this.entranceTime = entranceTime;
		this.politicalFace = politicalFace;
		this.address = address;
		this.perPhone = perPhone;
		this.hPhone = hPhone;
		IDNum = iDNum;
		this.photo = photo;
		this.classID = classID;
		this.dormitoryId = dormitoryId;
		this.national = national;
		this.employmentStatus = employmentStatus;
	}

	public String getStuID() {
		return stuID;
	}

	public String getStuName() {
		return stuName;
	}

	public String getSex() {
		return sex;
	}

	public Date getBirthDate() {
		return birthDate;
	}

	public String getNative() {
		return Native;
	}

	public Date getEntranceTime() {
		return entranceTime;
	}

	public String getPoliticalFace() {
		return politicalFace;
	}

	public String getAddress() {
		return address;
	}

	public String getPerPhone() {
		return perPhone;
	}

	public String gethPhone() {
		return hPhone;
	}

	public String getIDNum() {
		return IDNum;
	}

	public String getPhoto() {
		return photo;
	}

	public String getClassID() {
		return classID;
	}

	public String getDormitoryId() {
		return dormitoryId;
	}

	public String getNational() {
		return national;
	}

	public String getEmploymentStatus() {
		return employmentStatus;
	}

	public void setStuID(String stuID) {
		this.stuID = stuID;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}

	public void setNative(String Native) {
		this.Native = Native;
	}

	public void setEntranceTime(Date entranceTime) {
		this.entranceTime = entranceTime;
	}

	public void setPoliticalFace(String politicalFace) {
		this.politicalFace = politicalFace;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public void setPerPhone(String perPhone) {
		this.perPhone = perPhone;
	}

	public void sethPhone(String hPhone) {
		this.hPhone = hPhone;
	}

	public void setIDNum(String iDNum) {
		IDNum = iDNum;
	}

	public void setPhoto(String photo) {
		this.photo = photo;
	}

	public void setClassID(String classID) {
		this.classID = classID;
	}

	public void setDormitoryId(String dormitoryId) {
		this.dormitoryId = dormitoryId;
	}

	public void setNational(String national) {
		this.national = national;
	}

	public void setEmploymentStatus(String employmentStatus) {
		this.employmentStatus = employmentStatus;
	}

	@Override
	public String toString() {
		return "Student [stuID=" + stuID + ", stuName=" + stuName + ", sex=" + sex + ", birthDate=" + birthDate + ", Native=" + Native
				+ ", entranceTime=" + entranceTime + ", politicalFace=" + politicalFace + ", address=" + address + ", perPhone=" + perPhone
				+ ", hPhone=" + hPhone + ", IDNum=" + IDNum + ", photo=" + photo + ", classID=" + classID + ", dormitoryId=" + dormitoryId
				+ ", national=" + national + ", employmentStatus=" + employmentStatus + "]";
	}

}

(7)MyBatisUtil.java
package top.xiongxingwang.main;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	private static String resource = "conf.xml";
	private static SqlSessionFactory sqlSessionFactory = null;
	static {
		InputStream inputStream = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	public static SqlSession getSqlSession() {
		return sqlSessionFactory.openSession(true);
	}

	public static void sessionClose(SqlSession sqlSession) {
		sqlSession.close();
	}
	
	
}
(8)Main.java
新手请注意:对数据表如果有更改的话, 需要调用SQLSession的commit方法。
package top.xiongxingwang.main;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import org.apache.ibatis.session.SqlSession;

import top.xiongxingwang.dao.IStudentOperation;
import top.xiongxingwang.domain.Student;

public class Main {
	static SimpleDateFormat dateFormater;
	static {
		dateFormater = new SimpleDateFormat("yyyy-MM-dd");
	}

	public static void insertOneTest() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		IStudentOperation stuOper = sqlSession.getMapper(IStudentOperation.class);
		Student student = null;
		try {
			student = new Student("123456", "张三", "男", dateFormater.parse("1995-01-05"), "中国广东",
					dateFormater.parse("1995-01-05"), "共青团员", "中国广东深圳", "13812345678", "012-1234567",
					"43012219960123XXXX", "这是照片", "0001", "123", "汉", "无");
			stuOper.insertOne(student);
			sqlSession.commit();
			System.out.println("成功插入一条记录!");
		} catch (ParseException e) {
			e.printStackTrace();
		} finally {
			sqlSession.close();
		}

	}

	public static void printAllStuTest() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		IStudentOperation stuOper = sqlSession.getMapper(IStudentOperation.class);

		ArrayList<Student> stuList = stuOper.getAllStu();
		System.out.println("数据表中所有的记录如下:");
		for (Student stu : stuList) {
			System.out.println(stu);
		}

		sqlSession.close();
	}

	public static void deleteByIdTest() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		IStudentOperation stuOper = sqlSession.getMapper(IStudentOperation.class);

		String stuId = "123456";
		stuOper.deleteById(stuId);
		sqlSession.commit();
		System.out.println("成功删除一行记录!");

		sqlSession.close();
	}

	// 以更新学号为123456的学生信息为例
	public static void updateByIdTest() {
		SqlSession sqlSession = MyBatisUtil.getSqlSession();
		IStudentOperation stuOper = sqlSession.getMapper(IStudentOperation.class);
		// 首先获取123456学生的原来的信息
		Student student = stuOper.getStuById("123456");
		student.setStuName("李四");
		student.setAddress("美国");
		stuOper.updateById(student);
		sqlSession.commit();
		System.out.println("成功更新一行记录!");

		sqlSession.close();
	}

	public static void main(String[] args) {
		// 打印数据表中的所有记录
		printAllStuTest();
		// 打印分隔符
		System.out.println("----------SEPARATOR----------");

		// 插入记录
		insertOneTest();
		// 打印插入一条记录之后的数据表中的所有记录
		printAllStuTest();
		// 打印分隔符
		System.out.println("----------SEPARATOR----------");

		// 更新记录
		updateByIdTest();
		// 打印更新一条记录之后的数据表中的所有记录
		printAllStuTest();
		// 打印分隔符
		System.out.println("----------SEPARATOR----------");

		// 删除记录
		deleteByIdTest();
		// 打印删除一条记录之后的数据表中的所有记录
		printAllStuTest();
		// 打印分隔符
		System.out.println("----------SEPARATOR----------");

	}

}

三、参考链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我没有找到关于mybatis的具体项目案例的引用内容,但你可以参考MyBatis官方文档中提供的示例和案例来学习和理解如何使用MyBatis进行项目开发。MyBatis官方文档提供了丰富的文档和示例,可以帮助你快速上手并了解MyBatis的使用方法和最佳实践。你可以访问MyBatis官方文档的网址:http://www.mybatis.org/mybatis-3/zh/index.html。在官方文档的示例和案例中,你可以学习到如何配置和使用MyBatis的XML映射文件、注解方式进行数据库操作,以及如何实现一对一、一对多等复杂关系的查询。同时,你还可以查阅mybatis-spring官方文档,了解如何将MyBatis与Spring框架进行整合,以便更好地应用于Spring Boot项目中。你可以访问mybatis-spring官方文档的网址:http://mybatis.org/spring/zh/index.html。通过学习官方文档中的示例和案例,你将能够更好地理解和掌握MyBatis的使用方法,从而在实际项目中应用MyBatis技术。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Mybatis的使用及案例](https://blog.csdn.net/qq_48183446/article/details/122346623)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mybatis的使用实例](https://blog.csdn.net/a__int__/article/details/115913681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值