MyBatis框架学习

MyBatis框架

1.MyBatis框架简介

目的(最大的作用):实现sql语句和java代码的分离,替代的是mvc模式中的Dao层,是持久层框架。

搭建方式:

1.配置mybatis全局配置文件:

a.固定的文件头,根标签为<configuration></configuration>;

b.在根标签内存在多个标签,<settings></settings>:设置日志文件打印内容的标签;

<typeAliases></typeAliases>:设置文件的别名使用<package></package>设置的是整个包内所有类的别名,为该类名的全小写名,使用<typeAlias></typeAlias>设置单个类的别名。

c.必备:<environments></environments>:环境标签,其中可以存在多个<environment></environment>标签,设置数据库连接环境。

每个环境标签中包含固定的内容:

<transactionManager type="JDBC/MANAGFED"></transactionManager>事务管理器,其中type参数有JDBC/MANAGFED两种取值,MANAGED指几乎不作任何处理,由容器来管理事务的生命周期,如:Spring和JEE应用服务器的上下文,会默认关闭连接。

<dataSource type="POOLED/UNPOOLED/JNDI"></dataSource>数据源,其中type参数有三种取值:POOLED:使用数据库连接池,UNPOOLED:不使用数据库连接池,JNDI:结合服务器容器使用,在外部配置数据源,使用JNDI引用。

每个数据源标签中的内容是基本固定的:存在四个<property name="" value=""></property>标签,其中的name值依次为:driver,url,username,password;依次对应使用jdbc方式连接数据库中的驱动,数据库url,数据库用户名,数据库密码,四个name值不可修改。其中value值可以以.properties配置文件存储,以<properties></properties>引入配置文件,并在value中以${driver}的方式获得。

PS:<configuration></configuration>标签中的字标签都有固定的顺序,这是由xml文件开头的文件约束DTD文件决定的。而DTD文件可以通过idea设置为寻找本地DTD文件。

d.必备:<mappers></mappers>:用来连接mapper.xml文件从而在解析mybatis.xml文件时扫描mapper.xml文件并解析,其中可以通过两种方式扫描mapper.xml文件:1.<mapper resource=""></mapper>:扫描单个mapper.xml文件,resource值为mapper.xml文件的url。

PS:url是路径,路径的形式为:包路径/文件名.xml,使用“/”连接。

2.<package name=""></package>:扫描某个包下所有mapper.xml文件,name值为包的全限定名,如:com.javalq.mapper,使用“.”连接。

2.配置mapper.xml文件

a.固定的文件头,根标签为<mapper namespqce=""></mapper>,必须配置namespace值,当使用mapper动态代理时,namespace值必须为xml文件的全限定名,如:com.javalq.mapper.Mapper.xml,此时每个xml文件名必须与其对应的接口名一致。

PS:因为使用动态代理时,扫描xml文件时会根据xml文件名寻找对应的接口,并通过解析xml获得该接口的实现类对象。

b.在mapper标签下书写SQL语句,可以通过动态SQL语句标签动态拼接SQL语句。

SQL语句基本标签:<select id="" resultType="" parameterType></select>:选择语句标签,id值为动态代理中的方法名,resultType(SQL语句返回值类型)值若为基本数据类型可以不写,若为实体类对象则写实体类别名;若为实体类对象list集合同样则写集合元素类型,即实体类别名;若为实体类对象Map集合,则写Map的别名:map(mybatis中定义了一些java类的别名,除了基本数据类型为在前边加"_",基本为类名的全小写形式);parameterType(参数类型):传入的参数若为单个可以为基本数据类型和自定义类;若为复杂参数可以为map和java实体类。<insert></insert>:添加语句标签,参数类型同上;<update></update>:修改语句标签,参数类型同上;<delete></delete>:删除语句标签,参数类型同上。

PS:#{}和${}的区别:

#{}:占位符,配合PreparedStatement使用。mybatis会自动使用PreparedStatement的set方法进行值得替换。

${}:字符串替换符,配合Statement使用。

