MyBatis 框架 基础应用
1.ORM的概念和优势
概念: 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。
Mybatis介绍
1.Mybatis是一个支持普通SQL查询、存储过程和高级映射的有限持久层框架。它消除了绝大部分的jdbc代码,简化了手工设置sql参数,对结果级的检索进行了封装。
2.Mybatis 可以使用简单的XML或注解方式来配置映射,将pojo(普通凡人Java对象、实体类对象)映射成数据库中的记录
3.给sql映射文件一个命名空间。程序需要根据命名空间去找到一个具体的映射文件
优势:ORM是持久化的一种解决方案,它提供以下的四个主要功能
(1)基本增删改查的API。 session.save(user)等效于执行一条insert语句
(2)对象或属性查询的API。 session.creatQuery("from User").list()可以查询出表中所有的User对象
(3)规范映射元数据。 ORM解决方案需要规范映射的方式,通常会选择XML存储映射元数据,因为XML便于读取和规范格式
(4)事务控制、延迟加载等优化功能
说明:对象持久化是一个基本概念,ORM是这个概念的一种解决方案,而Mybatis是ORM的一个实现,是一个完整的ORM工具,提供了上述所有的ORM功能。
2.Mybatis 配置文件
1>properties属性
目的:为了方便查阅和维护数据库信息,可以把数据库信息单独卸载一个文件夹中,以后需要使用时再直接引用即可
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource">
<!--数据库驱动 -->
<property name="driverClassName" value="${jdbc.driver}" />
<!--连接数据库的url -->
<property name="url" value="${jdbc.url}" />
<!--连接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!--连接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</bean>
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.10.104:1433;databaseName=sa
jdbc.username=sa
jdbc.password=123
2>settings 全局参数配置
<configuration> 标签下有一个<settings> 子表签,可以用来设置Mybatis框架的运行参数,比如设置二级缓存、延迟加载等。修改配置会影响到Mybatis 整体的行为,因此需要谨慎操作
3>为实体类定义别名
1.单个定义别名
<typeAlias type="com.zy.pojo.Customer" alias="customer"/> //不区分大小写
2.批量定义别名
<!-- 给类起别名,在Mapper文件中可以使用别名 -->
<typeAliases>
<package name="com.zy.pojo"/>
</typeAliases>
4>类型处理器
类处理器类型用于Java类型和jdbc类型之间的映射。Mybatis 内置了一些常用的类型处理器,可以将parameterType中传入的参数自动转化为JDBC需要的数据类型
比如说自动给String 类型的参数加上引号
1.内置处理器表
2.自定义类型处理器
为了实现类型转换,定义以下约定,比如
实体类中的性别属性 ture---->男 false----->女
表中的性别属性 1表示男 2表示女
3.使用Mybatis开发的自定义类型处理器,需要实现TypeHandler 接口或继承BaseTypeHandler抽象类,BaseTypeHandler底层实现了TypeHandler接口,并对接口中的方法
做了简单的处 理以方便用户使用,所以用户直接可以继承BaseTypeHandler抽象类
5>动态SQL
Mybatis 提供了<if>、<where>、<foreach>等标签来实现SQL的动态拼接
1.<if>
select * from User where 1=1
<if 条件>
and name like '%${name}%'
<if/>
2.<where> 可使用where标签替代SQL中的where关键字,并且根据实际情况处理<if>开头的and关键字
select * from User
<where>
<if 条件>
and name like '%${name}%'
<if/>
<where/>
3.<foreach>
当输入参数是简单类型或者一般对象类型(除集合和数组外),可以直接指定,但是如果输入参数是集合或者数组类型,就需要使用<foreach>标签来完成参数的处理。
适用途径:数据的批量操作
<select id="queryUser" parameterType="java.util.List" resultType="student">
//1. int[]
//2. Object[]
select * from user <where> <if test="list!=null and list.size()>0">
//1. test="array!=null and array.length>0"
//2.test="array!=null and array.length>0"
<foreach collection="list" open="userid in("close=") item="user" separator>
//1. array
//2. array
#{userid} </foreach> </if> </where> </select>
假设list 集合中有 01,02,03 则完整的sql语句:select * from user where userid in ('01','02','03')
4.sql片段提取
目的:增加代码的复用性
根据id导入
<include refid="sql的id">
MyBatis 框架 基础应用的更多相关文章
- MyBatis框架基础详细开发流程
MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...
- Mybatis框架基础入门(三)--Mapper动态代理方式开发
使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...
- Mybatis框架基础支持层——日志模块(8)
前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...
- Mybatis框架基础支持层——反射工具箱之Reflector&ReflectorFactory(3)
说明:Reflector是Mybatis反射工具的基础,每个Reflector对应一个类,在Reflector中封装有该类的元信息, 以及基于类信息的一系列反射应用封装API public class ...
- Mybatis框架基础入门(一)--简介及优势
一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC ...
- Mybatis框架 基础
思维导图 @有对应的例子 @1接入数据库 配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...
- Mybatis框架基础支持层——反射工具箱之MetaClass(7)
简介:MetaClass是Mybatis对类级别的元信息的封装和处理,通过与属性工具类的结合, 实现了对复杂表达式的解析,实现了获取指定描述信息的功能 public class MetaClass { ...
- Mybatis框架基础支持层——反射工具箱之实体属性Property工具集(6)
本篇主要介绍mybatis反射工具中用到的三个属性工具类:PropertyTokenizer.PropertyNamer.PropertyCopier. PropertyTokenizer: 主要用来 ...
- Mybatis框架基础支持层——反射工具箱之对象工厂ObjectFactory&DefaultObjectFactory(5)
ObjectFactory官方简介:MyBatis每次创建结果集对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成. 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认 ...
随机推荐
- LVS的工作原理认识
一.LVS 简介及工作模式 1. LVS:Linux Virtaul Server,该软件的功能是实现LB(load balance) 2. 三种工作模式的使用范围 1)NAT模式(NAT) LVS ...
- 汇编入门三-CPU工作原理
本文为读书笔记,个人总结与摘抄自<汇编语言 第二版> 1.CPU从内存中读取数据,首先要获得存储单元的地址. 2.指明进行的操作,如存储或者读写 所以,CPU要进行操作总结为: 1.存储单 ...
- FPM
https://github.com/pangudashu/php7-internal/blob/master/1/fpm.md
- Java多线程学习(吐血超详细总结)
Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...
- Python开发【第五篇】: 内置模块
内容概要 二分查找.冒泡 random time os sys pickle json shelve re 1.二分查找和冒泡排序 01. 二分查找 二分查找也称折半查找(Binary Search) ...
- 浅谈C#泛型
一.为什么要提出泛型的概念 我们在声明对象或者方法中,对象中成员变量的定义或者函数参数都传递都要指定具体的对象类型,但是有的时候参数的类型是变化的,但是实现的功能却又差不多,这个时候我们就想,是否存在 ...
- header 无法实现跳转
错误:Warning: Cannot modify header information - headers already sent by (output started at 方法:“php.in ...
- Python编程菜鸟成长记--A1--04--Hello World!
1.重点知识 掌握使用 命令行.文件.Jupyter 的方式执行 Python 代码 2.Hello World! 自从 C 语言之父 丹尼斯.M.里奇 在<The C Programming ...
- Python之Pandas库学习(二):数据读写
1. I/O API工具 读取函数 写入函数 read_csv to_csv read_excel to_excel read_hdf to_hdf read_sql to_sql read_json ...
- 开源:C# 代码自动生成工具,支持站点前后台
前言 写这个项目有很长一段时间了,期间也修修改改,写到最后,自己也没咋用(研究方向变化了). 正文 具体项目开源了:https://github.com/supperlitt/WebAutoCodeO ...