一 前言

这篇文章涵盖了大量的mybatis配置,读懂一篇,收益终身。

二 properties配置

之前发布的文章中配置数据库连接信息是直接写入到mybatis-config.xml;为了使用灵活方便,和动态修改配置,我们将配置内容提取到配置文件db.properties(放在resource目录下,也可自定义)中,然后在 配置文件中的<properties> 标签引入 db.properties 所在的位置,然后就可以在 配置文件中使用 ${key} 获得 db.properties 中对应 key 的 value; 为此以后修改配置文件仅修改外面的 db.properties 中内容即可;

2.1 mybatis-config.xml

配置文件修改内容如下, MyBatis 3.4.2 之后还支持 默认属性例如:${username:root} ,当配置文件中未定义该属性时会读取默认属性root,更多详细的属性配置看官网;

<!-- 引入resource目录下的配置文件 --><properties resource="db.properties"><property name="username" value="root"/><property name="password" value="123456"/></properties><!-- 全局环境配置--><environments default="development"><environment id="development"><!-- 事物 --><transactionManager type="JDBC"/><!-- 配置数据源 --><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><!-- 配置默认值--><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>

2.2 db.properties

属性文件内如如下;

driver = com.mysql.jdbc.Driver
username = root
url = jdbc:mysql://192.168.0.100:3306/mybatis
password = 123456

三 typeAliases配置

typeAliases也就是别名的意思,我们之前查询的结果有个 resultType 属性,每次返回时都要使用类的全限定名(例如:com.zszxz.config.entity.Student),这种配置方式比较繁琐,mybatis 可以通过配置别名的方式使用简单类名代替类的全限定名;

3.1 配置方式一

第一种配置比较繁琐,也就是你有多少个返回类型的实体类,就在 mybatis-config.xml 的属性 <typeAliases>中配置多少个类名的映射;

mybatis-config.xml代码片段如下,需注意的标签的放置位置

<typeAliases><typeAlias type="com.zszxz.config.entity.Student" alias="student"></typeAlias></typeAliases>

mapper.xml 配置如下:

<!-- 查询学生--><select id="getStudent" resultType="student">select * from student</select>

3.2 配置方式二

第二种配置方式就是使用包名配置,mybaits就会进行自动映射,我们在mapper.xml中就可以使用类的简单名称表示全类名,这种方式比较简洁,推荐使用;

mybatis-config.xml代码片段如下

<typeAliases><package name="com.zszxz.config.entity"/></typeAliases>

mapper.xml 配置如下:

<!-- 查询学生--><select id="getStudent" resultType="student">select * from student</select>

3.3 配置方式三

第三种配置方式是使用注解配置,这种配置方式基于第二种的配置方式上,能够修改默认别名(默认是使用类的简单类名);在返回类型的实体上使用注解 @Alias可以指定别名;

实体如下:

/*** @Author lsc* @Description <p> </p>* @Date 2019/12/1 20:07*/
@Alias("stu")
public class Student {// idprivate String id;// 学生姓名private String name;// 学生编号private String number;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}
}

mapper.xml如下:

<!-- 查询学生--><select id="getStudent" resultType="stu">select * from student</select>

3.4 mybatis内置别名

mybatis 内置了多别名类型,即有些数据类型不需要配置别名也可以使用类的简单名称,比如java的8中基本数据类型和对应的包装类型,集合,迭代器,String类,大数值,日期等;

四 setting 配置说明

https://blog.csdn.net/youku1327/article/details/103604724 抱歉了,太长了可以看我得博客。

官方完整示例如下,实际开发中并非如此配置,按需配置;

<settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="true"/><setting name="useGeneratedKeys" value="false"/><setting name="autoMappingBehavior" value="PARTIAL"/><setting name="autoMappingUnknownColumnBehavior" value="WARNING"/><setting name="defaultExecutorType" value="SIMPLE"/><setting name="defaultStatementTimeout" value="25"/><setting name="defaultFetchSize" value="100"/><setting name="safeRowBoundsEnabled" value="false"/><setting name="mapUnderscoreToCamelCase" value="false"/><setting name="localCacheScope" value="SESSION"/><setting name="jdbcTypeForNull" value="OTHER"/><setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

五 typeHandlers 类型处理器

类型处理器故名思意,也就是可以在java类型和数据库jdbc类型之间转换;如果要自定义类型处理器就需要编写类型处理器类,然后在配置文件中配置,在SQL映射文件mapper.xml中使用。

5.1 自定义TypeHandle

本次示例就以字符串类型演示,需要继承BaseTypeHandler类,重写里面的方法,具体的代码清单如下,使用注解 @MappedJdbcTypes 会覆盖 泛型的String类型;

