MyBatis学习随笔

第一个MyBatis项目

  • 创建项目
  • 导入maven依赖,根据需要选择性添加mysql/oracle,spring,spring-mybatis等依赖,这里就不一一列出了
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
  • 创建mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--加载外部配置文件-->
<properties resource="mysql8.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--
这里的value可以使用常量
同时可以使用${}在配置文件中读取
后期整合spring就不需在此配置
-->
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--这里拷贝加载的mapper文件的全路径-->
<mapper resource="com/offcn/mapper/CustomerMapper.xml"/>
</mappers>
</configuration>

MyBatis基本配置文件

  • 创建mapper的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.offcn.mapper.CustomerMapper">
<!--根据cust_id查询客户-->
<select id="selectCustomerById" parameterType="Int" resultType="com.offcn.bean.Customer">
SELECT * FROM `customer` WHERE cust_id = #{cust_id}
</select>
</mapper>

Mapper.xml

  • 创建mapper.xml对应的接口,该接口名要和mapper文件名完全一致
  • package com.offcn.mapper;
    
    import com.offcn.bean.Customer;
    import org.springframework.stereotype.Repository; @Repository
    public interface CustomerMapper {
    public Customer selectCustomerById(Integer id);
    }
  • Bean对象代码
  • package com.offcn.bean;
    
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    import org.springframework.stereotype.Component; /**
    * @author 张瑞丰
    * @description 客户表bean
    * @date 2019/4/19
    */
    @Getter@Setter@ToString@Component
    public class Customer {
    private Integer custId;
    private String custName;
    private String custProfession;
    private String custPhone;
    private String email;
    }

    测试类代码

  •     @Test
    public void test() throws IOException {
    //创建SqlSessionFactoryBuilder
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //读取配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
    //获取session工厂
    SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
    //获取会话
    SqlSession sqlSession = sessionFactory.openSession();
    //执行sql,并得到返回值
    Customer result = (Customer)sqlSession.selectOne("selectCustomerById", 2);
    //获取结果
    System.out.println(result);
    }

    输出结果:Customer(custId=null, custName=null, custProfession=null, custPhone=null, email=libai@163.com)

  • 只有email正常输出,其余字段都未正常输出,原因:表中字段除email外,名为cust_xx而bean则为custXx,因列名和字段名不一致导致,解决方案如下:
    •   在mapper中创建resultMap将表中字段和bean的属性进行映射,同时要修改select的ResultMap为其id,一定不能打错,打错会报一万个错误
    •   在mybatis全局配置文件中开启驼峰转下划线
    • 在select语句中给列名起别名的形式
    • <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.offcn.mapper.CustomerMapper">
      <!--映射表字段和列名 type为bean的全类名-->
      <resultMap id="BaseResultMap" type="com.offcn.bean.Customer">
      <id column="cust_id" property="custId"></id>
      <result column="cust_name" property="custName"></result>
      <result column="cust_profession" property="custProfession"></result>
      <result column="cust_phone" property="custPhone"></result>
      <result column="email" property="email"></result>
      </resultMap>
      <!--根据cust_id查询客户-->
      <select id="selectCustomerById" parameterType="Int" resultMap="BaseResultMap">
      SELECT * FROM `customer` WHERE cust_id = #{cust_id}
      </select>
      </mapper>

MyBatis笔记(一)的更多相关文章

  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. spring配置文件1

    applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?><beans xm ...

  2. Java--输入与输入

    输入 java.util.Scanner java.lang.System java.io.Console ``` Scanner in = new Scanner(System.in); // 新建 ...

  3. python打印日志log

    整理一个python打印日志的配置文件,是我喜欢的格式. # coding:utf-8 # 2019/11/7 09:19 # huihui # ref: import logging LOG_FOR ...

  4. 记录下 k8s (1.14.2)使用kubeadm方式搭建和rancher搭建需要的镜像清单

    kubeadm方式 之前一直用的1.12.2版本的,最近想试一下新的版本1.14.2 当然相应的组件镜像版本也需要更新了.镜像版本如下(网络插件使用flannel) k8s.gcr.io/kube-p ...

  5. 【PAT甲级】1006 Sign In and Sign Out (25 分)

    题意: 给出学生人数M,输入M组学生ID,到机房的时间,离开机房的时间.输出最早到机房的学生的ID,空格,最后离开机房的学生的ID.(M大小未给出,就用了1e5) AAAAAccepted code: ...

  6. Android学习笔记17:单项选择RadioButton和多项选择CheckBox的使用

    请参见 http://www.android100.org/html/201406/05/19495.html

  7. 108、Java中String类之字符串文本替换

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  8. PLSQL Developer常用设置及快捷键

    CSDN日报20170314--<40岁程序员真的要被淘汰了么?> 程序员2月书讯 [直播]用面向协议的思想简化网络请求 博客一键搬家活动开始啦 PLSQL Developer常用设置及快 ...

  9. JavaScript动画实例:李萨如曲线

    在“JavaScript图形实例:阿基米德螺线”和“JavaScript图形实例:曲线方程”中,我们学习了利用曲线的方程绘制曲线的方法.如果想看看曲线是怎样绘制出来的,怎么办呢?编写简单的动画,就可以 ...

  10. python人脸对比

    import sys  import ssl  from urllib import request,parse    # client_id 为官网获取的AK, client_secret 为官网获 ...