MyBatis 基础入门

MyBatis 是一个半自动化的持久层的框架,能让开发者专注SQL本身

JDBC 连接数据库的硬编码问题,通过config,mapper配置文件解决

Mybatis开发需要关注的文件

l POJO类(DTO、VO、PO等)

l Mapper接口(就是dao接口)

l Mapper映射文件

l 全局配置文件

MyBatis 架构原理

说明

1、 mybatis配置文件

a) SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

b) Mapper.xml,此文件作为mybatis的sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、 SqlSessionFactory

通过mybatis环境等配置信息构造SqlSessionFactory,即会话工厂。

3、 sqlSession

通过会话工厂创建sqlSession即会话,程序员通过sqlsession会话接口对数据库进行增删改查操作。

4、 Executor执行器

mybatis底层自定义了Executor执行器接口来具体操作数据库,Executor接口有两个实现,一个是基本执行器(默认)、一个是缓存执行器,sqlsession底层是通过executor接口操作数据库的。

5、 Mapped Statement

它也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个select\insert\update\delete标签对应一个MappedStatement对象,select\insert\update\delete标签的id即是Mapped statement的id。

a) Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

b) Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

Mybatis 程序运行步骤

// 配置文件

String resource = "SqlMapConfig.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 建造器模式

// 数据库会话实例

sqlSession = sqlSessionFactory.openSession(); //程序员用到的接口

// 查询单个记录,根据用户id查询用户信息

User user = sqlSession.selectOne("test.findUserById", 10);//namespace.id

MyBatis  增删改查

1.根据用户名模糊查询

<select id="findUserByUsername" parameterType="java.lang.String"

resultType="com.kkb.mybatis.po.User">

select * from user where username like ‘%${value}%‘

</select>

测试:List<User> list = sqlSession.selectList("test.findUserByUsername", "小明");

2.插入

<insert id="insertUser" parameterType="com.kkb.mybatis.po.User">

insert into user(username,birthday,sex,address)

values(#{username},#{birthday},#{sex},#{address})

</insert>

sqlSession = sqlSessionFactory.openSession();

// 添加用户信息

User user = new User();

user.setUsername("张小明");

sqlSession.insert("test.insertUser", user);

sqlSession.commit();

3.删除

<delete id="deleteUserById" parameterType="int">

delete from user where id=#{id}

</delete>

执行:

sqlSession.delete("test.deleteUserById",18);

sqlSession.commit();

4.修改

<update id="updateUser" parameterType="com.kkb.mybatis.po.User">

update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}

where id=#{id}

</update>

User user = new User();

user.setId(16);

sqlSession.update("test.updateUser", user);

sqlSession.commit();

Mapper接口开发需要遵循以下规范:

1、 Mapper接口的类路径与Mapper.xml文件中的namespace相同。

2、 Mapper接口方法名称和Mapper.xml中定义的每个statement的id相同。

3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。

4、 Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType的类型相同。

OGNL对象导航图语言

|---User(参数值对象)

|--username--张三

|--birthday

|--sex--男

|--dept -- Department

|--name

|--no

OGNL表达式去获取Department对象的name属性:dept.name

#{}和${}区别

l 区别1

#{} :相当于JDBC SQL语句中的占位符? (PreparedStatement)

${}  : 相当于JDBC SQL语句中的连接符合 + (Statement)

l 区别2

#{} : 进行输入映射的时候,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上’’)

${}  :进行输入映射的时候,将参数原样输出到SQL语句中

l 区别3

#{} : 如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,#{}中参数名称可以任意

${}  : 如果进行简单类型(String、Date、8种基本类型的包装类)的输入映射时,${}中参数名称必须是value

 用到的设计模式

代理模式 : mapper接口,实现类是框架通过JDK动态代理生成的 (实际就是原来的DAO,做了封装)

工厂模式:  SqlSessionFactory  工厂模式生成SqlSession对象实例

构造模式 :SqlSessionFactoryBuilder 根据主配置文件生成一个SqlSessionFactory

原文地址:https://www.cnblogs.com/bruce0706/p/11060524.html

时间: 2024-10-12 07:28:19

MyBatis 基础入门的相关文章

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

MyBatis基础入门《七》查询参数传入对象

MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持一致. 实体类:TblClient.java 接口方法 注意: 接口中定义了一个新的方法(根据对象属性进行查询数据),方法的参数传入的是一个对象. xml文件 注意: >>> parameterType="baitang" resultType="baitang

MyBatis基础入门《十五》ResultMap子元素(collection)

MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association )> >>collection >> 复杂类型集合,一对多 >> 内部嵌套 > 映射一个嵌套结果集到一个列表 >> 属性 > property : 映射数据库列的实体对象的属性 > ofType : 完整java类名或别名(集合所包括的

MyBatis基础入门《十七》动态SQL

MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > where > set > choose( when , otherwise ) > foreach 动态SQL为Mybatis重要部分,项目也重新新建了一个:mybatis-dynamic-sql 项目结构: TblClient.java 1 package com.charles.e

MyBatis基础入门

鲁春利的工作笔记,好记性不如烂笔头 官方文档详见:http://www.mybatis.org/mybatis-3/zh/index.html 入门 XML配置 XML映射文件 动态SQL Java API 日志

Mybatis基础入门(四)——与springMVC的集成

前面的增删改查还没有融入到一个web项目中,这里在前面的基础上,集成spring管理相关的bean,并在web层集成springmvc.同样会有源码的下载. 一.目录结构: 二.集成spring: 因为是一个web项目,且使用了spring作为粘合剂,相关的jar包就不多解释了,详见源码.项目上篇文章中的结构,这里把映射文件单独放到一个目录,而且添加了Controller的包,映射文件内容不变.注意到这里讲其他配置文件整合到了config包中.因为使用spring,所以Configuration

mybatis基础系列(一)&mdash;&mdash;mybatis入门

好久不发博客了,写博文的一个好处是能让心静来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.传统的 JDBC代码通常存在如下问题: 1. 频繁对数据库进行连接和关闭,造成资源浪费,性能下降. 2. SQL代码.preparedStatement参数.占位符号等硬编码到代码中,不方便维护. 3. 遍历结果集数据时,硬编码解析表字段成java属性,不方便维护. MyBatis 避免了几乎所有的

Mybatis最入门---ResultMaps高级用法(上)

[一步是咫尺,一步即天涯] 接上文,我们基本的单表查询使用上文中的方式已经能够达到目的.但是,我们日常的业务中也存在着多表关联查询,结果是复杂的数据集合等等.本文我们就来介绍ResultMaps的高级用法,本文,我们先介绍基本的概念,具体用法实例在下一篇中专门演示给大家.敬请期待! ------------------------------------------------------------------------------------------------------------

Mybatis最入门---配置详解(下)

[一步是咫尺,一步即天涯] 上文我们详细解释了HelloWorld工程中的配置项,本文,我们再来介绍一些更加基础,灵活的配置项.本文,我们先不演示具体的工程,后续的文章中会按照实际应用来配置相关的参数.敬请期待! -----------------------------------------------------------------------------------------------------------------------------------------------