MyBatis基础知识
- 格式:docx
- 大小:14.83 KB
- 文档页数:2
mybatis入门到精通以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。
性能也比hibernate 好。
而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。
后来项目结束了,我也没写总结文档。
已经过去好久了。
但最近突然又对这个ORM 工具感兴趣。
因为接下来自己的项目中很有可能采用这个ORM工具。
所以在此重新温习了一下mybatis, 因此就有了这个系列的mybatis 教程.什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs (Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.orm工具的基本思想无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:1. 从配置文件(通常是XML配置文件中)得到sessionfactory.2. 由sessionfactory 产生session3. 在session 中完成对数据的增删改查和事务提交等.4. 在用完之后关闭session 。
\5. 在java 对象和数据库之间有做mapping 的配置文件,也通常是xml 文件。
mybatis实战教程(mybatis in action)之一:开发环境搭建mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。
这些软件工具均可以到各自的官方网站上下载。
首先建立一个名字为MyBaits 的dynamic web project1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。
mybatis第一天mybatis的基础知识课程安排:mybatis和sprin gmvc通过订单商品案例驱动第一天:基础知识(重点,内容量多)对原生态jdb c程序(单独使用jdb c开发)问题总结mybatis框架原理(掌握)mybatis入门程序用户的增、删、改、查mybatis开发dao两种方法:原始dao开发方法(程序需要编写d a o接口和d a o实现类)(掌握)mybaits的mappe r接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件Sq lMapConfig.xmlmybatis核心:mybatis输入映射(掌握)mybatis输出映射(掌握)mybatis的动态sql(掌握)第二天:高级知识订单商品数据模型分析高级结果集映射(一对一、一对多、多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybaits和sprin g进行整合(掌握)mybatis逆向工程1对原生态jdbc程序中问题总结1.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.11.2创建mysql数据导入下边的脚本:sql_table.sql:记录表结构sql_dat a.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本1.3jdbc程序使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:数据库驱动包(m ysql5.1)上边的是mysql驱动。
下边的是ora cle的驱动。
程序代码:1.4问题总结1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到jav a代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
Mybatis 知识点什么是 MybatisMybatis 是一个开源的持久层框架,它提供了一个可以自定义 SQL 映射的方式,以及可以很方便地进行数据库查询和操作的功能。
相比于传统的 ORM 框架,Mybatis 更加灵活,适用于复杂的 SQL 查询和自定义 SQL 语句的情况。
Mybatis 的优点1.灵活性:Mybatis 允许开发者自定义 SQL 映射,可以根据需要编写任意复杂的 SQL 查询语句,更加灵活地操作数据库。
2.性能优化:Mybatis 提供了多种性能优化的手段,比如查询缓存和预编译语句等,可以减少数据库的访问次数,提高系统性能。
3.易于集成:Mybatis 与 Spring 框架完美集成,可以很方便地与 SpringBoot 一起使用,简化开发流程。
Mybatis 的基本使用1. 引入依赖在 Maven 项目的 pom.xml 文件中,添加以下依赖:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>2. 配置数据源在 application.properties 文件中配置数据源信息:spring.datasource.url=jdbc:mysql://localhost:3306/mydbername=rootspring.datasource.password=1234563. 创建实体类和 Mapper 接口创建与数据库表对应的实体类和对应的 Mapper 接口,如下所示:public class User {private Long id;private String name;private Integer age;// 省略 getter 和 setter 方法}public interface UserMapper {List<User> getAllUsers();User getUserById(Long id);void addUser(User user);void updateUser(User user);void deleteUser(Long id);}4. 编写 SQL 映射文件在 resources 目录下创建一个 sqlmap 目录,并在该目录下编写 XML 格式的 SQL 映射文件,如下所示:<!-- UserMapper.xml --><mapper namespace="erMapper"><select id="getAllUsers" resultType="er">SELECT * FROM user;</select><select id="getUserById" resultType="er">SELECT * FROM user WHERE id = #{id};</select><insert id="addUser">INSERT INTO user(name, age) VALUES(#{name}, #{age});</insert><update id="updateUser">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id};</update><delete id="deleteUser">DELETE FROM user WHERE id = #{id};</delete></mapper>5. 配置 Mybatis在 application.properties 文件中配置 Mybatis 相关的配置项,如下所示:mybatis.mapper-locations=classpath*:sqlmap/**/*.xmlmybatis.configuration.map-underscore-to-camel-case=true6. 注入 Mapper在需要使用 Mapper 的地方进行注入,并调用相应的方法即可:@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAllUsers() {return userMapper.getAllUsers();}// 省略其他方法实现}Mybatis 高级特性动态 SQLMybatis 提供了动态 SQL 的支持,可以根据不同的条件生成不同的 SQL 语句,实现更加灵活的查询。
mybatis基本工作原理
MyBatis是一种基于Java语言的持久化框架,可以帮助开发人员更轻松地管理数据库操作。
它的基本工作原理如下:
1. 定义映射文件:MyBatis通过XML或注解来定义数据库表和Java对象之间的映射关系。
2. 加载配置文件:MyBatis需要加载一个配置文件来告诉它如何去连接数据库和使用映射文件。
3. 创建SqlSessionFactory:SqlSessionFactory是MyBatis的核心接口之一,它负责创建SqlSession对象。
4. 创建SqlSession:SqlSession是MyBatis的另一个核心接口,它负责执行SQL语句并返回结果。
5. 执行SQL语句:SqlSession会根据映射文件中的信息,执行对应的SQL语句。
执行后,将结果映射到对应的Java对象中,并返回给调用方。
6. 关闭SqlSession:最后,需要关闭SqlSession以释放资源。
MyBatis的基本工作原理就是这样,它通过映射文件来定义Java 对象和数据库表之间的映射关系,并通过SqlSession接口来执行SQL 语句。
同时,MyBatis还提供了很多方便的特性,如动态SQL、缓存等,可以大大提高开发效率和应用程序的性能。
- 1 -。
Mybatis基础知识汇总Mybatis学习总结:背景介绍:mybatis:前⾝ibatis,于2010年迁移到google code,并改名为Mybatis。
最后在2013年11⽉迁移到gitbub(全球开源⽹站)。
Mybatis 的初步认知:Mybatis 是⼀个半⾃动的ORM持久成框架。
apache下的顶级项⽬。
Mybatis是JDBC的轻量级的封装,使⽤时程序员只需要注⼊sql语句,mybatis通过映射可以灵活⽣成满⾜数据库的sql语句。
解决了jdbc的⼀下⼏个问题:1.jdbc创建和销毁数据库的连接耗资源过⼤解决⽅法:mybatis框架内置连接池。
2.sql语句在javaWeb 项⽬中,修改sql语句需要修改java项⽬中的代码不利于维护。
-解决⽅法:mybatis采⽤配置⽂件注⼊sql语句,使sql语句与java代码分离。
3. 使⽤jdbc查询对象时,够多的参数书写不⽅便。
(每⼀个参数需要书写⼀个?占位符,并且还需要写⼀句对应的java语句)且不利于维护;解决⽅法:Mybatis使⽤⾃动映射java对象⾄sql语句,通过statement的parameterType进⾏传参4.jdbc查询时存在硬编码,当sql语句改变,系统解析是也发⽣变化,造成系统不利于维护。
解决⽅法:Mybatis使⽤⾃动sql语句⾄Java对象,通过statement的resultType进⾏传参Mybatis的使⽤步骤:1. 导⼊所需要的jar包,配置SqlMapConfig.xml,写⼊数据库连接信息,类的别名以及映射关系等信息;2. 加载配置⽂件,获取SqlSessionFactory对象3.获取SqlSession对象:调⽤Mapper.xml的sql语句(insert,update,delete,selectOne,selectLists)4.释放资源案例展⽰:Mybatis的DAO层的两种⽅式:原始DAO层开发⽅式:1.数据库创建数据表本案例使⽤如下数据表:1).创建t_user数据表CREATE TABLE `t_user` (`uid` int(11) NOT NULL AUTO_INCREMENT,`uname` varchar(255) DEFAULT NULL,`usex` varchar(255) DEFAULT NULL,`uage` int(11) DEFAULT NULL,PRIMARY KEY (`uid`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;2). 插⼊5条数据:INSERT INTO t_user VALUES ('1', '张三', '男', '25');INSERT INTO t_user VALUES ('2', '李四', '男', '26');INSERT INTO t_user VALUES ('3', '王五', '男', '27');INSERT INTO t_user VALUES ('4', '赵六', '男', '30');INSERT INTO t_user VALUES ('5', '⼩敏', '男', '25');2.导⼊jar包,并配置SqlMapConfig.xml⽂件:1.1}. 导⼊如下图所⽰jar包和log4j.properties注:jar包说明:- asm-4.2.jar- cglib-3.1.jar-1. 处理字节码的jar包- mybatis-3.3.0.jar- mybatis的核⼼jar包- mysql-connector-java-5.1.12-bin.jar- 2.连接数据库jdbcjar包- jstl-1.2- 3.标签jar包- 4.其余jar为⽇志记录jar包,因为mybatis没有⽇志记录系统需要引⽤⽇记jar包完成打印。
mybatis语法和介绍详细MyBatis(原名为iBATIS)是一种开源的持久化框架,它主要用于将Java对象与SQL语句进行映射,从而实现对象关系映射(ORM)。
MyBatis有一套独立的SQL映射文件,其中定义了对象属性与数据库列之间的映射关系。
这些SQL映射文件通过XML进行定义,使得开发人员可以将SQL语句与Java代码进行解耦。
SQL映射文件可以包含各种插入、更新、删除和查询语句,同时还支持存储过程和函数的调用。
MyBatis的核心组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper。
SqlSessionFactoryBuilder负责创建SqlSessionFactory对象,SqlSessionFactory负责创建SqlSession对象,SqlSession则是与数据库进行交互的核心类,而Mapper则负责定义与数据库交互的接口。
MyBatis的使用非常灵活,可以通过注解或者XML进行配置。
注解是直接在Java代码中使用的标记,通过注解可以直接在Java代码中定义SQL语句,从而省去了编写XML文件的过程。
XML配置方式则需要额外编写SQL映射文件,但是更加灵活和可维护。
下面是一个使用MyBatis的例子,其中使用了XML配置方式:首先,我们需要编写一个User类,用于与数据库中的user表进行映射:```javapublic class Userprivate int id;private String name;private String email;// 省略getter和setter方法```接下来,我们需要编写一个UserMapper接口,用于定义与数据库交互的方法:```javapublic interface UserMapperUser selectUser(int id);void insertUser(User user);void updateUser(User user);void deleteUser(int id);```然后,我们需要创建一个SQL映射文件UserMapper.xml,其中定义了与User类对应的SQL语句:```xmlSELECT * FROM user WHERE id = #{id}</select>INSERT INTO user (name, email) VALUES (#{name}, #{email})</insert>UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}</update><delete id="deleteUser" parameterType="int">DELETE FROM user WHERE id = #{id}</delete></mapper>```最后,我们可以通过SqlSessionFactoryBuilder来创建SqlSessionFactory对象:```javaString resource = "mybatis-config.xml";InputStream inputStream =Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder(.build(inputStream);```接下来,我们可以通过SqlSessionFactory对象创建SqlSession对象:```javaSqlSession session = sqlSessionFactory.openSession(;```然后,我们可以通过SqlSession对象获取Mapper接口的实例:```javaUserMapper userMapper = session.getMapper(UserMapper.class);```最后,我们可以通过Mapper接口的实例来调用与数据库交互的方法:```javaUser user = userMapper.selectUser(1);```以上就是一个简单的使用MyBatis的例子。
mybatis基本工作原理Mybatis是一款Java持久层框架,是著名的SqlMap框架的升级版。
Mybatis的本质是一个ORM框架,是一种半自动化的框架,将数据库中的数据与Java对象建立映射关系,使Java对象与关系型数据库中的表结构进行映射,从而实现数据的持久化存储及后续的CRUD操作。
一、Mybatis工作流程Mybatis的工作流程主要可以分为三个步骤:准备工作、执行工作和结果处理。
1. 准备工作在执行SQL之前,Mybatis需要先加载并解析配置文件,并通过配置文件中的信息构建出SqlSessionFactory对象。
然后,SqlSessionFactory会创建SqlSession对象,并且在此过程中会设置数据库连接,以及配置一些参数信息用于后续的SQL执行。
2. 执行工作执行SQL语句时,SqlSession对象会将SQL语句、参数和对应的映射文件(即配置文件)传递给Executor对象,由Executor对象实际执行SQL语句。
Executor对象根据SQL类型的不同,调用相应的Statement和ResultSet来执行和处理SQL语句。
3. 结果处理当Executor对象执行完SQL语句后,会返回一个包含查询结果的ResultSet对象,SqlSession对象会根据ResultMap对象把ResultSet中的数据映射成Java对象。
最后,将映射好的Java对象返回给应用层。
二、Mybatis配置文件Mybatis的配置文件主要包括两个文件:mybatis-config.xml和映射文件(*.xml)。
1. mybatis-config.xmlmybatis-config.xml是Mybatis的核心配置文件,其中包括数据源等信息。
mybatis-config.xml的配置最核心的是配置数据源,即配置数据库信息。
其中,数据源的配置主要包括连接数据库需要的地址、用户名、密码等信息。
MyBatis详解⼀篇就够啦第1章MyBatis框架配置⽂件详解1.1 typeHandlers类型转换器 每当MyBatis 设置参数到PreparedStatement 或者从ResultSet 结果集中取得值时,就会使⽤TypeHandler 来处理数据库类型与java 类型之间转换。
下表描述了默认TypeHandlers1.1.1 ⾃定义类型转换器假设表中字段是int类型,⽽实体类与之对应的属性是boolean类型,此时可以采⽤⾃定义类型转换器进⾏对应(1)实体类1 package com.chenyanbin.beans;23 public class Dept {4 private Integer deptNo;5 private String dname;6 private String loc;7 private boolean flag;8 public Integer getDeptNo() {9 return deptNo;10 }11 public boolean isFlag() {12 return flag;13 }14 public void setFlag(boolean flag) {15 this.flag = flag;16 }17 public void setDeptNo(Integer deptNo) {18 this.deptNo = deptNo;19 }20 public String getDname() {21 return dname;22 }23 public void setDname(String dname) {24 this.dname = dname;25 }26 public String getLoc() {27 return loc;28 }29 public void setLoc(String loc) {30 this.loc = loc;31 }32 }(2) 表中字段(3) 开发⾃定义类型转换器:MyTypeHandler.java继承并实现接⼝:TypeHandler.java1 package com.chenyanbin.util;23 import java.sql.CallableStatement;4 import java.sql.PreparedStatement;5 import java.sql.ResultSet;6 import java.sql.SQLException;78 import org.apache.ibatis.jdbc.Null;9 import org.apache.ibatis.type.JdbcType;10 import org.apache.ibatis.type.TypeHandler;11 /*12 * setParameter:这个⽅法在⽣成SQL语句时才被调⽤13 *14 * getResult:查询结束之后,在将ResultSet数据⾏转换为实体类对象时,通知TypeHandler将当前数据⾏某个字段转换为何种类型15 *16 *17 */18 public class MyTypeHandler implements TypeHandler {1920 public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {21 if (parameter==null) { //dept.flag=null insertsql flag设置022 ps.setInt(i, 0);23 return;24 }25 Boolean flag=(Boolean)parameter;26 if (flag==true) {27 ps.setInt(i, 1);28 }29 else {30 ps.setInt(i, 0);31 }32 }3334 public Object getResult(ResultSet rs, String columnName) throws SQLException {35 int flag = rs.getInt(columnName); //1 or 036 Boolean myFlag=Boolean.FALSE;37 if (flag==1) {38 myFlag=Boolean.TRUE;39 }40 return myFlag;41 }4243 public Object getResult(ResultSet rs, int columnIndex) throws SQLException {44 // TODO Auto-generated method stub45 return null;46 }4748 public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {49 // TODO Auto-generated method stub50 return null;51 }5253 }(4) 在MyBatis核⼼配置⽂件注册⾃定义类型转换器:myBatis-config.xml1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration3 PUBLIC "-////DTD Config 3.0//EN"4 "/dtd/mybatis-3-config.dtd">5 <configuration>6 <!-- 属性配置 -->7 <properties resource="config.properties"></properties>8 <!-- 别名配置 -->9 <typeAliases>10 <package name="com.chenyanbin.beans" />13 <!-- 类型处理器 -->14 <typeHandlers>15 <!-- 从java中的Boolean转jdbc中的NUMERIC -->16 <typeHandler handler="com.chenyanbin.util.MyTypeHandler"17 javaType="Boolean" jdbcType="NUMERIC" />18 </typeHandlers>19 <!-- 环境配置 -->20 <environments default="development">21 <!-- 环境配置 -->22 <environment id="development">23 <!-- 事务管理器 -->24 <transactionManager type="JDBC"></transactionManager>25 <!-- 数据源 -->26 <dataSource type="pooled">27 <property name="driver" value="${jdbc.driver}" />28 <property name="url" value="${jdbc.url}" />29 <property name="username" value="${ername}" />30 <property name="password" value="${jdbc.password}" />31 </dataSource>32 </environment>33 </environments>34 <!-- 映射器 -->35 <mappers>36 <package name="com.chenyanbin.dao" />37 </mappers>38 </configuration>config.properties1 jdbc.driver=com.mysql.jdbc.Driver2 jdbc.url=jdbc:mysql://localhost:3306/sam3 ername=root4 jdbc.password=root(5) 创建接⼝:DeptMapper.java1 package com.chenyanbin.dao;23 import java.util.List;4 import com.chenyanbin.beans.Dept;56 public interface DeptMapper {7 public void deptSave(Dept dept);89 public List<Dept> deptFind();10 }(6) DeptMapper.xml1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE mapper3 PUBLIC "-////DTD Mapper 3.0//EN"4 "/dtd/mybatis-3-mapper.dtd">5 <mapper namespace="com.chenyanbin.dao.DeptMapper">6 <insert id="deptSave">7 insert into dept (DEPTNO,DNAME,LOC,flag)8 values(#{deptNo},#{dname},#{loc},#{flag})9 </insert>10 <select id="deptFind" resultType="Dept">11 select deptNo,dname,loc,flag from dept12 </select>13 </mapper>1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration3 PUBLIC "-////DTD Config 3.0//EN"4 "/dtd/mybatis-3-config.dtd">5 <configuration>6 <!-- 属性配置 -->7 <properties resource="config.properties"></properties>8 <!-- 别名配置 -->9 <typeAliases>10 <package name="com.chenyanbin.beans" />11 <package name="com.chenyanbin.dao" />12 </typeAliases>13 <!-- 环境配置 -->14 <environments default="development">15 <!-- 环境配置 -->16 <environment id="development">17 <!-- 事务管理器 -->18 <transactionManager type="JDBC"></transactionManager>19 <!-- 数据源 -->20 <dataSource type="pooled">21 <property name="driver" value="${jdbc.driver}" />22 <property name="url" value="${jdbc.url}" />23 <property name="username" value="${ername}" />24 <property name="password" value="${jdbc.password}" />25 </dataSource>26 </environment>27 </environments>28 <!-- 映射器 -->29 <mappers>32 </configuration>⽅式⼆:myBatis-config.xml1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE mapper3 PUBLIC "-////DTD Mapper 3.0//EN"4 "/dtd/mybatis-3-mapper.dtd">5 <mapper namespace="com.chenyanbin.dao.DeptMapper">6 <insert id="deptSave">7 insert into dept (DEPTNO,DNAME,LOC,flag)8 values(#{deptNo},#{dname},#{loc},#{flag})9 </insert>10 <resultMap type="dept" id="deptMap">11 <result column="flag" property="flag" typeHandler="com.chenyanbin.util.MyTypeHandler"/>12 </resultMap>13 <select id="deptFind" resultType="Dept">14 select deptNo,dname,loc,flag from dept15 </select>16 </mapper>⽅式⼆:DeptMapper.xml(7) 执⾏单元测试:TestMain_01.java1 package com.chenyanbin.test;23 import java.io.IOException;4 import java.io.InputStream;5 import java.util.List;6 import org.apache.ibatis.io.Resources;7 import org.apache.ibatis.session.SqlSession;8 import org.apache.ibatis.session.SqlSessionFactory;9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;10 import org.junit.After;11 import org.junit.Before;12 import org.junit.Test;13 import com.chenyanbin.beans.Dept;14 import com.chenyanbin.dao.DeptMapper;1516 public class TestMain_01 {17 private SqlSession session;1819 @Before20 public void Start() {21 try {22 InputStream inputStream = Resources.getResourceAsStream("myBatis-config.xml");23 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);24 session = factory.openSession();25 } catch (Exception e) {26 e.printStackTrace();27 }28 }2930 @After31 public void end() {32 if (session == null) {33 session.close();34 }35 }3637 @Test38 public void test01() throws IOException {39 Dept d2 = new Dept();40 d2.setDname("上海事业部");41 d2.setLoc("上海");42 d2.setFlag(false);43 session.insert("deptSave", d2);44 mit();45 session.close();46 }4748 @Test49 public void test02() {50 DeptMapper dao=session.getMapper(DeptMapper.class);51 List<Dept> deptList=dao.deptFind();52 System.out.println("ok");53 }5455 }(8) 项⽬⽬录结构1.2 objectFactory 对象⼯⼚ MyBatis 每次创建结果对象的新实例时,它都会使⽤⼀个对象⼯⼚(ObjectFactory)实例来完成。
Java框架MyBatis基础知识MyBatis是一款持久层框架,提供了灵活、高效的访问数据库的方法。
它将SQL语句与Java代码分离,减少了重复的代码,使得代码更加简洁、易读,从而提高开发效率。
MyBatis支持多种数据库,如MySQL、Oracle等,同时还支持XML配置和注解配置方式。
本文将介绍MyBatis的基础知识,包括框架的作用、框架的核心组件、配置文件的编写和查询方式的选择。
一、框架的作用MyBatis的作用就是让Java程序员更加方便地访问数据库。
使用MyBatis框架可以减少代码量,避免传统开发方式中的一些问题。
其主要优点包括:1.简化数据访问层的代码:在传统的JDBC方式中,开发者需要自己编写与数据库的连接、关闭、SQL语句的执行等一系列操作,而MyBatis通过封装这些操作,简化了访问数据库的代码。
2.提高代码的可维护性:使用MyBatis可以将SQL语句与Java代码分离,降低了代码耦合度,使代码更加易维护。
3.易于扩展:MyBatis提供了灵活的扩展方式,可以自定义类型转换器、结果集处理器等。
4.良好的性能:MyBatis提供了多种缓存机制,可以提高程序的性能。
二、框架的核心组件MyBatis主要由以下几个核心组件组成:1. SqlSessionFactory:用于获取SqlSession实例的工厂类,是MyBatis的核心组件之一。
SqlSession实例是MyBatis中用于执行SQL 语句的核心对象,SqlSessionFactory负责创建和管理SqlSession实例。
2. Configuration:是MyBatis的核心配置类,其中包含了MyBatis中所有的配置信息。
Configuration中包括了与数据库连接相关的信息、Mapper接口与SQL语句的映射关系、缓存配置等。
3. Mapper:Mapper是MyBatis中的一种组件,用于将Java方法与SQL语句进行绑定。
Mybatis知识点汇总MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs (Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
以下是MyBatis的主要知识点汇总:1.基础概念:o SQL映射文件:MyBatis使用SQL映射文件(或称为Mapper文件)来定义SQL语句,每个映射文件对应数据库中的一张表。
o映射器:映射器是MyBatis的核心,它负责将方法调用映射到SQL语句,并且将结果集映射回Java对象。
o注解:MyBatis支持使用注解来配置SQL语句,这可以减少XML 配置的使用。
2.配置:o mybatis-config.xml:这是MyBatis的主配置文件,其中包含了数据源、事务管理器等信息。
o别名:MyBatis中可以使用别名来简化全限定类名,如使用别名可以使代码更简洁易读。
o配置元素:包括<settings>、<typeAliases>、<environments>等元素。
3.SQL映射:o select:用于执行查询语句,并返回结果集。
o insert:用于插入新的记录。
o update:用于更新已存在的记录。
o delete:用于删除记录。
4.结果映射:o resultMap:用于定义结果集的映射规则,可以将结果集的列映射到Java对象的属性。
o association:用于定义复合主键或是关联其他表的数据。
o collection:用于表示一个对象中有多个集合属性。
5.动态SQL:o if:用于判断条件是否满足,根据条件来决定是否执行某段SQL 语句。
o choose/when/otherwise:类似于Java中的switch语句,根据条件选择执行不同的SQL语句。
1、#{}和${}的区别是什么?
#{}是预编译处理,${}是字符串替换。
#{}是sql的参数占位符,Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
${}是Properties文件中的变量占位符,Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
2、MyBatis是如何进行分页的?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10
3、在mapper中如何传递多个参数?
第一种:使用#{0},#{1}...
mapper层:
public selectUser(String username, String password);
mapper.xml层:
//对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。
<select id="selectUser" resultMap="BaseResultMap">
select * from user where username=#{0}and password=#{1}
</select>
第二种:使用@param注解:
mapper层:
public selectUser(@param("username")String
username,@param("password")String password);
mapper.xml层:
<select id="selectUser" resulttype="user">
select * from user where username = #{username} and password =
#{password}
</select>
4、Mybatis都有哪些Executor执行器?它们之间的区别是什么?
Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。
SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。
简言之,就是重复使用Statement对象。
BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sq l 都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。
与JDBC批处理相同。
作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。