MyBatis基础

配置文件一般放在src目录下,会直接编译并存放在类路径下(classpath)。
dtd用于对xml进行规范。元素、子元素、字符类型是否可解析等。
resource目录通过idea标记也会加到类路径
编写步骤:

  1. db.properties
  2. MyBatis配置 引入<properties resouce="">
    配置<environments><dataSource><transactionManager> <Mapper resource="">
  3. mapper映射文件
  4. 实体类

配置文件

  1. 根标签<configuration>
  2. 配置运行模式(开发模式)
  3. 每个模式的具体配置
    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,操作数据库

  1. Resoures以流形式读取mybatis配置文件
  2. 通过SqlSessionFactoryBuilder获得sqlSessionFactory
  3. 通过sqlSessionFactory获得核心sqlSession用于数据操作
  4. 操作
//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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值