Mybatis
基于java的持久层框架,内部封装了jdbc,使开发者只需要关注sql语句本身。而不需要去处理繁杂的过程。
开发步骤
- Maven中添加MyBatis的坐标
- 创建user数据表
- 编写User实体类
- 编写映射文件UserMapper.xml
- 编写核心文件SqlMapConfig.xml
- 编写测试类
mybatis的映射文件解释
增删改查
1 |
|
核心配置文件
environments标签
数据库环境的配置,支持多环境的配置
mapper标签
typeAliases标签
用于定义别名
mybatis的API
1、sqlSessionFactoryBuilder
其中,resource是相对于类的加载路径的。maven工程中,相对于resources文件夹下。
sqlSessionFactory
用于创建sqlSession实例。常用的有2个:
- openSession() 默认开启一个事务,但是不会自动提交。
- openSession(boolean autoCommit) 参数为true,就会自动提交
sqlSession会话对象
mybatis的Dao层实现
1、传统开发方式
自己编写UserDao接口与实现。
2、使用mapper接口
mapper是DAO层的接口,mapper接口与sql映射文件的绑定:sql文件的namespace 需要为mapper的全类名,sql语句与接口中的方法的绑定:sql语句的id为接口中的方法名。
在使用中,我们所写的mapper接口,通过session的getMapper方法,进行代理,得到一个mapper对象。mapper对象调用的方法就是对数据库的增删改查。
mybatis中的参数传递
1、单个普通类型的参数
#{xxx} 中的内容可以随便写什么,mybatis都可以做匹配
1 | <delete id="deleteUser" parameterType="java.lang.Integer"> |
2、多个参数
多个参数的时候,mybatis会包装为一个map传入,map的key是param1、param2或者0,1。代表的值就是我们传入的参数。
1 | <select id="selectUser" resultType = "User" |
当我们调用mapper的这个方法的时候,我们需要传入2个参数,一个Id,一个name。传入的参数,会变为一个map,我们在文档中获取它们是通过0,1…来获取。
命名参数
为参数使用@param起一个名字,Mybatis就会将这些参数封装进map中,key就是我们自己指定的名字。
3、POJO
取值时取#{POJO的属性名}
4、Map传递
如果我们已经封装为了一个map,就可以直接传递。并且,文档中取值的时候,用的key就是我们自己的map中使用的key。而不是它生成的map的key。
mybatis获取参数的方式
#{key}: 获取参数的值,会使用占位符 ?,预编译到sql中,安全
${key}:获取参数的值,拼接到sql中,有sql注入的问题
在原生的JDBC不支持占位符的地方,可以使用${}
select查询返回格式
查询一条数据,返回为map时
1 | <select id = "getUserMap" resultType = "map" |
查询多条数据,返回为一个map
使用注解 @MapKey(“id”)使用对象的哪个属性作为map 的key。
mybatis 自定义映射
自定义resultMap,实现高级结果集映射