mybatis

mybatis是什么

mybatis 事体格持久层框架,是apache下的顶级项目。
mybatis让程序主要精力集中在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成javaduixinag。(输出映射)

1.sqlMapConfig.xml(是mybatis的全局配置文件)配置了数据源、事务等mybatis运行环境
配置映射(配置sql语句)
mapper.xml(映射文件)

2.sqlSessionFatory(会话工厂)作用:创建sqlSession

3.SqlSession(会话)作用:操作数据库(发出sql增、删、改、查)

#{}和${}
#{}表示一个占位符,#{}接收输入的参数,类型可以是简单类型,pojo、hashmap
如果接收简单类型,#{}中可以写成value或者其他名称。
#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

表 示 一 个 拼 接 符 号 , 会 引 起 s q l 注 入 , 所 有 不 建 议 使 用 {}表示一个拼接符号,会引起sql注入,所有不建议使用 sql使{}
接 收 输 入 参 数 , 类 型 可 以 是 简 单 类 型 , p o j o 、 h a s h m a p 如 果 接 收 简 单 类 型 , {}接收输入参数,类型可以是简单类型,pojo、hashmap 如果接收简单类型, pojohashmap{}中只能写成value

mysql自增主键,执行insert 提交之后自动生成一个自增主键。
通过mysql函数获取到刚插入记录的自增主键:
LAST_INSERT_ID()

是insert之后

SqlSessionFactoryBuilder
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder
在需要创建SqlSessionFactory时候,只需要new 一次SqlSessionFactoryBuilder即可。

SqlSessionFactory
通过SqlSessionFactory创建SqlSession,使用单例模式管理SqlSessionFactory(工厂一旦创建,使用一个实例)
将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory

SqlSession
SqlSession是一个面向用户()的接口。
SqlSession中提供了很多操作数据库的方法;如:seletOne(返回单个对象)、seletList(返回一个或多个对象)
SqlSession是线程不安全的,在SqlSession实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。

思路:
程序员需要写dao接口和dao实现类。
需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactoy创建SqlSession

原始的dao开发问题


1、dao方法实现类中存在大量的模板方法,设想能否将这些代码提出出来,大大减轻程序员的工作量
2、调用sqlsession方法时将statement的id硬编码了
3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段不报错,
不利于程序员开发。

Mapper接口:思路

程序员只需要编写mapper.xml映射文件
程序员编写mapper接口需要遵循一些开发规范,
mybatis可以自动生成mapper接口对象。

开发规范:

1.在mapper.xml中namespace要等于mapper接口地址
使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址一致
2.mapper.java接口中的方法名和mapper.xml中statement的id一致
3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
4.mapper.java接口中的方法返回值类型和mappe.xml中statement的resultType指定的类型一致。

总结:

以上开发规范主要时对下边代码进行统一生成:
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert(“test.insertUser”,user);

settings 全局参数配置
mybatis全局配置

typeAliases (别名)*

需求:
在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。

你可能感兴趣的:(mybatis,后端)