什么是MyBatis
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.

使用MyBatis

1) 编程式
2)集成式managed 集成到spring
3)工作当中的使用方式 分析业务 、定义表结构 、generator生成需要的文件 、编程调用
4)generator使用步骤
a)pom.xml 中 build 下增加如下配置:

  <plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.3</version><configuration><configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile><overwrite>true</overwrite></configuration></plugin></plugins>

b)配置文件内容generatorConfig:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""mybatis-generator-config_1_0.dtd">
<generatorConfiguration><classPathEntry location="D:\repository\mysql\mysql-connector-java\5.1.17\mysql-connector-java-5.1.17.jar"/><context id="MysqlTables" targetRuntime="MyBatis3"><!--去除注释  --><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"userId="root"password="root"></jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><javaModelGenerator targetPackage="com.test.mybatis.beans" targetProject="D:\works\work3\mybatis\generate\src\main\java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><sqlMapGenerator targetPackage="xml" targetProject="D:\works\work3\mybatis\generate\src\main\resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><javaClientGenerator type="XMLMAPPER" targetPackage="com.test.mybatis.mapper" targetProject="D:\works\work3\mybatis\generate\src\main\java"><property name="enableSubPackages" value="true"/></javaClientGenerator><table schema="test" tableName="user" domainObjectName="User"><property name="useActualColumnNames" value="false"/></table></context>
</generatorConfiguration>

c)执行 mvn mybatis-generator:generate 即可生成文件到指定的目录

5)主要对象作用域SCOPE 生命周期

6)Mapper的xml和annotation形式
userMapper 中通过注解直接定义的查询:

@Select(“select * from user where id=‘1’”)
User getMyUser();

UserMapper.xml 中定义的查询

 <select id="getMyUser" parameterType="java.lang.String" resultMap="BaseResultMap">select<include refid="Base_Column_List" />from userwhere id = '2'</select>

这两者单独都可以使用但是不能同时存在(同一个方法有两种sql实现),同时存在会报异常

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.test.mybatis.mapper.UserMapper.getMyUser

注解和xml 两种方式对比:

TypeHandler
TypeHandler
MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。MyBatis 内置了大部分基本类型的类型处理器,所以对于基本类型可以直接处理,当我们需要处理其他类型的时候就需要自定义类型处理器。
实现自定义 TypeHandler 可以 实现 TypeHandler 或继承 BaseTypeHandler

此处如果不用注解指定jdbcType, 那么,就可以在配置文件中通过"jdbcType"属性指定, 同理, javaType 也可通过 @MappedTypes指定
//@MappedJdbcTypes(JdbcType.VARCHAR)
//@MappedTypes(System.class)
public class MyTypeHandler extends BaseTypeHandler {@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {}@Overridepublic Object getNullableResult(ResultSet resultSet, String s) throws SQLException {return resultSet.getString(s)+"_fix";}@Overridepublic Object getNullableResult(ResultSet resultSet, int i) throws SQLException {return null;}@Overridepublic Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return null;}
}

然后在 mapper.xml 中进行配置

 <resultMap id="BaseResultMap" type="com.test.mybatis.beans.User"><id column="id" jdbcType="VARCHAR" property="id" /><result column="name" jdbcType="VARCHAR" property="name" typeHandler="com.test.MyTypeHandler"/><result column="sex" jdbcType="VARCHAR" property="sex" /></resultMap>

执行查询测试 结果中name字段内容追加了 _fix 后缀

