配置文件一般放在src目录下,会直接编译并存放在类路径下(classpath)。
dtd用于对xml进行规范。元素、子元素、字符类型是否可解析等。
resource目录通过idea标记也会加到类路径
编写步骤:
- db.properties
- MyBatis配置 引入
<properties resouce="">
配置<environments>
的<dataSource>
、<transactionManager>
<Mapper resource="">
- mapper映射文件
- 实体类
配置文件
- 根标签
<configuration>
- 配置运行模式(开发模式)
- 每个模式的具体配置
3.1 指定事务管理(JDBC)
3.2 配置数据连接信息,连接参数
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--根标签-->
<!--配置运行模式,开发或服务模式 default指定模式-->
<environments default="dev">
<!--每个模式的具体配置-->
<environment id="dev">
<!--指定事务管理,jdbc会自动提交(不然需要手动commit)-->
<transactionManager type="JDBC"/>
<!--配置数据连接信息,类型为连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:localhost/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="******"/>
</dataSource>
</environment>
</environments>
</configuration>
环境管理标签
<environments default="">
,用于管理多个环境配置, 其中default属性用于指定当前使用哪个环境, 配置的是子标签的id;
环境配置标签: , 用于配置一个环境, ,其中, id属性用于进行唯一标识, 可以区分多个环境;
事务管理器标签
<transactionManager type="">
, 用于指定mybatis使用何种方式进行事务的管理, type的可选值有: JDBC | MANAGED;
JDBC: 表示mybatis采用和JDBC一致的方式进行事务的管理;
MANAGED: 表示MyBatis不对事务管理, 交给容器管理;
数据源标签
<dataSource type="">
, 用于配置数据源(数据库连接池), type的可选值有: POOLED | UNPOOLED | JNDI;
POOLED, 表示采用连接池技术获取数据库连接;
UNPOOLED, 表示不采用连接池, 每次都物理开关连接;
JNDI, Java Naming and Directory Interface, java命名和目录接口.
映射扫描标签
<mappers>
, <mapper class|url|resource>
class: 该属性用于扫描类的时候使用
url: 该属性用于扫描远程的映射信息
resource: 用于扫描本地类路径下的资源文件
类型别名
User可以用在任何使用pojo.User的地方。
<typeAliases>
<typeAlias alias="User" type="pojo.User"/>
</typeAliases>
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。
<typeAliases>
<package name="包名"/>
</typeAliases>
每一个在包 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 pojo.User的别名为 user。
pojo类
不依赖于任何第三方jar的java类(实体类)。
编写映射配置文件Mapper.xml
根标签: , namespace必须要配置. 命名空间有点类似于java中的package. 在MyBatis中, 命名空间用于管理sql语句对应的id. MyBatis中定位sql语句的方式是namespace.id
子标签: , 用于定义查询sql语句
id: 在同一个namespace中进行唯一标识;
resultType: 表名查询结果的类型. 应该写类型的全限定路径. 同时, 如果返回结果是集合, ,应该写集合泛型的类型.
<?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="kong">
<select id="selAll" resultType="pojo.User">
select * from tb_users
</select>
</mapper>
在config配置文件中添加映射配置文件
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
org.apache.ibatis.executor.result.ResultMapException
实体中没有添加实体类
调用api,操作数据库
- Resoures以流形式读取mybatis配置文件
- 通过SqlSessionFactoryBuilder获得sqlSessionFactory
- 通过sqlSessionFactory获得核心sqlSession用于数据操作
- 操作
//Resoures以流形式读取mybatis配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//通过SqlSessionFactoryBuilder获得sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//核心sqlSession用于数据操作
SqlSession sqlSession = sqlSessionFactory.openSession();
//操作
List<User> list = sqlSession.selectList("selAll");
for (User user:
list) {
System.out.println(user);
}
sqlSession.close();
缓存机制
一级缓存
MyBatis基于SqlSession对象做的缓存。同一个SqlSession对象中,对同一个id的查询,MyBatis会进行数据的缓存。一级缓存默认开启。
二级缓存
MyBatis基于SqlSessionFactory级别做的缓存。二级缓存默认是关闭的,如果要使用,需要在指定的命名空间通过配置进行开启。使用<cache />即可。必须要对使用同一个SqlSessionFactory的SqlSession进行关闭,才会触发二级缓存,未关闭时还是使用的一级缓存。
<cache
eviction="LRU"
flushInterval="60000"
readOnly="false"
size="1024" />
eviction: 回收策略(LRU: 最近最少使用,FIFO: 先进先出)
flushInterval: 刷新间隔, 默认不刷新, 单位是毫秒
readOnly: 是否是只读(false: 默认值, 表示可读可写, 要求实体类可序列化)
size: 记录数, 默认为1024
type: 表示自定义缓存使用的全限定路径, 一般用于第三方缓存方案
<resultMap>标签
resultType和resultMap区别:
resultType指定的一个类型,MyBatis会进行自动映射(Auto-Mapping)。列名和属性名一致则进行映射,否则属性被赋值为null。
resultMap属性指定的是<resultMap>标签的id值。表示MyBatis不进行自动映射,需要自己定义映射关系。表中字段与实体类的属性名一致时可以不用配置<result>
注解
a) 元注解, 描述注解的注解. 一共有四个:
@Target, 表示当前注解作用的位置
@Retention, 保留策略, 在什么时间段生效
@Document, 注解将出现在javadoc中
@Inherited, 可以被子类继承
b) 注解的使用规范:
使用注解需要先导包: import
语法: @注解名(属性=值, …)
c) 注解中参数的类型
简单类型: 字符串, 数值, Class…
数组类型: 属性={值1, 值2, …}
对象类型: 属性=@注解(属性=值, …)
d) 简化操作:
大部分注解有一个默认属性, 叫value
当属性只出现一个, 并且是默认属性时, 可以省略属性名, 直接写值
如果数组的元素只有一个值, 可以省略{}
MyBatis常用注解
@Param, 修饰方法的参数, 作用是将参数列表封装成Map集合形式
@Select
@Insert
@Update
@Delete
@Results
@Result
@One
@Many