/*** @Author lsc* <p> 知识追寻者,字符串类型处理器</p>*/
// 指定关联jdbc会改变泛型指定
//@MappedJdbcTypes(JdbcType.VARCHAR)
public class StringTypeHandler extends BaseTypeHandler<String> {public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {// 指定java参数类型(String)对应数据库类型(varchar)preparedStatement.setString(i,s);}public String getNullableResult(ResultSet resultSet, String s) throws SQLException {return resultSet.getString(s);}public String getNullableResult(ResultSet resultSet, int i) throws SQLException {return resultSet.getString(i);}public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return callableStatement.getString(i);}
}

5.2 mybatis-config.xml

在 mybaits的配置文件中配置自定义的类型处理器

<!--配置类型处理器,会覆盖默认的类型处理器 --><typeHandlers><typeHandler handler="com.zszxz.config.handler.StringTypeHandler"></typeHandler></typeHandlers>

也可以使用包名全局扫描,减轻配置过程;

<!--配置类型处理器,会覆盖默认的类型处理器 --><typeHandlers><package name="com.zszxz.config.handler"/></typeHandlers>

如果配置了jdbc的映射属性会覆盖泛型指定类型

<typeHandlers><!--指定关联jdbc会改变泛型指定 --><typeHandler handler="com.zszxz.config.handler.StringTypeHandler" javaType="java.lang.String" jdbcType="VARCHAR"></typeHandler></typeHandlers>

5.3 SQL映射文件

使用 jdbcType=VARCHAR,javaType=String 指定类型转换;

<insert id="addStudent" parameterType="stu">insert into student(`name`,`number`)values (#{name,jdbcType=VARCHAR,javaType=String},#{number})</insert>

六 mappers映射器

mappers映射器就是配置引入SQL映射文件,也很简单,这边就给出官方示例,不再具体试验,有四种方式,通常我们掌握一至两种就足够日常开发使用;

6.1 相对于类路径方式

<mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/><mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

6.2 资源绝对路径方式

<mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/><mapper url="file:///var/mappers/BlogMapper.xml"/><mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

6.3 接口实现类的完全限定类名方式

<mappers><mapper class="org.mybatis.builder.AuthorMapper"/><mapper class="org.mybatis.builder.BlogMapper"/><mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

6.4 接口实现类的包名方式

<mappers><package name="org.mybatis.builder"/>
</mappers>

mybatis jdbctype数据类型_mybaits-mybatis配置相关推荐

  1. mybatis jdbctype oracle number,mybatis 插入null 时需要指定jdbcType

    MyBatis 插入空值时,需要指定JdbcTypemybatis insert空值报空值异常,但是在pl/sql不会提示错误,主要原因是mybatis无法进行转换 insert into instr ...

  2. (转)mybatis常用jdbcType数据类型

    阅读目录 1 MyBatis 通过包含的jdbcType类型 2 Mybatis中javaType和jdbcType对应和CRUD例子 3 Mybatis中javaType和jdbcType对应关系 ...

  3. Mybatis JdbcType与Oracle、MySql,javaType数据类型对应列表

    Mybatis JdbcType与Oracle.MySql数据类型对应列表  Mybatis JdbcType Oracle MySql JdbcType ARRAY     JdbcType BIG ...

  4. MyBatis JdbcType介绍

    MyBatis JdbcType介绍 JdbcType介绍 数据库列字段都是有类型的,不同的数据库有不同的类型.为了表示这些数据类型,Java源码是采用枚举来定义的: public enum JDBC ...

  5. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  6. mybatis使用注解替代xml配置,动态生成Sql

    mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...

  7. MyBatis-02 MyBatis XML方式概述及配置步骤

    概述 一个简单的权限控制需求 创建数据库表 创建实体类 XML方式概述及步骤 1. 首先在src/main/resources下com.artisan.mybatis.xml.mapper目录下创建5 ...

  8. Mybatis学习第一天——Mybatis的安装配置以及基本CURD操作

    1.Mybatis下载 Mybatis是开源的持久层框架,能够度jdbc进行简单的封装,但其并不是完全的ORM(Object Relational Mapping,对象关系映射),无法脱离数据库进行适 ...

  9. 【转】mybatis 自增主键配置

    mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同.基本上经常会遇到的就是Oracle Sequece 和 MySQL 自增主键,至 ...

最新文章

  1. boost::fibers::buffered_channel< std::string >用法的测试程序
  2. 8.10-11 mount、umount
  3. 【蓝桥杯省赛】冲刺练习题【循环】倒计时【15】天
  4. java socket 判断断网_java socket 判断对方在线或离线、断线
  5. C#学习笔记(十一):动态类型
  6. 帝都搬砖四年,我决定回老家考公务员
  7. B站又出事了,遭几大平台联合谴责
  8. vue-cli webpack浅析
  9. java 同音字_pinyin: The high performance pinyin tool for java.(java 高性能中文转拼音工具。支持同音字。)...
  10. Makefile教程(这一篇足够从入门到放弃!!!)
  11. 如何彻底卸载内置McAfee软件
  12. Silvaco仿真学习
  13. 数据安全治理方法导论
  14. GD32F450以太网(1):ETH 外设接口简介
  15. 使用python做手机app后台
  16. php双线切换线路,双线双路和断线自动切换
  17. 微信小程序外卖平台,免费下载小程序外卖源代码
  18. 【本/硕毕业生】开题报告及论文指导思路和撰写事项的整理
  19. 迭代最小二乘拟合椭圆
  20. C#医院门诊会员管理系统源码 通用会员系统源码

热门文章

  1. 1.4 异常处理机制及异常处理的基本结构
  2. Linux之交互式scripts
  3. dubbo配置文件加载顺序
  4. Spring boot程序入口
  5. ASP.NET通过ajax调用后台方法
  6. python爬虫新闻_python爬虫,爬取一系列新闻
  7. c++中函数放在等号右边_如何从C或C++中的函数返回多个值?
  8. junit测试NoSuchBeanDefinitionException: No bean named ‘dataSource‘ is define
  9. freemaker介绍及常见的用法解析
  10. 无法识别的配置节appsettings_人脸识别门禁考勤系统安装使用注意事项