7.运行结果与文件结构
- 运行结果
- 文件结构
8. 解决配置SQL语句警告提示
- 问题描述
- 解决方案
(还需要填写数据库名)
三.mybatis mapper代理开发
(在mybatis入门案例的基础上进行编码,详细代码见个人主页mybatis源码re_mb_mapper模块)
1.初识mapper代理开发
- 方法一 :在一个 XML 映射文件(如案例中的UserMapper.xml)中,可以定义无数个映射语句,这样一来,XML 头部和文档类型声明部分就显得微不足道了。文档的其它部分很直白,容易理解。 它在命名空间 “org.example.mapper.UserMapper” 中定义了一个名为 “selectAll” 的映射语句,这样你就可以用全限定名 “org.example.mapper.UserMapper.selectAll” 来调用映射语句了,就像入门案例模拟测试类中那样:
List<User> users = sqlSession.selectList("org.example.mapper.UserMapper.selectAll");
- 方法二 :你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。因此你就可以像上面那样,不费吹灰之力地在对应的映射器接口调用方法,就像下面这样:
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectAll();
第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。
2.mybatis mapper代理开发规则
3.根据代理开发规则编码示例
- 定义与 SQL映射文件同名的Mapper接口,并将Mapper接口和SQL映射文件放置在同一个目录下
- 步骤一
- 步骤二
- 设置SQL映射文件(UserMapper.xml)的namespace属性为Mapper接口全限定名
- 在Maper接口中定义方法,方法名就是SQL文件中sql语句的id,并保持参数类型和返回值类型一致
public interface UserMapper { List<User> selectAll(); }
4.编码(模拟测试类MybatisDemon)
- 模拟测试类运行结果
6.包扫描的方式扫描mapper映射文件(mybatis_config.xml)
四、mybatis核心配置文件
1.配置
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
.configuration(配置) .properties(属性) .settings(设置) .typeAliases(类型别名) .typeHandlers(类型处理器) .objectFactory(对象工厂) .plugins(插件) .environments(环境配置) .environment(环境变量) .transactionManager(事务管理器) .dataSource(数据源) .databaseIdProvider(数据库厂商标识) .mappers(映射器)
注意:配置各个标签时,需要遵守前后顺序
2.环境配置(environments)
- 应用场景讲解
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- 环境配置操作简介
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
每个数据库对应一个 SqlSessionFactory 实例
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
如果忽略了环境参数,那么将会加载默认环境,如下所示:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);
environments 元素定义了如何配置环境。
<!--environments:配置数据库连接环境信息。可以配置多个environment--> <!--default: 切换不同的environment--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <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>
注意一些关键点:
默认使用的环境 ID(比如:default="development")。 每个 environment 元素定义的环境 ID(比如:id="development")。 事务管理器的配置(比如:type="JDBC")。 数据源的配置(比如:type="POOLED")。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。
3.类型别名(typeAliases)
- 通过配单个配类型别名
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:
<typeAliases> <typeAlias alias="Author" type="domain.blog.Author"/> <typeAlias alias="Blog" type="domain.blog.Blog"/> <typeAlias alias="Comment" type="domain.blog.Comment"/> <typeAlias alias="Post" type="domain.blog.Post"/> <typeAlias alias="Section" type="domain.blog.Section"/> <typeAlias alias="Tag" type="domain.blog.Tag"/> </typeAliases>
当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。
- 通过配包配置类型别名
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases> <package name="domain.blog"/> </typeAliases>
- 示例
(mybatis_config.xml)
(UserMapper.xml)
- 有注解的情况下类型别名的配置
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:
@Alias("author") public class Author { ... }
`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`
总结
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。