mybatis.xml的写法:

与spring整合后,数据库连接池,配置别名,mapper文件扫描等都可以直接配置在spring的配置文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties" /><typeAliases>    <package name="com.sms.mybatis.pojo"/></typeAliases><typeHandlers> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.sms.mybatis.pojo.UserLevel"></typeHandler></typeHandlers><environments default="mysql"><!-- 默认采用的环境 --><environment id="mysql"> <!-- 环境的名称 --><!--配置事务管理 --><transactionManager type="JDBC" /><!-- 数据源采用的是连接池技术 POOLED:mybatis自带的数据源 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><mappers><mapper resource="com/sms/mybatis/mapper/UserMapper.xml"></mapper><!-- 要求接口名和xml名一致,同在一个包下 --><!--<package name="com.sms.mybatis.mapper"></package>--></mappers>
</configuration>

配置文件详细解说:

1.properties:

  • 通过properties引用外部配置文件,属性resource以文件名的格式引入,如config/xxxx.xml
  • 如果字段名重复,优先使用外部文件

2.typeAliases:设置别名,两种方式

  1. 这种方式别名可以随意DIY ,但是如果有多个类就需要配置多个typeAlias

     typeAlias type="pengcen.bean.Student" alias="stu"/>
    
  2. 这种方式别名默认为类名的首字母小写

    < package name="com.sms.mybatis.pojo"/>
    

3 . typeHandlers : 类型处理器:Java数据类型和jdbc数据库类型进行相互转换

4. plugins : 可以干预sql执行的各个阶段 , 如构建sql , 参数处理 , 结果集的处理等.

<typeHandlers>
<!--- mybatis的内置处理器可以将string类型的枚举类,转化成int型插入数据库中--><typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.sms.mybatis.pojo.UserLevel"></typeHandler>
</typeHandlers>

4.environment : 配置运行环境 可以有多个environment

  1. 配置事务管理采用jdbc默认的事务管理,之后整合的时候交给了 spring来处理

    < transactionManager type="JDBC" />
    
  2. 配置数据库: 数据源采用的是mybatis自带的数据源POOLED ; JNDI:基于tomcat的数据源

        <dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource>
    

5. mapper : 加载映射文件信息,两种常用的方式

  1. resource : 类路径下的资源引用

  2. package :要求接口名和xml名一致,同在一个包下

       < package name="com.sms.mybatis.mapper"></package>
    

mapper.xml的写法:

注意事项:
- namespace和接口的全路径名一一对应
- select/update/delete的id与接口中的方法名一一对应
- 返回值入参类型和接口中的方法一一对应
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sms.mybatis.mapper.UserMapper"><select id="getAllUser" resultType="user">SELECT * from `user`</select><select id="getUserById" resultType="user">SELECT * FROM user where id=#{id}</select></mapper>

执行增删改的返回值处理:

在Mybatis中增删改只能有三种返回值:- 返回void- 返回Boolean:返回操作是否成功- 返回Integer:返回受影响的行数执行完增删改后需要手动提交事务:sqlsession.commit();

执行查询的返回值处理:

基本上返回一个对象或者一个集合

入参的类型parameterType写与不写的区别:

Mybatis框架具有类型推断机制,因此parameterType写与不写都不会影响

parameterType可以传递的类型:

[parameterType=“map”] : 使用map作为参数传递时,直接在sql中写map对应的key即可;
[parameterType=“Object”] : 但是使用实体类对象作为入参传递,sql中的参数必须和实体类对象的属性名保持一致

< typeAliases >:给resultType设置别名的方式:

在sqlMapConfig.xml中通过标签设置,通过包扫描后,该包下的所有实体类在mapper.xml中返回值的类型以类名作为别名,不区分大小写

 <typeAliases><package name="com.sms.mybatis.pojo"/></typeAliases>

实现添加时,怎样获得自动生成的主键:

useGeneratedKeys=“true”:设置可以使用自动生成的主键
keyProperty=“uid”:设置将自动生成的主键赋值给传递过来参数的哪一个属性

