MyBatis《一》-快速入门-idea

一、了解MyBatis

1 简史
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,是一个 基于Java的持久层框架
2 简介
支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
是一个半自动ORM(Object RelationMapping对象关系映射)框架 Hibernant是全自动的。
避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
3 为啥使用
持久层: 可以将业务数据存储到磁盘, 具备长期存储能力,只要磁盘不损坏,在断电或者其他情况下,重新开启系统仍然可以读取到这些数据。
优点: 可以使用巨大的 磁盘空间存储相当量的数据,并且很廉价
缺点:
①对开发人员而言,核心sql还是需要自己优化
②sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据

二、简单配置一下&使用

在这里插入图片描述
1.先配置pom.xml

<dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

  </dependencies>
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
          <include>**/*.jsp</include>
        </includes>
        <filtering>true</filtering>
      </resource>

      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

2.根据上面图建立包以及文件
user.xml

<?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">

<!-- mytatis 的接口映射文件-->
<mapper namespace="mapper.UserMapper">
    <!-- id=listUser 必须和接口中的方法名相同-->
   <!-- paramterType 是传入的对象。-->
    <select id="listUserBynp" resultType="pojo.User" parameterType="pojo.User">
        SELECT
        id id,
        username name,
        password pwd
        FROM empuser
        WHERE
        username = #{name}
        AND
        password = #{pwd}
    </select>
    <--插入-->
    <insert></insert>
    <--更新-->
    <update></update>
    <--删除-->
    <delete></delete>
</mapper>

Usermapper

public interface UserMapper {
    // 在Mytatis 中,接口的方法要映射到xml的select的id.
    public List<User> listUser();
}

User对象实列直接写你要增删改查的对象就行
jdbc.properties

#---------jdbc---------
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/employee
jdbc.username=root
jdbc.password=123456

mytatis-config.xml

<?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>
	<--将四个连接字符串的数据在资源文件中通过键值 对(key=value)的方式放置${}使用-->
    <properties resource="jdbc.properties" ></properties>
    <--使得所有pojo.User可以写成user-->
    <typeAliases>
        <typeAlias type="pojo.User" alias="user"/>
    </typeAliases>
    <!-- 数据库连接环境的配置 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 数据源-->
            <dataSource type="POOLED">
                                                <!--com.mysql.jdbc.Driver-->
                <property name="driver" value="${jdbc.driver}" />
                                                <!--jdbc:mysql://localhost:3306/employee-->
                <property name="url" value="${jdbc.url}" />
                                                <!--root-->
                <property name="username" value="${jdbc.username}" />
                                                <!--123456-->
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!--映射-->
    <mappers>
        <mapper resource="mapper/user.xml"></mapper>
    </mappers>
</configuration>

test

public class MybatisTest {
    SqlSession session = null;
    //@Before在所有@Test之前执行,@after在所有@Test之后执行
    @Before
    public void Test0() throws IOException {
        String conf = "mytatis-config.xml";
        Reader reader = Resources.getResourceAsReader(conf);
        //创建SessionFactory对象
        SqlSessionFactoryBuilder sfb =new SqlSessionFactoryBuilder();
        SqlSessionFactory sf = sfb.build(reader);
        //创建Session
        session = sf.openSession();
    }
    @Test
    public void Test1(){
        //session.selectList  查询所有  ibatis 的查询方式
//      List<User> findUserByAll = session.selectList(findUserByAll);
//      System.out.println(findUserByAll.size());
        //Mytatis的查询方式
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> users = mapper.listUser();
        System.out.println(users.toString());
        session.close();
    }
}

3文件结构

  • configuration 配置
  • properties 属性
  • settings 设置
  • typeAliases 类型命名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
  • environment 环境变量
  • transactionManager 事务管理器
  • dataSource 数据源
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器

三、settings 设置

1.基本设置
一个 settings 文件就是一个 Python 模块, 所以必须遵守以下规则:

  • 不允许有 Python 语法错误.
  • 通过使用正常的 Python 语法,可以动态设置 settings .举例来说:MY_SETTING= [str(i) for i in range(30)]
  • 可以从其它 settings 文件中导入值.

2.配置项作用

配置项作用配置选项默认值
cacheEnabled该配置影响所有映射器中配置缓存的全局开关true/falsetrue
lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态true/falsefalse
aggressiveLazyLoading当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载true/felse版本3.4.1 (不包含)之前 true,之后 false
multipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)true/falsetrue
useColumnLabel使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果true/falsetrue
useGeneratedKeys允许JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)true/falsefalse
autoMappingUnkno wnColumnBehavior指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException 异常NONE、WARNING、FAILINGNONE
defaultExecutorType配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新SIMPLE、REUSE、BATCHSIMPLE
defaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数任何正整数Not Set (null)
defaultFetchSize设置数据库驱动程序默认返回的条数限制,此参数可以重新设置任何正整数Not Set (null)
safeRowBoundsEnabled允许在嵌套语句中使用分页(RowBounds)。如果允许,设置 falsetruefalse
safeResultHandlerEnabled允许在嵌套语句中使用分页(ResultHandler)。如果允许,设置falsetruefalse
mapUnderscoreToCamelCase是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射truefalse
localCacheScopeMyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据SESSION/STATEMENTSESSION
jdbcTypeForNull当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHERNULL、VARCHAR、OTHEROTHER
lazyLoadTriggerMethods指定哪个对象的方法触发一次延迟加载——equals、clone、hashCode、toString
defaultScriptingLanguage指定动态 SQL 生成的默认语言——org.apache.ibatis.script.ing.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 nulltrue/falsefalse
logPrefix指定 MyBatis 增加到日志名称的前缀任何字符串Not set
proxyFactory指定 MyBatis 创建具有延迟加栽能力的对象所用到的代理工具CGLIB/JAVASSISTJAVASSIST (MyBatis 版本为 3.3 及以上的)
vfsImpl指定 VFS 的实现类提供 VFS 类的全限定名,如果存在多个,可以使用逗号分隔Not set
useActualParamName允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用)true/falsetrue

3.配置实例:

<settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25"/>
    <setting name="defaultFetchSize" value="100"/>
    <setting name="safeRowBoundsEnabled" value="false"/>
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <setting name="localCacheScope" value="SESSION"/>
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

4.别名处理
(1)只设置某个类的

	<--只设置user别名-->
	<typeAliases>
        <typeAlias type="pojo.User" alias="user"/>
    </typeAliases>

(2)设置所有pojo对象

	<--pojo里的都可以直接写-->
	<typeAliases>
        <package name="pojo" />
    </typeAliases>

(3)MyBatis已经取好的别名

在这里插入图片描述
5.mappers 映射器
(1)用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件
(2)mapper逐个注册SQL映射文件

  • resource : 引入类路径下的文件
  • url : 引入网络路径或者是磁盘路径下的文件
  • class : 引入Mapper接口.有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置.
    没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.
  • name:包名
<mappers>
        <mapper resource="mapper/user.xml"></mapper>
        <mapper class="mapper/EmpMapper"></mapper>
        <mapper name="mapper"></mapper>
    </mappers>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值