1、环境配置
第一步:创建maven工程
第二步:导入坐标(pom.xml的相关依赖)
第三步:编写必要代码(实体类(属性)和持久层接口(Dao或者接口))
第四步:编写SqlMapConfig.xml(数据库连接和设置)
第五步:编写映射配置文件(方法与接口的连接及SQL语句)
第六步:编写测试类(psvm)
2.
-- 根据 id 查询 -->select * from user where id = #{uid} 细节: resultType 属性: 用于指定结果集的类型。 parameterType 属性:用于指定传入参数的类型。 sql语句中使用#{}字符: 它代表占位符,相当于原来jdbc部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。 #{}中内容的写法: 由于数据类型是基本类型, 所以此处可以随意写。
3.模糊查询
3.1查询的值不固定
select * from user where username like #{username}
配置文件中的#{username}也只是一个占位符,所以SQL语句显示为“?”。
3.2查询的值固定
select * from user where username like '%${value}%'
我们在上面将原来的#{}占位符,改成了${value}。
注意如果用模糊查询的这种写法,那么${value}的写法就是固定的,不能写成其它名字。
#{}表示一个占位符号
通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
${}表示拼接sql串
通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
4、jdbc与mybatis对比
1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
5、解决SQL查询时,有太多数据库列明和实体类之间别名从而有了resultMap
<--建立User实体和数据库表的对应关系 type属性:指定实体类的全限定类名 id属性:给定一个唯一标识,是给查询select标签引用用的。-->id标签:用于指定主键字段 result标签:用于指定非主键字段 column属性:用于指定数据库列名 property属性:用于指定实体类属性名称
6.自定义别名
在SqlMapConfig.xml中配置:
7.sqlMapConfig.xml
-properties(属性) --property-settings(全局配置参数)
--setting-typeAliases(类型别名) --typeAliase--package-typeHandlers(类型处理器)
-objectFactory(对象工厂) -plugins(插件)
-environments(环境集合属性对象) --environment(环境子属性对象)
---transactionManager(事务管理) ---dataSource(数据源)
-mappers(映射器)
8.动态SQL之if语句
8.1使用情况
根据实体类的不同取值,使用不同的SQL语句来进行查询。比如在id如果不为空时可以根据id查询,如果username不同空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。
8.2持久层dao映射配置
注意:
相当于以下代码(动态sql的where用法)
9.动态SQL的foreach
9.1使用场景:
9.2
10、一对多(一句SQL同时查多个表)
一对一(多对一)【】
11.mybatis的缓存
11.1一级缓存(同一个sqlsession)
一级缓存是SqlSession级别的缓存,自动开启,它就存在。
一级缓存是SqlSession范围的缓存,当调用SqlSession的修改,添加,删除,commit(),close()、clearcache(仅适用一级缓存)等方法,同一个SQL session不同查询条件;不同SQL session会清空一级缓存。目的为了让缓存中存储的是最新的信息,避免脏读。
二级缓存
二级缓存是mapper映射级别的缓存,多个SqlSession去操作同一个Mapper映射的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
需要自己 开启二级缓存
1.在映射文件中设置
2.二级缓存必须在一级缓存关闭或者提交之后失效。
3.查询的数据所转换的实体类必须实现序列化(Serializable)接口
12、mybatis的分页插件
pom.xml中引入插件