Mybatis-笔记1相关推荐

  1. mybatis笔记之一次插入多条数据sql语句写法

    mybatis笔记之一次插入多条数据sql语句写法

  2. MyBatis笔记二:配置

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

  3. 传智_Springmvc+Mybatis由浅入深全套视频教程(燕青)-mybatis笔记(两天)(2017年8月5日16:09:55)

    专业实习消耗了半个月,学习进度一度停滞.mybatis基本的使用不难,和hibernate相比各有优势吧,不是一个风格的框架. mybatis笔记整理如下: 笔记链接:http://download. ...

  4. 【狂神JAVA】MyBatis笔记

    简介 自学的[狂神JAVA]MyBatis 分享自写源码和笔记,希望对大家有帮助 本人配置 jdk13.0.2 (jdk1.7以上均可) Maven 3.6.3 MySQL 5.7.23 (mysql ...

  5. 【MyBatis笔记】04-插入操作更新操作删除操作

    保存更新删除 插入操作 获取插入的最后一个id 更新操作 删除操作 查询操作在之前的笔记中~ 插入操作 映射文件 Customer.xml : 插入数据的标签为 insert,与查询 select 区 ...

  6. mybatis笔记整理

    前言: mybatis可以说是最容易上手的持久层框架了,相比于hibernate 而言,它都是直接用sql语句对数据库进行操作,而不是用hql,尤其是关联关系复杂的时候,mybatis更容易实现.下面 ...

  7. mybatis 笔记记录

    mybatis?   mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql 语句需要程序员自己去编写,但是mybatis也有映射(输入参数映射 .输出结果映射). mybat ...

  8. MyBatis笔记——EhCache二级缓存

    介绍 ehcache是一个分布式缓存框架. 我们系统为了提高系统并发,性能.一般对系统进行分布式部署(集群部署方式)  不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统开发.所以要使用分布式缓 ...

  9. Mybatis笔记一:java.lang.NoClassDefFoundError: org/apache/ibatis/mapping/DatabaseIdProvider

    异常错误:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSess ...

  10. MyBatis笔记——配置文件完成增删改查

    l 完成品牌数据的增删改查操作 § 要完成的功能列表清单:□ 查询® 查询所有数据® 查看详情® 条件查询□ 添加□ 修改® 修改全部字段® 修改动态字段□ 删除® 删除一个® 批量删除准备环境:§ ...

最新文章

  1. 计算机系统NSX,2017款的讴歌NSX计算机维持的“战斗机”
  2. mysql不支持union_Mysql中Union的子句不支持order by
  3. 产品配件类目税目分类_我国消费税税目种类有哪些?
  4. 使用RichTextBox控件实现系统剪切板功能
  5. 如何在myeclipse中导入jar包?
  6. 数据库的事务,隔离级别和3大范式
  7. 开源应用诊断利器 Arthas GitHub Star 突破两万
  8. Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析
  9. C++静态联编与动态联编
  10. 【C++】C++标准中定义的名字和标识符
  11. Spring源码解析之BeanFactory
  12. 二叉排序树求每个结点平衡因子程序
  13. 微信小程序云开发教程-JavaScript入门(5)-函数异步同步
  14. 分享我的第一次Selenium自动化测试框架开发过程
  15. c语言music算法,PROJECT:以music算法为基础的几种DOA算法的研究及性能分析
  16. 求5的阶乘和1-5的阶乘和
  17. 【P01】双运放非反相放大器和失调处置
  18. 用HFFS实例讲解PCB蛇形天线设计技巧
  19. PDF文件拆分为单独页面且通过每页的相关内容重名命
  20. Code Review关注点

热门文章

  1. 有刷直流电机的工作原理及控制电路
  2. android抖音自动刷新,Android 使用SwipeRefreshLayout控件仿抖音做的视频下拉刷新效果...
  3. Codeblocks加入头文件
  4. Dream-hacking 造梦工程与脑波艺术
  5. ubuntu12.04宽带链接 以及 宽带链接后 再上局域网时出现的问题
  6. 第4代计算机的应用,在第四代计算机期间内计算机的应用逐步进入到().docx
  7. gbase 8d客户端功能事项
  8. Golang中defer的执行时机
  9. java将中文转换成拼音_java实现将汉语转换为拼音功能
  10. 自定义IOS系统弹框