<insert id="insertUser" useGeneratedKeys="true" keyProperty="uid">insert into user values(null,#{name},#{age},#{gender})</insert>

字段属性映射ResultMap的使用:

出现下列情况:员工表和部门表是一对多的关系,员工实体类中有Dept这个属性,但是多表连接查询的时候只能查出Dept这张表的did和dname,此时若要查出员工信息表,那么Dept这个属性会是null.因此需要建立映射关系

方法一:连表查询

    <!-- 列名和属性名一一对应 --><resultMap type="Emp" id="map1"><id column="eid" property="eid"/><result column="ename" property="ename"/><result column="age" property="age"/><result column="gender" property="gender"/><!-- 创建Dept对象后,赋值给Emp类中的dept属性 --><association property="dept" javaType="Dept"><id column="did" property="did"/><result column="dname" property="dname"/>       </association></resultMap><select id="getAllEmpWithDept" resultMap="map1">select eid,ename,age,gender,did,dname from Emp e left join Dept d on e.did=d.did   </select>

方法二:分步查询
①先通过eid查询到ename,age,gender,did字段
②通过查询出来的did字段,再查询出Dept表中的dname

 <resultMap type="Emp" id="map2"><id column="eid" property="eid"/><result column="ename" property="ename"/><result column="age" property="age"/><result column="gender" property="gender"/><!-- 将getAllEmp的查询结果did赋值到getDeptByDid中 column:作为分步查询的字段名--><association property="dept" select="getDeptByDid" column="did"></association></resultMap><select id="getAllEmp" resultType="emp">select ename,age,gender,did from emp where eid=#{eid}</select><select id="getDeptByDid" resultType="dept">select did,dname from dept where dept=#{did}</select>

Mybatis中的动态sql语句的用法:

①< where>:添加WHERE关键字,去掉多余的AND

②< if test=" ">:

③< trim prefix="" suffix="" prefixOverrides="" suffixOverrides="">:

prefix:在sql语句前面添加内容
suffix:在sql语句后面添加内容
prefixOverrides:在sql语句前面去掉某些内容
suffixOverrides:在sql语句后面去掉某些内容

④< choose>(when,otherwise):类似java中if-else if-else结构

⑤< foreach collection=" " item=" " close=" " open=" " separator=" " index=" ">:对一个数组或者集合进行遍历

collection:设置要遍历的集合或数组,入参为集合时,值为list;入参为数组时,值为array;
item:设置遍历的每一个数据的别名
open:设置循环体的开始内容
close:设置循环体的结束内容
separator:设置每一个循环之间的分隔符
index:若遍历的是list,index代表下标;若遍历的是map,index代表的是键;

案例1:实现批量删除:按eid删除员工信息
delete from emp where eid in ( ? , ? , ?);

 <!-- void deleteEmpByEids(List<Integer> eids) -->
<delete id="deleteEmpByEids">delete from emp where eid in<foreach collection="list" item="eid" open="(" close=")"  separator=",">#{eid}</foreach>
</delete>

案例2:实现员工表的批量添加:
insert into emp values(),(),();

<!-- void insertEmpByArray(Emp[] emps) --><insert id="insertEmpByArray">insert into emp values<foreach collection="array" item="emp" separator=",">(null,#{emp.ename},#{emp.age},#{emp.gender})</foreach></insert>

mybatis中的缓存:

一级缓存默认开启,sqlsession级别:同一个sqlsession使用同一个缓存;

二级缓存不默认开启,映射文件mapper级别:不管是哪个sqlsession,只要是对当前这个映射文件进行操作,就会使用同一个缓存.

开启二级缓存的操作步骤:

①在sqlMapConfig.xml中配置全局设置开启缓存可用:

<settings><setting name="cacheEnabled" value="true"/></settings>

②在需要使用二级缓存的映射文件中添加< cache/>表示开启二级缓存
③POJO需要实现serializable接口
④注意:二级缓存在sqlsession提交或关闭时才会生效.

缓存的相关属性设置:

① select标签的useCache属性:
配置这个select是否使用二级缓存.一级缓存一直是使用的
② sql标签的flushCache属性:
增删改默认fulshCache=true.sql执行后,会同时清空一级和二级缓存
查询默认flushCache=false.
③ sqlSession.clearCache():
清除的是一级缓存.

Mybatis框架的操作步骤和细节处理相关推荐

  1. Mybatis框架创建逆向工程步骤

    正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表.Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源 注意:数据库中不能有同名的表 ...

  2. python爬虫框架scrapy操作步骤

    生成项目scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 1.生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这 ...

  3. mybatis框架的介绍及使用

    mybatis是什么? 1.mybatis 是一个持久层框架, 主要用于来对***数据库***进行操作,mybtais 底层还是对jdbc的封装. 在工作中只是程序员不需要关注底层怎么封装,需要会使用 ...

  4. MyBatis是持久化层框架(SQL映射框架)-操作数据库

    MyBatis是持久化层框架(SQL映射框架)-操作数据库 1.环境搭建 1).创建一个java工程: 2).创建测试库,测试表,以及封装数据的javaBean,和操作数据库的dao接口 创建表:自己 ...

  5. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  6. 使用Mybatis框架完成增删改查操作

    一,MyBatis简介 MyBatis是一一个开源.轻量级的数据持久化框架,是JDBC和Hibernate的替代方案. MyBatis 前身为IBatis, 2002 年由Clinton Begin发 ...

  7. MyBatis框架添加客户有哪些步骤

    在MyBatis的映射文件中,添加操作是通过元素来实现的.例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现. 在上述配置代码中,传入的参数是一个Customer类型,该类型 ...

  8. JavaWeb【Mybatis】Mybatis的操作步骤

    Mybatis的操作步骤 mybatis开发流程 1.创建SqlSessionFactoryBuilder对象 2.创建SqlSessionFactory对象 3.加载SqlMapConfig.xml ...

  9. 2021年3月8日:MyBatis框架学习笔记02:利用MyBatis实现CRUD操作

    MyBatis框架学习笔记02:利用MyBatis实现CRUD操作 在第一节课中我们在UserMapper.xml里定义了两个查询语句:findById和findAll,对应的在UserMapper接 ...

