一、Mybatis的Dao层实现

1.1 代理开发方式介绍

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

1、 Mapper.xml文件中的namespace与mapper接口的全限定名相同

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

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

4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

  1. /**
  2. * 接口代理操作
  3. * @param args
  4. * @throws IOException
  5. */
  6. public static void main(String[] args) throws IOException {
  7. //加载资源
  8. InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  9. //获取建造工厂
  10. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  11. //获取session
  12. SqlSession sqlSession = sqlSessionFactory.openSession();
  13. //获取mapper,接口代理
  14. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  15. //调用接口代理的findAll方法
  16. List<User> userList = userMapper.findAll();
  17. //处理结果
  18. System.out.println(userList);
  19. }

二、动态sql语句

2.1 动态sql:if 标签

根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不同空时还要加入用户名作为条件。

  1. <!-- 5.动态sql查询操作-->
  2. <select id="findByCondition" parameterType="gyb.domain.User" resultType="gyb.domain.User">
  3. select * from user
  4. <!-- where标签相当于where 1=1 -->
  5. <where>
  6. <!--如果不存在条件则不添加-->
  7. <if test="id != 0">
  8. and id=#{id}
  9. </if>
  10. <if test="username != null">
  11. and username=#{username}
  12. </if>
  13. <if test="password != null">
  14. and password=#{password}
  15. </if>
  16. </where>
  17. </select>

2.2 foreach标签

  1. <select id="findByIds" parameterType="list" resultType="user">
  2. select * from User
  3. <where>
  4. <foreach collection="list" open="id in(" close=")" item="id" separator=",">
  5. #{id}
  6. </foreach>
  7. </where>
  8. </select>

2.3 SQL片段的抽取

抽取:

  1. <sql id="selectUser" select * from User</sql>

使用:

  1. <select id="findById" parameterType="int" resultType="user">
  2. <include refid="selectUser"></include> where id=#{id}
  3. </select>

三、Mabatis 映射文件配置

<select>查询

<insert>:插入

<update>:修改

<delete>:删除

<where>:where条件

<if>:if判断

<foreach>:循环

<sql>:sql片段抽取

四、Mybatis 核心配置文件深入

1.1 typeHandlers标签

开发步骤:

①定义转换类继承类BaseTypeHandler

②覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时 mysql的字符串类型转换成 java的Type类型的方法

③在MyBatis核心配置文件中进行注册

④测试转换是否正确

1.2 plugins标签

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据

开发步骤:

①导入通用PageHelper的坐标

  1. <!-- 分页助手-->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper</artifactId>
  5. <version>5.1.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.github.jsqlparser</groupId>
  9. <artifactId>jsqlparser</artifactId>
  10. <version>1.0</version>
  11. </dependency>

②在mybatis核心配置文件中配置PageHelper插件

  1. <!-- 配置分页助手,插件标签-->
  2. <plugins>
  3. <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
  4. </plugins>

③测试分页数据获取

  1. public static void main(String[] args) throws IOException {
  2. //加载资源
  3. InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  4. //获取建造工厂
  5. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  6. //获取session
  7. SqlSession sqlSession = sqlSessionFactory.openSession();
  8. //获取mapper,接口代理
  9. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  10. //设置分页参数
  11. Page<Object> objects = PageHelper.startPage(1, 3);
  12. //调用接口代理的findByCondition方法
  13. List<User> users = userMapper.findAll();
  14. for (User user : users) {
  15. System.out.println(user);
  16. }
  17. //获取分页的其他参数
  18. PageInfo<User> pageInfo = new PageInfo<User>(select);
  19. System.out.println("总条数:"+pageInfo.getTotal());
  20. System.out.println("总页数:"+pageInfo.getPages());
  21. System.out.println("当前页:"+pageInfo.getPageNum());
  22. System.out.println("每页显示长度:"+pageInfo.getPageSize());
  23. System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
  24. System.out.println("是否最后一页:"+pageInfo.isIsLastPage());

Mybatis笔记(2)的更多相关文章

  1. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  2. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  3. MyBatis笔记一:GettingStart

    MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...

  4. 【MyBatis笔记】mapper文件的配置以及说明

    <!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...

  5. mybatis笔记2 基础理论准备

    之前发了一篇mybatis的crud入门笔记,算是入门了,为了让功力加深一级,来研究下mybatis的理论知识,哈哈,以后好拿来跟技术经理吹吹牛- 按照问题来吧!个人觉得有自主意识,带着自己的问题来研 ...

  6. mybatis笔记<二> 整合spring

    mybatis与spring整合需要添加几个jar包,mybatis-spring, spring-context, spring-jdbc 1. spring ioc只要一个jar包就ok 2. 我 ...

  7. mybatis笔记<一> Demo

    mybatis作为一个orm互联网公司基本都在用,今天写个笔记.记录一下mybatis使用 参考官网:http://www.mybatis.org/mybatis-3/getting-started. ...

  8. 【狂神说】JAVA Mybatis 笔记+源码

    简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...

  9. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  10. mybatis笔记1 基本的配置和操作

    mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映 ...

随机推荐

  1. 第五篇--VS2017如何生成Dll文件

    参考资料: https://blog.csdn.net/qq_34097715/article/details/79540933 https://www.cnblogs.com/RascallySna ...

  2. Java大整形BigInteger的用法

    基本类型int有32位,范围是:[-2147483648, 2147483647](正负21亿多) 基本类型long有64位,范围是:[-9223372036854775808, 9223372036 ...

  3. SAS 常用字符串函数

    原文链接:https://www.cnblogs.com/snoopy1866/p/15085466.html CAT(item-1 <, -, item-n>) : 在保留首尾空格的情况 ...

  4. 从零开始学习JAVA(入门基础)

    目录 博主从零开始学习JAVA(入门基础) 1.搭建JAVA开发环境 卸载JDK(未安装的请忽略) 安装JDK 2.编程语言中,何为编译型与解释型 编译型 解释型 3.第一个JAVA应用程序 4.JA ...

  5. flight.Archives001 / CSS Selectors选择器

    Title/CSS选择器 序 : 这是flight.Archives 梦开始的地方, 作者我熬夜肝出来了这篇文章... 保证这是最简洁高效的 CSS Selectors 教程 Note : 暂时没有能 ...

  6. vulnhub靶机-XXE Lab 1

    目录 信息收集 漏洞利用 信息收集 扫描目标主机,ip为192.168.88.154 nmap扫描结果 存在robots.txt文件.直接访问其中的admin.php显示404,加一层目录访问/xxe ...

  7. RHCE_DAY06

    iptables防火墙 ----匹配及停止 nerfilter/iptables:工作在主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出 ...

  8. 大厂需要什么样的 Android 开发?

    前言 昨天和一个百度的朋友闲聊,他说根据最近招聘 Android工程师的经验来看,大部分候选人在工作 3 年的时候基本都会遇上一道难过的坎. 为啥这么说呢? 因为工作一段时间之后,大部分工程师都已经完 ...

  9. 跟你说个笑话,硕士毕业两年,月薪10k,天天面向CV编程

    "枯燥乏味的一天,又tm要开始了". 早上10:00,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug. 9 个小时增删改查.搬砖写代码的一天又 ...

  10. 多次面试被拒,‘宅家苦修’30天,终获美团offer(含字节跳动/阿里/腾讯等大厂面试题整理)

    背景:双非渣本. 今年由于疫情,上半年一直在家里.2月份本来无忧无虑,呆在家里不给国家添乱的时候,发现身边的同学找到了大厂的offer.心里开始有点慌张.本来想在3月份如果能回到学校,就开始考研之路, ...