1、简介
1.1、什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
1.2、持久化
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库(Jdbc), io文件持久化。
- 生活:冷藏.罐头。
为什么需要需要持久化?
1.3、持久层
Dao层,Service层,Controller层...
1.4、为什么需要Mybatis
- 帮助程序猿将数据存入到数据库中。
- 方便
- 传统的JDBC代码太复杂了。简化。框架。自动化。
- 不用Mybatis也可以。 更容易上手。技术没有高低之分
- 优点:简单
- 易学
- 灵活
- sq|和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
重要的一点:使用的人多!
2、第一个Mybatis程序
思路:搭建环境-->导入Mybatis-->编写代码-->测试
2.1、搭建环境
创建SQL表:- CREATE TABLE `user`<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>(
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>`id` int(0) NOT NULL AUTO_INCREMENT,
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>`name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'null',
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>`pwd` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>PRIMARY KEY (`id`) USING BTREE
- ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- INSERT INTO `user` VALUES (1, '老大', '123456');
- INSERT INTO `user` VALUES (2, '李二', '123456');
- INSERT INTO `user` VALUES (3, '张三', '123456');
- INSERT INTO `user` VALUES (4, '李四', '123456');
复制代码 新建一个maven项目
导入依赖编写Mybatis的核心配置文件2.2、第一个mybati程序
编写Mybatis工具类编写代码2.3、比较容易出现的问题
1、全局配置文件没有注册mapper,mapper配置路径要用 / 隔开2、mapper映射文件3、资源文件导出问题,由于maven项目的约定大于配置,默认只会导出resources目录的文件,但是在mybatis项目中,mapper推荐把映射配置文件放在和dao类同一级目录,会导致加载不到配置文件,所以要进行设置3、CRUD
namespace:namespace中的包名要和Dao/mapper接口的包名一致!
数据的增删改需要手动提交数据!!!
- **#{}是预编译处理,mybatis在处理#{}时,会将其替换成"?",再调用PreparedStatement的set方法来赋值。
- ${}是拼接字符串,将接收到的参数的内容不加任何修饰的拼接在SQL语句中,会引发SQL注入问题
select
- id:就是对应的namespace中的方法名;
- resultType: Sq|语句执行的返回值
- parameterType :参数类型(可以是对象)
1.编写接口
- User getUserById(int id);
复制代码 2.编写对应的mapper中的sq|语,属性可以直接调用- <select id="getUserById" resultType="com.zh.pojo.User"><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>select * from user where id=#{id}<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
- </select>
复制代码 3.测试Insert
update
Delete
4、配置解析
configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
configuration 配置文件中,对标签的顺序有规定:- The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
复制代码 4.1、properties(属性)
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>
复制代码 设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如:- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>
复制代码 这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。 driver 和 url 属性将会由 config.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。
也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值。例如:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
4.2、settings(设置)
设置名描述有效值默认值cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存true / falsetruelazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。true / falsefalselogImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J / LOG4J / LOG4J2 / JDK_LOGGING / COMMONS_LOGGING / STDOUT_LOGGING / NO_LOGGING未设置- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码 4.3、typeAliases(类型别名)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>
复制代码 当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码 每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:- @Alias("author")public class Author {<properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>...}
复制代码 4.4、环境配置(environments)
MyBatis可以配置成适应多种环境
通过 default="development" 来选择环境注意一些关键点:
- 默认使用的环境 ID(比如:default="development")。
- 每个 environment 元素定义的环境 ID(比如:id="development")。
- 事务管理器的配置(比如:type="JDBC")。
- 数据源的配置(比如:type="POOLED")。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
事务管理器(transactionManager)
在 MyBatis 中有两种类型的事务管理器(也就是 type="JDBC|MANAGED"):
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。例如:
提示 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们
尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择-种环境。
学会使用配置多套运行环境!
Mybatis默认的事务管理器就是JDBC,连接池: POOLED
4.5、mappers(映射器)
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码 4.6、其他配置
- typeHandlers (类型处理器)
- objectFactory (对象工厂)
- plugins插件
- mybatis-generator-core
- mybatis-plus
- 通用mappe
4.7、生命周期和作用域
生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder:
- 一旦创建了SqlSessionFactory, 就不再需要它了
- 局部变量
SqlSessionFactor
- 说白了就是可以想象为:数据库连接池
- SqlSessionFactory 一-旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
- 因此SqISessionFactory的最佳作用域是应用作用域。
- 最简单的就是使用单例模式或者静态单例模式。
SqISession
- 连接到连接池的一个请求!
- SqISession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用** 域。
- 用完之后需要赶紧关闭,否则资源被占用
5、处理字段与属性名不一样的问题
实体类中的字段:id<properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties><typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases> name<properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties><properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties>password
数据库中的字段:id<properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties><typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases> name<properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties><properties resource="org/mybatis/example/config.properties">
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="username" value="dev_user"/>
<typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases><property name="password" value="F2Fa3!33TYyg"/>
</properties>pwd
执行查询语句- User{id=1, name='老大', password='null'}
- User{id=2, name='李二', password='null'}
- User{id=3, name='张三', password='null'}
复制代码 会发现,字段名不一样,导致查询到的字段值为空
原始解决办法:select id,name,pwd as password from user- User{id=1, name='老大', password='123456'}
- User{id=2, name='李二', password='123456'}
- User{id=3, name='张三', password='123456'}
复制代码 显示使用resultMap结果- User{id=1, name='老大', password='123456'}
- User{id=2, name='李二', password='123456'}
- User{id=3, name='张三', password='123456'}
复制代码 官方文档:- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>select id, username, hashedPassword<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>from some_table<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>where id = #{id}
复制代码 在这些情况下,MyBatis 会在幕后自动创建一个 ResultMap,再根据属性名来映射列到 JavaBean 的属性上。如果列名和属性名不能匹配上,可以在 SELECT 语句中设置列别名(这是一个基本的 SQL 特性)来完成匹配。比如:在学习了上面的知识后,你会发现上面的例子没有一个需要显式配置 ResultMap,这就是 ResultMap 的优秀之处——你完全可以不用显式地配置它们。 虽然上面的例子不用显式配置 ResultMap。 但为了讲解,我们来看看如果在刚刚的示例中,显式使用外部的 resultMap 会怎样,这也是解决列名不匹配的另外一种方式。- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>
复制代码 然后在引用它的语句中设置 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如:- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>select user_id, user_name, hashed_password<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>from some_table<typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases>where id = #{id}
复制代码 6、日志
6.1、日志工厂
1、标准日志工厂- <properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties><properties resource="org/mybatis/example/config.properties">
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="username" value="dev_user"/>
- <typeAliases>
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers><package name="domain.blog"/>
- </typeAliases><property name="password" value="F2Fa3!33TYyg"/>
- </properties>
复制代码 [code]Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.Opening JDBC ConnectionCreated connection 359742806.Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@15713d56]==><typeAliases>
<mappers>
<package name="org.mybatis.builder"/>
</mappers><package name="domain.blog"/>
</typeAliases>Preparing: select * from user==> Parameters: |