最新文章

  1. 独家 | 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
  2. 2015年第六届蓝桥杯本科B组C++省赛个人题解
  3. ubuntu 安装svn 版本12.04
  4. 系统分析与设计结对项目———Wordcount
  5. ibatis学习笔记
  6. 快速搭建Springboot项目的两种方式!!
  7. 云计算OpenStack:云在身边博客园
  8. 【转载】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型...
  9. OrCAD 基本操作笔记
  10. JDK8与JDK11
  11. vue 函数(二):callback回调函数
  12. 【系统之家抢先发布】2011年10月最新GhostXP_SP3 PCOS技术快速装机版v6.5
  13. Eclipse学习笔记
  14. python网易公开课官网_可汗学院公开课:计算机科学
  15. Spring-IoCDI
  16. 【NOI2017模拟3.30】原谅
  17. cpu电压解释;cpu上面的数字和字母
  18. 亚声速 – 超声速等熵喷管流动 数值模拟(文字)
  19. 快速下载/上传google drive文件的方法
  20. 基于stm32的grbl写字机器人(添加舵机支持)

热门文章

  1. WordCount代码详解
  2. 消灭 Java 代码的“坏味道”【转】
  3. 编译Tomcat9源码【转】
  4. 搜索引擎solr系列---多字段匹配的实现方法
  5. 阿里云制造行业总经理胡鑫:中台技术如何支撑企业数字化转型
  6. Netty 学习和进阶策略
  7. 区块链常用架构是什么?它和保险业又如何结合?
  8. jquery学习手记(3)属性
  9. 产品分析报告|读书新贵——《网易蜗牛读书》
  10. 【个人总结】知识晶体的前中后台