1、mapper代理的方法, 程序猿只需要编写mapper接口方法
2、程序猿还需要编写mapper映射文件
3、程序猿编写mapper接口时一定要遵循一些开发规范,mybatis 可以自动生成mapper接口实现类代理对象
4、开发规范
1、在mapper.xml 文件中 namespace等于mapper接口的地址
2、 mapper.java 接口文件中方法名 和mapper.xml中的statement 的id一致
3、mapper.java 接口文件中输入参数的类型应该和mapper.xml文件中的statement的parameterType指定的类型一直
4、mapper.java 接口文件中的返回值的类型和mapper.xml 文件中的statement的resultType的指定类型一致
5、 在住配置文件中加载mapper.xml文件
5、代理对象内部调用selectOne 或 selectList
6、配置文件properties 属性
在SqlMapConfig.xml 文件中通过properties属性可以加载配置(resource)文件
在mybatis中将按照厦门的顺序来加载属性:
1、在properties元素体内定义的属性首先被读取,2、然后会读取properties元素中的resource或者url加载的属性文件,他会覆盖同名已读取的同名属性
3、最后parameterType传递的属性,他会覆盖已经读取的同名属性
7、 setting 全局参数配置
8、 typeAliases (别名)
<typeAliases>
<typeAlias type="" alias=""/> //单个定义别名,type为类型的路径,alias 为别名名称
<package name="com.mybatis.bean" /> /批量第一别名, 别名名称就是 该包下的所有类的类名(首字母大写 小写都行)
</typeAliases>
9、typeHandlers (类型处理器)
mybatis中通过typeHandlers 类型处理器完成jdbc类型和java类型的转换
10、mapper (映射器)
<mapper resource=""/> //单个映射文件的加载 resource 指的是相对地址
<mapper url="" /> //url 指的是绝对路径
<mapper class="com.mybatis.mapper.UserMapper" /> //通过mapper 映射接口加载映射文件 要求:1、需要将mapper接口的类名和mapper.xml 映射文件名称保持一致,且在同一个目录中 2、 接口开发必须遵循mapper接口代理的开发规范
11、输出映射
1、使用resultType进行输出映射, 只有查询的结果 列名 和pojo对象中的属性名一直,该列才可以映射成功
如果查询出的列名和pojo中的属性名全部不一致,则没有创建pojo对象,如果查询出来的列名和pojo对象
中的属性有一个一致,就会创建pojo 对象
2、 resultType 也可以是简单类型 (输出结果集只能一行一列 的结果集)
3、输出pojo对象和pojo列表 ---不管输出的是单个pojo对象还是pojo列表 在mapper.xml中的resultType指定的
类型都是一样的 不同的是mapper.java中 返回类型不同,一个是单个pojo对象一个是list对象
生成的动态代理对象是根据mapper.java方法中的返回值类型来确定是调用selectOne() 还是selectList()函数
12、 输出映射 resultMap
mybatis 中使用resultMap完成高级输出结果类型
resultMap 使用方法:
如果查询的结果集列名和pojo 对象的属性不一致时,可以通过定义一个resultMap对列名和pojo属性名之间做
一个映射关系
1、先定义resultMap 在配置文件中 , <resultMap type="" id="" ><id column="" property="" />表示对唯一
标识列的映射,其中column为查询结果的列名,property为pojo对象属性 <result column="" property="" /> result表示结果集中普通列的映射
column表示结果集中普通列的列名 property表示映射对象的pojo对象中的属性 </resultMap> type是resultMap最终映射的java对象类型
可以使用别名 id是resultMap 的唯一标识
mybatis 原理流程
1、mybatis 主要使用是sqlsession 对象,该对象是由SqlSessionFactory对象生成的,
在生成SqlSessionFactory对象时,需要导入mybatis的主配文件SqlMapperConfig.xml 文件,主配置文件中
需要引入mapper.xml文件(其中有sql 语句)
2、spring + mybatis 整合 (原生DAO)
1 、在spring 的配置文件中配置数据库的连接池 bean 和生成SqlSessionFactory的bean(属性中需要注入mybatis的配置
文件SqlMappConfig.xml文件)
2、在配置文件中编写 mapper.xml文件(其中包含一些sql语句) 并且在SqlMapConfig主配置文件中加载mapper.xml
3、编写 dao接口 和dao接口的实现类 (由于在Dao接口的实现类中,我们需要用SqlSessionFactory 工厂生成SqlSession 所以我们需要在dao接口的实现类中配置SqlSessionFactory 属性
由于在mybatis 和spring的整合包中存在SqlSessionDaoSupport类,该类中有SqlSessionFactory 属性,所以我们让Dao的实现类继承该类)
3、在spring的配置文件中配置 dao实现类的bean
3、spring+ mybatis 整合 (mapper接口 代理)
1、将所有的mapper.xml 文件放在一个文件夹中,之后再mybatis的主配置文件中mappers 标签中的package 标签自动扫描这个文件夹中的xml文件
2、由于mapper接口代理开发,没有实现类,都是一些接口 我们无法直接获取mapper代理对象
3、我们可以mybatis 和spring的结合包 中的MapperFactoryBean 这个对象获取mapper代理对象
我们需要向其中注入interface 接口 和sqlSessionFactory对象 (缺点: 如果我们多个mapper接口的代理
代理对象,我们需要配置多个这样的mapper对象,并且需要向其中添加多个接口 较为复杂)
4、3中缺点解决方法:在spring 的配置文件中 配置mapper自动扫描的bean 从mapper包中扫描出mapper接口
需要遵循的规范: 需要将mapper.java 和mapper.xml 名称一致并且需要在同一个目录中 用了这个扫描器 mybatis的主配置文件mappers 标签自动扫描包中mapper.xml 可以不用
自动扫描出来的mapper bean 的id 为mapper接口的类名 (首字母小写)
如: <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" />
<property name = "SqlSessionFactoryBeanName" value= "sqlSessionFactory"/ > //不要用<property name = "SqlSessionFactoryBean" ref= "sqlSessionFactory"/ > 这样会使有些配置不起作用
</bean>
2、程序猿还需要编写mapper映射文件
3、程序猿编写mapper接口时一定要遵循一些开发规范,mybatis 可以自动生成mapper接口实现类代理对象
4、开发规范
1、在mapper.xml 文件中 namespace等于mapper接口的地址
2、 mapper.java 接口文件中方法名 和mapper.xml中的statement 的id一致
3、mapper.java 接口文件中输入参数的类型应该和mapper.xml文件中的statement的parameterType指定的类型一直
4、mapper.java 接口文件中的返回值的类型和mapper.xml 文件中的statement的resultType的指定类型一致
5、 在住配置文件中加载mapper.xml文件
5、代理对象内部调用selectOne 或 selectList
6、配置文件properties 属性
在SqlMapConfig.xml 文件中通过properties属性可以加载配置(resource)文件
在mybatis中将按照厦门的顺序来加载属性:
1、在properties元素体内定义的属性首先被读取,2、然后会读取properties元素中的resource或者url加载的属性文件,他会覆盖同名已读取的同名属性
3、最后parameterType传递的属性,他会覆盖已经读取的同名属性
7、 setting 全局参数配置
8、 typeAliases (别名)
<typeAliases>
<typeAlias type="" alias=""/> //单个定义别名,type为类型的路径,alias 为别名名称
<package name="com.mybatis.bean" /> /批量第一别名, 别名名称就是 该包下的所有类的类名(首字母大写 小写都行)
</typeAliases>
9、typeHandlers (类型处理器)
mybatis中通过typeHandlers 类型处理器完成jdbc类型和java类型的转换
10、mapper (映射器)
<mapper resource=""/> //单个映射文件的加载 resource 指的是相对地址
<mapper url="" /> //url 指的是绝对路径
<mapper class="com.mybatis.mapper.UserMapper" /> //通过mapper 映射接口加载映射文件 要求:1、需要将mapper接口的类名和mapper.xml 映射文件名称保持一致,且在同一个目录中 2、 接口开发必须遵循mapper接口代理的开发规范
11、输出映射
1、使用resultType进行输出映射, 只有查询的结果 列名 和pojo对象中的属性名一直,该列才可以映射成功
如果查询出的列名和pojo中的属性名全部不一致,则没有创建pojo对象,如果查询出来的列名和pojo对象
中的属性有一个一致,就会创建pojo 对象
2、 resultType 也可以是简单类型 (输出结果集只能一行一列 的结果集)
3、输出pojo对象和pojo列表 ---不管输出的是单个pojo对象还是pojo列表 在mapper.xml中的resultType指定的
类型都是一样的 不同的是mapper.java中 返回类型不同,一个是单个pojo对象一个是list对象
生成的动态代理对象是根据mapper.java方法中的返回值类型来确定是调用selectOne() 还是selectList()函数
12、 输出映射 resultMap
mybatis 中使用resultMap完成高级输出结果类型
resultMap 使用方法:
如果查询的结果集列名和pojo 对象的属性不一致时,可以通过定义一个resultMap对列名和pojo属性名之间做
一个映射关系
1、先定义resultMap 在配置文件中 , <resultMap type="" id="" ><id column="" property="" />表示对唯一
标识列的映射,其中column为查询结果的列名,property为pojo对象属性 <result column="" property="" /> result表示结果集中普通列的映射
column表示结果集中普通列的列名 property表示映射对象的pojo对象中的属性 </resultMap> type是resultMap最终映射的java对象类型
可以使用别名 id是resultMap 的唯一标识
mybatis 原理流程
1、mybatis 主要使用是sqlsession 对象,该对象是由SqlSessionFactory对象生成的,
在生成SqlSessionFactory对象时,需要导入mybatis的主配文件SqlMapperConfig.xml 文件,主配置文件中
需要引入mapper.xml文件(其中有sql 语句)
2、spring + mybatis 整合 (原生DAO)
1 、在spring 的配置文件中配置数据库的连接池 bean 和生成SqlSessionFactory的bean(属性中需要注入mybatis的配置
文件SqlMappConfig.xml文件)
2、在配置文件中编写 mapper.xml文件(其中包含一些sql语句) 并且在SqlMapConfig主配置文件中加载mapper.xml
3、编写 dao接口 和dao接口的实现类 (由于在Dao接口的实现类中,我们需要用SqlSessionFactory 工厂生成SqlSession 所以我们需要在dao接口的实现类中配置SqlSessionFactory 属性
由于在mybatis 和spring的整合包中存在SqlSessionDaoSupport类,该类中有SqlSessionFactory 属性,所以我们让Dao的实现类继承该类)
3、在spring的配置文件中配置 dao实现类的bean
3、spring+ mybatis 整合 (mapper接口 代理)
1、将所有的mapper.xml 文件放在一个文件夹中,之后再mybatis的主配置文件中mappers 标签中的package 标签自动扫描这个文件夹中的xml文件
2、由于mapper接口代理开发,没有实现类,都是一些接口 我们无法直接获取mapper代理对象
3、我们可以mybatis 和spring的结合包 中的MapperFactoryBean 这个对象获取mapper代理对象
我们需要向其中注入interface 接口 和sqlSessionFactory对象 (缺点: 如果我们多个mapper接口的代理
代理对象,我们需要配置多个这样的mapper对象,并且需要向其中添加多个接口 较为复杂)
4、3中缺点解决方法:在spring 的配置文件中 配置mapper自动扫描的bean 从mapper包中扫描出mapper接口
需要遵循的规范: 需要将mapper.java 和mapper.xml 名称一致并且需要在同一个目录中 用了这个扫描器 mybatis的主配置文件mappers 标签自动扫描包中mapper.xml 可以不用
自动扫描出来的mapper bean 的id 为mapper接口的类名 (首字母小写)
如: <bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" />
<property name = "SqlSessionFactoryBeanName" value= "sqlSessionFactory"/ > //不要用<property name = "SqlSessionFactoryBean" ref= "sqlSessionFactory"/ > 这样会使有些配置不起作用
</bean>