0
点赞
收藏
分享

微信扫一扫

MyBatis1

49路末班车 2022-07-13 阅读 37

 

入门篇

编码流程

1. 编写全局配置文件:SqlMapConfifig.xml

2. 映射文件:xxxMapper.xml

3. 编写dao代码:xxxDao接口、xxxDaoImpl实现类

4. POJO类

5. 单元测试类

 

添加用户

#{}:是通过反射获取数据的---StaticSqlSource

${}:是通过OGNL表达式会随着对象的嵌套而相应的发生层级变化 --DynamicSqlSource

映射文件

 

<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.kkb.mybatis.po.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>


OGNL

对象导航图语言

|---User(参数值对象)

|--username--张三

|--birthday

|--sex--男

|--dept -- Department

|--name

|--no

OGNL表达式去获取Department对象的name属性:dept.name

 

基础应用篇

 

mapper代理开发方式

此处使用的是JDK的动态代理方式,延迟加载使用的cglib动态代理方式

 

代理理解

代理分为静态代理和动态代理。此处先不说静态代理,因为Mybatis中使用的代理方式是动态代理。

动态代理分为两种方式:

基于JDK的动态代理--针对有接口的类进行动态代理

基于CGLIB的动态代理--通过子类继承父类的方式去进行代理。

 

XML方式

开发方式

只需要开发Mapper接口(dao接口)和Mapper映射文件,不需要编写实现类。

开发规范

Mapper接口开发方式需要遵循以下规范:

1、 Mapper接口的类路径与Mapper.xml文件中的namespace相同。

2、 Mapper接口方法名称和Mapper.xml中定义的每个statement的id相同。

3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相

同。

4、 Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType的类型相同。

 

mapper映射文件

<?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.kkb.mybatis.mapper.UserMapper">
<!-- 根据id获取用户信息 -->
<select id="findUserById" parameterType="int"
resultType="com.kkb.mybatis.po.User">
select * from user where id = #{id}
</select>
</mapper>

mapper接口

/**
* 用户管理mapper
*/
public interface UserMapper {
//根据用户id查询用户信息
public User findUserById(int id) throws Exception;
}

 

全局配置文件中加载映射文件

 

<!-- 加载映射文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>


全局配置文件

配置内容

SqlMapConfifig.xml中配置的内容和顺序如下:

properties(属性)

settings(全局配置参数)

typeAliases(类型别名)

typeHandlers(类型处理器)--Java类型--JDBC类型--->数据库类型转换

objectFactory(对象工厂)

plugins(插件)--可以在Mybatis执行SQL语句的流程中,横叉一脚去实现一些功能增强,比如

PageHelper分页插件,就是第三方实现的一个插件

environments(环境集合属性对象)

environment(环境子属性对象)

transactionManager(事务管理)

dataSource(数据源)

mappers(映射器)

properties标签

SqlMapConfifig.xml可以引用java属性文件中的配置信息。

1、在classpath下定义db.properties文件,

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

2、在SqlMapConfifig.xml文件中,引用db.properties中的属性,具体如下:

<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
properties标签除了可以使用resource属性,引用properties文件中的属性。还可以在properties标签
内定义property子标签来定义属性和属性值,具体如下:
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
</properties>

注意: MyBatis 将按照下面的顺序来加载属性:

读取properties 元素体内定义的属性。

读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。

typeAlias标签

别名的作用:就是为了简化映射文件中parameterType和ResultType中的POJO类型名称编写。

默认支持别名

自定义别名

在SqlMapConfifig.xml中进行如下配置:

<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.kkb.mybatis.po.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="com.kkb.mybatis.po"/>
</typeAliases>
mappers标签
<mapper resource=""/>
<mapper url="">

使用绝对路径加载资源

如:

<mapper url="file://d:/sqlmap/User.xml" />
<mapper class=""/>

使用mapper接口类路径,加载映射文件。

如:

<mapper class="com.kkb.mybatis.mapper.UserMapper"/>

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

<package name=""/>

注册指定包下的所有mapper接口,来加载映射文件。

如:

<package name="com.kkb.mybatis.mapper"/>

注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

输入映射和输出映射

parameterType(输入类型)

parameterType属性可以映射的输入参数Java类型有:简单类型、POJO类型、Map类型、List类型

(数组)。

Map类型和POJO类型的用法类似,本课程只讲POJO类型的相关配置。

List类型在动态SQL部分进行讲解。

resultType(输出类型)

resultType属性可以映射的java类型有:简单类型、POJO类型、Map类型。

不过Map类型和POJO类型的使用情况类似,所以只需讲解POJO类型即可。

使用要求

使用resultType进行输出映射时,要求sql语句中查询的列名和要映射的pojo的属性名一致。

举报

相关推荐

0 条评论