MyBatis相关配置
在MyBatis中,不免会有一些配置要设置,我们先来看一下MyBatis配置XML文件的层次结构,这些层次是不能够颠倒顺序的,下面是层次结构;
<?xml version = "1.0" encoding = "UTF-8"?>
<configuration><!--配置-->
<properties/><!--属性-->
<settings/><!--设置-->
<typeAliases/><!--类型命名-->
<typeHandlers/><!--类型处理器-->
<objectFactory/><!--对象工厂-->
<plugins/><!--插件-->
<environments><!--配置环境-->
<environment><!--环境变量-->
<transactionManager/><!--事务管理器-->
<datSource/><!--数据源-->
</environment>
</environments>
<databaseIdProvider/><!--数据库厂商标识-->
<mappers/><!--映射器-->
</configuration>
以上就是MyBatis的所有配置属性了,接下来我们来一个个详细分析;
<properties>
<property name = "driver" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/mybatis"/>
<property name = "username" value = "root"/>
<property name = "password" value = "learn"/>
</properties>
接下来是properties配置文件;先做一个.properties的文件,文件中声明了你要配置的属性值,这样沃恩可以在多个配置文件中重复使用他们;
#数据库配置文件
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis
username = root
password = learn
然后我们在properties元素中导入进来了;
<properties resource = "jdbc.properties"/>
程序参数传递;通过以方法参数来传递属性,并覆盖已读取的同名属性;
InputStream cfgStream = null;
Reader cfgReader = null;
InputStream proStream = null;
Reader proReader = null;
Properties properties = null;
try{
//读入配置文件流
cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
cfgReader = new InputStreamReader(cfgStream);
proStream = Resources.getResourceAsStream("jdbc.properties");
proReader = new InputStreamReader(proStream);
properties = new Properties();
properties.load(proReader);
//解密为明文;
properties.setProperty("username",docode(properties.getProperty("username")));
properties.setProperty("password",docode(properties.getProperty("password")));
}catch(IOException ex){
Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex);
}
synchronized(CLASS_LOCK){
if(sqlSessionFactory == null){
sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfgReader,properties);
}
}
<settings>
<setting name = "cacheEnabled" value = "true"/>
<setting name = "lazyLoadingEnabled" value = "true"/>
<setting name = "multipleResultSetsEnabled" value = "true"/>
<setting name = "useColumnLabel" value = "true"/>
<setting name = "useGeneraterdKeys" value = "false"/>
<setting name = "autoMappingBehavior" value = "PARTIAL">
<setting name = "defaultExecutorType" value = "SIMPLE"/>
<setting name = "defaultStatementTimeout" value = "25"/>
<setting name = "safeRowRoundsEnabled" 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>
<typeAliases>
<typeAlias alias = "role" type = "com.learn.chapter2.po.Role">
</typeAliases>
@MappedTypes({String.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MyStringTypeHandler implements TypeHandler<String>{
private Logger log = Logger.getLogger(MyStringTypeHandler.class);
@Override
public void setParameter(PreparedStatement ps,int index,String value,JdbcType jt) throws SQLException{
log.info("使用我的TypeHandler");
ps.setString(index,value);
}
@Override
public String getResult(ResultSet rs,String colName) throws SQLException{
log.info("使用我的TypeHandler,ResultSet列名获取字符串");
return rs.getString(colName);
}
@Override
public String getResult(ResultSet rs,int index) throws SQLException{
log.info("使用我的TypeHandler,ResultSet下标获取字符串");
return rs.getString(index);
}
@Override
public String getResult(CallableStatement cs,int index) throws SQLException{
log.info("使用我的TypeHandler,CallableStatement下标获取字符串");
return cs.getString(index);
}
}
public interface RoleMapper{
public Role getRole(Long id);
}
接下来,我们给出xml文件,定义Mapper映射规则和SQL语句;
<?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.learn.chapter3.mapper.RoleMapper">
<select id = "getRole" parameterType = "long"
resultType = "com.learn.chapter3.po.Role">
select id, role_name as roleName,note from t_role where id = #{id}
</select>
</mapper>
最后,我们在配置中注册一个映射器就可以了;
<mappers>
<mapper resource = "com/learn/chapter3/mapper/roleMapper.xml"/>
</mappers>
以上就是MyBatis的所有相关配置属性了,记住顺序一定不能乱,一定要按照(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)的顺序;
MyBatis相关配置的更多相关文章
- SpringBoot 整合MyBatis 统一配置bean的别名
所谓别名, 就是在mappper.xml配置文件中像什么resultType="xxx" 不需要写全限定类名, 只需要写类名即可. 配置方式有两种: 1. 在 applicatio ...
- springmvc+spring+mybatis 项目配置
前提 工作环境:JDK 1.8.Mysql 5.7.18.Intellij IDEA 2018.1.Tomcat 8.5.Maven 框架版本:Spring 4.2.0.RELEASE.SpringM ...
- Spring与Mybatis整合配置
Mybatis核心配置文件: 配置文件内可以不写内容 <?xml version="1.0" encoding="UTF-8" ?> <!DO ...
- spring整合mybatis(hibernate)配置
一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
- SpringBoot集成Mybatis(0配置注解版)
Mybatis初期使用比较麻烦,需要各种配置文件.实体类.dao层映射关联.还有一大推其它配置.当然Mybatis也发现了这种弊端,初期开发了generator可以根据表结构自动生成实体类.配置文件和 ...
- [教程] Spring+Mybatis环境配置多数据源
一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...
- SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现
上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1. 外部架包依赖引入 外部依赖包引入 ...
- generator.xml文件与相关配置插件
一,generator.xml配置信息 1 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
随机推荐
- python学习:递归列出目录里的文件
#!/usr/bin/python import os import sys def print_files(path): lsdir = os.listdir(path) d ...
- 洛谷P1896 [SCOI2005]互不侵犯King【状压DP】
题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式: 只有一行,包含两个数N,K ...
- C# 使用 SmtpClient 发送邮件注意项
最近有邮件发送需求,使用 C# SmtpClient 对象发送邮件 , 报异常, 如下错误代码: 调整代码顺序后,发送邮件成功! 注意:一定要先设置 EnableSsl和UseDefaultCred ...
- object类的equals方法简介 & String类重写equals方法
object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...
- Java long类型和Long类型的那些事
还记得最近做了一个项目使用的是Long类型作为主键Id坑死人了,对于我们来说Long类型一样是一个包装类型,类似String类型,使用==符号进行比较的时候有时候会出现问题,建议适应equal()方法 ...
- MySQL 参数- Innodb_File_Per_Table(独立表空间)
Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间.共享表空间以及独立表空间都是针对数据的存储方式而言的. 共享表空间某一个数据库的所有 ...
- PAT1119. Pre- and Post-order Traversals
思路:中序遍历–根结点,左子树,右子树:后序遍历–左子树,右子树,根结点. 那么在找到根结点之后就可以开始划分左右子树了.左子树的先序第一个节点是根,左子树的后序最后一个节点是根. 例如 1 2 3 ...
- SpringMvc Json LocalDateTime 互转,form urlencoded @ModelAttribute 转换
JDK8 的LocalDate 系列日期API ,比Date 或者 Calendar 都好用很多,但是在SpringMvc 自动装配会有点小问题 会导致抛出类似异常 default message [ ...
- java使用poi将html导出word,默认打开页面视图
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:o ...
- HDFS读写过程
HDFS的读写过程: 读过程: Client收到用户的读请求——client拿着path向namenode请求文件或者block的datanode列表——client从返回的datanode列表中选择 ...