一篇文章讲明白MyBatis魔法堂:即学即用篇

简介: 一篇文章讲明白MyBatis魔法堂:即学即用篇

一、前言                      

本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,遵循Make it work,better and excellent原则。 技术栈为MyBatis3.2.7+log4j1.2.17+sqlite3+jdk1.7。

二、示例                         

示例代码功能:

学校人员管理系统,对象分别为学生、教师和班级,学生与班级为多对一关系,班级与教师为一对多关系。示例代码主要为操作学生对象。

1. 表结构

学生表(TStudentML)

字段

数据类型

备注

ID

Integer

主键

Name

Text

姓名

ClassID

Integer

班级ID

班级表(TClassML)

字段

数据类型

备注

ID

Integer

主键

Name

Text

姓名

教师表(TTeacherML)

字段

数据类型

备注

ID

Integer

主键

Name

Text

姓名

ClassID

Integer

班级ID

2. 项目目录结构

src

|-- com

| |-- entity

| | |-- ETeacher

| | |-- EStudent

| | |-- EClass

| |-- dao

| |-- studentMapper.xml

| |-- StudentMapper.java

| |-- DBase.java

| |-- DStudent.java

|-- mybatis-config.xml

|-- db.db

|-- log4j.properties

|-- config.properties

3. 数据库配置文件(config.properties)

driver=org.sqlite.JDBC

url=jdbc:sqlite:src/db.db

4. log4j.properties

log4j.rootLogger=TRACE, studout

log4j.appender.studout=org.apache.log4j.ConsoleAppender

log4j.appender.studout.layout=org.apache.log4j.PatternLayout

log4j.appender.studout.layout.ConversionPattern=【%5p】%t -%m%n

5. mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

""

    

      

6. 实体类                            

// 教师实体类

public class ETeacher{

private int id;

private String name;

// 省略各种setter和getter.......

}

// 班级实体类

public class EClass{

private int id;

private String name;

// 省略各种setter和getter.......

}

// 学生实体类

public class EStudent{

private int id;

private String name;

private EClass myClass;

private List teachers;

// 省略各种setter和getter.......

}

7. 映射接口

public interface StudentMapper{

/

通过姓名获取学生信息(不含教师、班级信息)

@param name 学生姓名

@return

/

EStudent getJustStudentInfo(String name);

/

通过姓名模糊查询学生信息(不含教师、班级信息)

@param name 学生姓名

@return

/

List getJustStudentInfos(String name);

/

通过姓名和班级名称获取学生信息(含教师、班级信息)

@param studentName 学生姓名

@param className 班级名称

@return

* /

EStudent getStudentInfo(String studentName, String className);

/

新增学生信息

@param student

@return

/

void addStudent(EStudent student);

/

删除学生信息

@param id

@return

/

void delStudent(int id);

}

8. 映射文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

""

select ID,Name from TStudentML where Name = #{0}

select * from TStudentML

[span style="color: rgba(0, 0, 255, 1)">if test="#{0} != null"

where name like '%'+#{0}+'%'

select

a.ID a_id, a.Name a_name,

b.ID b_id, b.Name b_name,

c.ID c_id, c.Name c_name, c.ClassID c_classId

from

      TStudentML a left outer join TClassML b on(a.ClassID=b.ID)

left outer join TTeacherML c on(b.ID=c.ClassID)

  a.Name like '%'+#{0}+'%'

  and b.Name like '%'+#{1}+'%'

/if

insert into TStudentML(Name, ClassID) values(#{name}, #{myClass.id})

delete from TStudentML where ID = #{0}

9. 数据库操作基类

public class DBase{

private static SqlSessionFactory factory = null;

public DBase(){

if (factory != null) return;

InputStream is = this.getClass().getClassLoader().getResourceAsStream("mybatis-config.xml");

factory = new SqlSessionFactoryBuilder().build(is);

}

/

获取SqlSession实例,使用后需调用实例的close()函数释放资源

@return

/

protected SqlSession openSession(){

return factory.openSession();

}

}

10. 数据库操作类

public class DStudent extends DBase{

/**

通过姓名获取学生信息(不含教师、班级信息)

@param name 学生姓名

@return

/

public EStudent getJustStudentInfo(String name)//代码效果参考:http://www.zidongmutanji.com/zsjx/465687.html

{

EStudent ret = null;

SqlSession session = openSession();

try{

StudentMapper sm = session.getMapper(StudentMapper.class);

ret = sm.getJustStudentInfo(name);

}

finally{

session.close();

}

return ret;

}

/**

通过姓名模糊查询学生信息(不含教师、班级信息)

@param name 学生姓名

@return

/

public List getJustStudentInfos(String name){

List ret = null;

SqlSession session = openSession();

try{

StudentMapper sm = session.getMapper(StudentMapper.class);

ret = sm.getJustStudentInfos(name);

}

finally{

session.close();

}

return ret;

}

/**

通过姓名和班级名称获取学生信息(含教师、班级信息)

@param name 学生姓名

@param className 班级名称

@return

//代码效果参考:http://www.zidongmutanji.com/bxxx/386100.html

/

public EStudent getStudentInfo(String name, String className){

EStudent ret = <span style="c

相关文章
|
2月前
|
Java Spring 容器
Spring系列文章:Spring6集成MyBatis3.5
Spring系列文章:Spring6集成MyBatis3.5
|
2月前
|
SQL 测试技术 数据库
一篇文章带你学会MybatisPlus~(三)
一篇文章带你学会MybatisPlus~
|
2月前
|
SQL 缓存 Java
Mybatis学习文章
Mybatis学习文章
|
2月前
|
SQL Java 数据库连接
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
|
2月前
|
存储 算法 Java
一篇文章带你学会MybatisPlus~(二)
一篇文章带你学会MybatisPlus~
|
2月前
|
SQL Java 数据库连接
一篇文章带你学会MybatisPlus~(一)
一篇文章带你学会MybatisPlus~
|
8月前
|
SQL Java 数据库连接
一般文章让你了解mybatis,以及如今在Java开发的地位!
一般文章让你了解mybatis,以及如今在Java开发的地位!
|
9月前
|
SQL 关系型数据库 MySQL
Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)
Mybatis-Plus(Service CRUD 接口)(+24篇MyBatis-Plus文章)
47 0
|
9月前
|
SQL 关系型数据库 MySQL
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
67 0
|
SQL 存储 缓存
Java文章没python文章火?,我反手整理一套MyBatis面试题(建议收藏)(二)
Java文章没python文章火?,我反手整理一套MyBatis面试题(建议收藏)
84 0
Java文章没python文章火?,我反手整理一套MyBatis面试题(建议收藏)(二)