MyBatis学习1 - MyBatis简介、入门简单示例、架构图、配置文件

1. MyBatis简介

极大的简化SQL操作、仅通过配置即可以获取数据库数据 — 持久层框架
作用:将实体Bean类、SQL语句建立映射关系、半自动化的ORM实现

数据持久层框架(ORM - Object Relation Mapping)

  • Bean类名 ← 表名
  • Bean对象 ← 表的行记录
  • Bean的属性 ← 表的列名

MyBatis解决的问题
动态SQL的处理
ORM对象映射的处理

MyBatis优点
SQL语句放在配置文件 - 方便修改
动态SQL的处理
提供默认的ORM实现

2. 简单代码示例

Dao层执行映射文件的SQL语句的方式:

  • SqlSession.select/insert/update/delete(“mapper.namespace + SQL.id”, 参数 )
    > [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBp2e9AX-1587803095442)(en-resource://database/14338:1)]

步骤

  • 导入MyBatis、数据库驱动jar包
  • 编写配置文件:主配置文件以及映射文件
  • 代码使用
    1. SqlSessionFactoryBuilder – 读取配置文件
    2. SqlSessionFactory – 类似连接池
    3. SqlSession – 类似Connection、但不是Connection


  1. jdbc.properties - 数据库连接文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456

  2. MyBatis主配置文件、以及SQL映射文件

mybatis.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="jdbc.properties"></properties>
	
	<!-- MyBatis读取数据库配置文件、进行数据库连接的管理 -->
	<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>
	
	<!-- SQL映射文件 -->
	<mappers>
		<mapper resource="empMapper.xml" />
		<mapper resource="deptMapper.xml" />
	</mappers>

</configuration>


empMapper.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="top.linruchang.dao.EmpMapper">
	
	
	<select id="queryById" parameterType="Integer" resultType="top.linruchang.domain.Emp" >
		select * from Emp where empno = #{id}
	</select>
	
	<select id="queryAll" resultType="top.linruchang.domain.Emp" >
		select * from Emp
	</select>
	
	
	<update id="updateEname" parameterType="top.linruchang.domain.Emp" >
		update emp set ename=#{ename} where empno=#{empno};		
	</update>
	
	<delete id="deleteEmp" parameterType="top.linruchang.domain.Emp">
		delete from emp where empno=#{empno}
	</delete>
	
	<insert id="addEmp" parameterType="top.linruchang.domain.Emp">
		insert into emp(empno, ename, salary) values(#{empno}, #{ename}, #{salary});
	</insert>
	
</mapper>


  3. Emp - Bean类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfvmI7Ji-1587803095453)(en-resource://database/14336:1)]

package top.linruchang.domain;

public class Emp {
	Integer empno;
	String ename;
	Integer salary;
	
	public Emp(Integer empno, String ename, Integer salary) {
		super();
		this.empno = empno;
		this.ename = ename;
		this.salary = salary;
	}
	public Integer getEmpno() {
		return empno;
	}
	public void setEmpno(Integer empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public Integer getSalary() {
		return salary;
	}
	public void setSalary(Integer salary) {
		this.salary = salary;
	}
	
	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", salary=" + salary + "]";
	}
	
}

  4. EmpDao - 数据访问层

package top.linruchang.dao;

import java.io.InputStream;
import java.util.List;

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

import top.linruchang.domain.Emp;

public class EmpDao {
	
	@Test
	public void test() {
		EmpDao empDao = new EmpDao();
		
		Emp emp = empDao.query(1);
		
		System.out.println(emp);
		
//		---------------------------------
		
//		List<Emp> emps = empDao.queryAll();
//		
//		System.out.println(emps);
		
//		------------------------------------
		
//		Emp emp = new Emp(1, "lrc5", 3000);
//		
//		Integer result = empDao.updateName(emp);
//		
//		System.out.println(result);
		
//		-------------------------------
		
//		Emp emp = new Emp(2, "", 0);
//		
//		Integer result = empDao.delete(emp);
//		
//		System.out.println(result);
		
//		---------------------------------
		
//		Emp emp = new Emp(3, "lcj", 3000);
//		
//		Integer result = empDao.add(emp);
//		
//		System.out.println(result);
		
	}
	
	
	private static  SqlSessionFactory ssf;
	
	static {
		InputStream is = EmpDao.class.getClassLoader().getResourceAsStream("mybatis.xml");
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		ssf = ssfb.build(is);
	}
	
	
	public Emp query(Integer empno) {
		
		
		SqlSession ss = ssf.openSession();
		
		Object emp = ss.selectOne("top.linruchang.dao.EmpMapper.queryById", 1);
		
		return (Emp) emp;
	}
	
	
	public List<Emp> queryAll() {
		
		SqlSession ss = ssf.openSession();
		
		List<Emp> selectList = ss.selectList("top.linruchang.dao.EmpMapper.queryAll");
		
		return selectList;
	}
	
	
	public Integer updateName(Emp emp) {
		
		SqlSession ss = ssf.openSession(true);
		
		Integer result = ss.update("top.linruchang.dao.EmpMapper.updateEname", emp);
		
		return result;
	}
	
	
	public Integer delete(Emp emp) {
		
		SqlSession ss = ssf.openSession(true);
		
		Integer result = ss.delete("top.linruchang.dao.EmpMapper.deleteEmp", emp);
		
		return result;
	}
	
	
	public Integer add(Emp emp) {
		
		SqlSession ss = ssf.openSession(true);
		
		Integer result = ss.insert("top.linruchang.dao.EmpMapper.addEmp", emp);
		
		return result;
	}
	
}

3. MyBatis架构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvA4Wbu5-1587803095460)(en-resource://database/14356:1)]

MyBatis三层图

API接口层 - 开发人员使用接口,无需关注内部处理
数据处理层:SQL查找、解析、执行、执行结果映射的工作
基础支撑层:负责连接、事务、配置加载、缓存管理


MyBatis执行流程

1. 加载映射文件信息成为 - MappedStatement对象
2. 传入(命名空间+SQL的ID找到对应的MappedStatement对象)、以及SQL所需填充的参数
3. 填充SQL语句、获取数据路连接、执行SQL
4. 将得到的结果集映射成对应的Bean对象
5. 释放数据库连接

恰恰MyBatis帮我们完成了最烦人的3、4、5步骤,所以这个框架很强大

4. MyBatis的配置文件

4.1 主配置文件

重点:内的子节点有顺序要求

子节点
:设置默认使用数据库环境
:读取properties文件,${}进行获取键值
:修改MyBatis运行行为
:为类的全限定名取别名
:映射文件
:插件、常用的是分页插件pageHelper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7w7txw3y-1587803095466)(en-resource://database/14358:1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXI5FGhi-1587803095471)(en-resource://database/14360:1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wURsT7sB-1587803095474)(en-resource://database/14362:1)]

4.2 映射文件
子节点
:缓存相关的配置
:将共同的SQL语句抽取出来,达到重用的效果
:如果Bean的属性名跟表的列名不对应时,可该过这个进行自定义的映射
:跟上面的差不多,两者最后别同时写在
  • 上,默认属性名跟列名是一致的
  • 、、:查询、插入、更新SQL语句
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rNSZj5p-1587803095477)(en-resource://database/14374:1)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPHEBRMf-1587803095481)(en-resource://database/14372:1)]

    4.3 #{} 与 ${}的区别
    特点
    共同点:都有类似get('xx')的功能 - 获取键值
    不同点
    #{}:类似PrepareStatement的占位符问号?
    ${}:类似Statement,需要完完整整的拼接字符串


    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6oichGFj-1587803095484)(en-resource://database/14376:1)]

    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    一般来说,系统架构图可以采用UML(统一建模语言)来绘制,其中常用的是组件图和部署图。下面我就针对你的系统架构进行简单的说明: 1. 组件图 组件图主要用于表示系统中各个组件之间的关系和交互,包括前端组件、后端组件、数据库等。下面是一个简单的组件图示例: ``` +------------+ +----------------+ | Vue | | Spring Boot | | Element | | REST | | HTML |<--->| Controllers | | CSS | | MyBatis | | Node.js | | Data Access | +------------+ +----------------+ | | +------------------+ | +-----------+ | MySQL | +-----------+ ``` 在这个示例中,Vue使用了Element UI库来构建前端界面,同时使用了HTML和CSS来定义页面内容和样式。后端采用Spring Boot框架,通过RESTful API提供服务,包括Controllers和Data Access层,使用MyBatis来进行对MySQL数据库的访问。 2. 部署图 部署图主要用于表示系统的物理部署结构和组件之间的部署关系。下面是一个简单的部署图示例: ``` +-----------------+ +------------------------+ | Nginx | | Spring Boot | +--------+--------+ +-----------+------------+ | | | +------------+ | | | MySQL | | | +-----+------+ | | | | | | | +----------+ +---+-------+ +------+--------------------+------+ | Browser | | Node.js | | MyBatis | +----------+ +-----------+ +--------------------------------+ ``` 在这个示例中,前端代码部署在Nginx服务器上,可以通过浏览器访问。后端采用Spring Boot框架,部署在Tomcat服务器上,通过RESTful API提供服务。MySQL数据库单独部署在一台服务器上,MyBatis用于与数据库交互。Node.js服务器用于前端构建、打包和部署。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值