动态SQL语句标签:(PS:①在动态SQL语句标签中,都是ODNL表达式,获取值得方式为:基本数据类型参数:0/1,param1/param2;对象作为参数:直接使用对象属性获取值:id,name等。在标签外SQL语句中的时候获取值仍需要使用#{0/1;param1/param2};#{id/name}获得;②)

①<if test="">SQL语句</if>:通过if标签进行判断,若满足test条件则拼接标签中的SQL语句;

②<where>and+其他动态SQL语句</where>:where标签会在生成SQL语句时自动添加where关键字,并且会自动去除第一个and。

③<foreach collection="" open="" separator="‘ close="" item="" index=""></foreach>:foreach只能遍历两种数据,一种为集合,一种为数组,当传入这两种值时候mybatis会将其封装到map集合中,其中键为"list"或者"array",所以collection值只能为list或者array,这取决于你传入的是集合还是数组,open值为SQL语句的开始字符串,close值为SQL语句的结束字符串,separator值为分割符,item就是集合中的每个值。

④<trim prefix="" prefixOverrides="" suffix="" suffixOverrides=""></trim>:增加SQL语句中的前缀和后缀,去除SQL语句中的前缀和后缀。更加灵活强大,动态调整SQL语句。

⑤<set></set>:可以理解为trim标签的特殊情况,只能增加set前缀,去除最后","后缀。

⑥<choose><when test=""></when><otherwise><otherwise></choose>:逻辑上相当于java中的

if(){}else if(){}else if(){}else{},当满足test条件时才拼接其中的SQL语句,没有满足条件则拼接otherwise中的SQL语句,一旦进入某个when就不会继续向下判断,直接结束choose。

⑦<bind name="" value=""></bind>:创建一个变量,并绑定上下文,name值自定义,value常为字符串的拼接,如:模糊查询时,可以拼接"‘%‘param1‘%‘",这样在传参数的时候不必将“%”拼入参数中。

⑧<sql id="">SQL语句</sql>/<include refid=""></include>:使用sql标签自定义一段sql语句,给定id值,在拼接字符串时使用include标签通过id引入使用。

2.使用SqlSession对象直接进行增删查改操作

a.service层调用xml文件方式:①解析mybatis.xml全局配置文件为字符流,获取字符输入流;②获得SqlSessionFactory对象,即SqlSession对象工厂;③获得SqlSession对象;④使用SqlSession对象的方法执行对应的SQL语句:selectList():查找多条数据,返回值是带有泛型的List集合;selectOne():查找单调数据,返回值是pojo实体类对象;selectMap():查找多条数据,返回值是带有泛型的map集合;update():返回值是int数值,代表操作的数据条数;delete():返回值是int数值,代表操作的数据条数;insert():返回值是int数值,代表操作的数据条数;

PS:selectList(String s,Object obj):其中的参数s为mapper.xml文件的namespace值(定位到xml文件)+xml文件中<select id="selectOne"></select>标签中的id值(定位到具体的SQL语句),如:"com.javalq.mapper.Mapper.selectOne"。

b.这些方法中参数只能存在一个,如果需要传入多个参数可以将参数封装到一个对象中或者集合中传入。

3.使用mapper动态代理实现动态拼接SQL语句

优点:

1、可以直接传入多个参数,不必封装为对象或者集合;

2、调用方法时直接以接口的实现类对象来调用方法,更加清晰方便。

注意要点:

1、接口名必须和xml文件名一致

2、接口方法名必须和xml标签id一致

3、namespace的值必须为接口的全路径名

4、使用package扫描mapper时,接口名必须与xml文件名一致

原文地址:https://www.cnblogs.com/paralleluniverse/p/11294305.html

时间: 2024-07-30 20:01:22

MyBatis框架学习的相关文章

Mybatis 框架学习

Mybatis 一. 入门 1. JDBC 回顾 (1). 准备数据库 新建 mybatis_learn 数据库 执行 sql 脚本 1 -- ---------------------------- 2 -- Table structure for `Blog` 3 -- ---------------------------- 4 DROP TABLE IF EXISTS `Blog`; 5 CREATE TABLE `Blog` ( 6 `id` int(11) NOT NULL AUTO

MyBatis框架学习(一)

MyBatis介绍 MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并改名为MyBatis.2013年11月迁移到Github.iBatis一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO). 当我们在DAO层使用jdb

Mybatis框架学习03

写在前面 本文接https://www.cnblogs.com/wushenjiang/p/12506992.html,至此mybatis的学习已经基本完成.近一个月会进行Android的冲刺学习,所以将SSM的学习暂且滞后. 高级映射 高级映射主要分为一对一,一对多,多对多,延迟加载等.以下分别进行解释: 一对一查询(resultType实现) 需求 首先我们要提出一个需求,以便我们开展学习.需求:查询订单信息,关联查询创建订单的用户信息. po的编写 这里我们直接继承原订单类,并添加新的属性

Mybatis框架学习(四)—查询缓存与spring的整合开发

1       项目整体目录 2       查询缓存 2.1     缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 2.1    mybatis持久层缓存 mybatis提供一级缓存和二级缓存 mybatis一级缓存是一个SqlSession级别,sqlsession只能访问自己的一级缓存的数据,二级缓存是跨sqlSession,是mapper级别的缓存,对于mappe

MyBatis框架学习(二)

MyBatis中配置文件相关问题 输入参数 在传统的数据库查询操作中,在sql语句中往往需要一些参数. 1.基本数据类型 输入参数为基本数据类型时,不考虑占位符名称,将输入参数都设置给占位符. xml中配置信息: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htt

MyBatis框架学习笔记(1)

1. Mybatis向dao层传入能够连接交互数据库并进行操作的对象 sqlSession 作用: - 向sql语句传入参数 - 执行sql语句 - 获取执行sql语句后的结果 - 事务的控制 2.  如何得到SqlSession: - 通过配置文件获取数据库连接相关信息 - 通过配置的相关信息构建SqlSessionFactory - 通过SqlsessionFactory打开 数据库会话(SqlSession) 3.  实体映射文件配置Mapper 数据库中的数据类型跟jdbc中的Type中

Mybatis框架学习总结-优化Mybatis配置文件中的配置

连接数据库的配置单独放在一个properties文件中 之前,是直接将数据库的连接配置信息卸载了Mybatis的conf.xml文件中,如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-

MyBatis框架学习二

增删改查操作 mapper接口本质就是原来的Dao接口,知识为了方便我们的书写,一个mapper接口对应一个mapper映射文件 将UserMapper更名为UserDao,说明本质 修改对应的mapper映射文件的namespace属性,对应上接口. 编写接口 1 package com.like.dao; 2 3 import com.like.pojo.User; 4 5 import java.util.List; 6 7 public interface UserDao{ 8 //获取

mybatis框架学习-多表查询

啰里巴嗦 mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单就是一对多 订单和用户就是多对一 一个用户可以下多个订单 多个订单属于同一个用户 人和身份证号就是一对一 一个人只能有一个身份证号 一个身份证号只能属于一个人 老师和学生之间就是多对多 一个学生可以被多个老师教过 一个老师可以交多个学生 特例: 如果拿出每一个订单,他都只能属于一个用户. 所以Mybatis就把多对一看成了一对一. mybatis中的多表查询: 示例:用户和账户 一个用户