MyBatis基础

扫码查看

一、持久化与ORM

   持久化:是程序数据在瞬时状态和持久状态之间转换的过程被称之为持久化。 让对象的生存期超越使用对象的程序的运行期。

  ORM: 对象关系映射,是一种数据化持久化技术。编写程序时,以面向对象的方式处理数据(对象);保存数据时,以关系型数据库方式存储数据(表)

二、框架的含义和好处

  含义:

    1. 是一个应用程序的半成品。

    2.提供可重用的公共结构。

    3. 按一定规则组织的一组组件。

  好处:   

    1.不用再考虑公共性的问题。

    2. 专心在业务实现上。

    3.结构统一,易于学习,维护。

    4. 新手也可以写出好程序。

三、MyBatis的构成

  (1)SqlSessionFactoryBuilder(用过即丢)     

          SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建 SqlSessionFactory 的,通过它可以构建多个SessionFactory。它的作用仅仅是一个构建器而已,一旦我们构建了SessionFactory,那么它将毫无意义应立即回收!

(2)SqlSessionFactory(应用级别中) Spring

       SqlSessionFactory的作用是创建SqlSession,而SqlSession相当于一个会话,相当于JDBC中的connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在整个应用的生命周期中。而如果我们多次创建同一个数据库的 SqlSessionFactory,则每次创建的SqlSessionFactory会打开更多的数据库连接资源,那么连接资源很开会被耗尽,因此SqlSessionFactory的职责是 唯一的。果断的采取单例模式,在应用中使用同一个SqlSessionFactory对象即可。

(3)SqlSession(由于SqlSession是线程非安全的,每有一个事务操作开启一个新的 使用完之后及时关闭)

       SqlSession是一个会话,相当于JDBC中的一个Connection对象,它的 生命周期应该是在请求数据库处理事务的过程中,且SqlSession是线程非安              全的对象,涉及多线程时要特别的当心,每次创建的SqlSession对象都要及时的关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能影         响很大。

 四、MyBatis简单的增删改查

  1.导入节点依赖

 <!--MyBatis的jar文件-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.6</version>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.32</version>
</dependency>

  2.在resources目录下创建mybatis-confiig.xml大配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml文件的头文件,起到对文件的约束作用(例如:必须存在哪些节点) -->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--核心配置-->

    <!--引入jdbc配置,数据库核心的四要素-->
    <properties resource="jdbc.properties"/>
    <!--集成log4j配置-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--配置别名-->
    <typeAliases>
        <!--方式一:单个别名-->
        <!--<typeAlias type="com.wdksoft.entity.user" alias="user"></typeAlias>-->

        <!--方式二:全局别名-->
        <package name="com.supermarket.entity"></package><!--这个包下的所有实体类的别名都是简写的类名-->
        <!--com.wdksoft.entity.user 别名为 user-->
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <!--设置事务管理 采用JDBC事务 后续会将事务管理转移到Spring-->
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 MyBatis自带的数据源 其它取值为UNPOOLED和JNDI -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>

        </environment>
    </environments>

    <mappers><!--管理我们配置的映射文件-->
        <mapper resource="com/supermarket/dao/ISmbmsUserDao.xml" ></mapper>
    </mappers>

</configuration>

  3.设置扫描路径和jdbc.properties

    UserMapper.xml文件是保存在 com.cmy.dao包下的。但由于在idea中的java源码目录不能保存配置文件,所以需要在pom.xml中配置扫描目录。 

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
  </resources>
</build>

    jdbc.properties文件:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/smbms?useUniCode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123

  4.创建接口对应小配置

<?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">
<!--小配置根节点 namespace代表命名空间-->
<mapper namespace="cn.mybatis.dao.IEasyBuyDao">
    <!--select代表查询 内部存放查询语句 resultType返回数据格式类型-->
    <select id="getAllEBUser" resultType="cn.mybatis.entity.EasyBuyUser">
        select * from easybuy_user
    </select>
</mapper>

    通过大配置关联小配置

<!--mappers关联小配置-->
<mappers>
   <mapper resource="cn/mybatis/dao/IEasyBuyDao.xml"/>
</mappers>

    全局关联小配置

<mappers>
<!--<mapper resource="cn/mybatis/dao/IEasyBuyDao.xml"/>-->
<!--全局关联小配置-->
<package name="cn.mybatis.dao"/>
</mappers>

  5.编写测试文件进行测试

@Test
public void test01() throws IOException {
    String resource="mybatis-config.xml";
    //步骤一:创建一个输入流,将xml文件以流的方式加载到内存
    InputStream is = Resources.getResourceAsStream(resource);
    //步骤二:通过SqlSessionFactoryBuilder构建SqlSessionFactory工厂
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    //步骤三:通过SqlSessionFactory工厂获取SqlSession的SQL会话    SQL会话就是程序员必须要得到对象
    SqlSession sqlSession = factory.openSession();
    //步骤四:通过SqlSession执行增删改查等一系列方法
    List<EasyBuyUser> easyBuyUser = sqlSession.selectList("getAllEBUser");
    for (EasyBuyUser user:easyBuyUser) {
        System.out.println(user.getLoginName());
    }
    //最后一步:关闭SqlSession释放资源
    sqlSession.close();
}

五、MyBatis集成log4j

   导入log4j依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

   在当前项目中导入log4j.properties配置文件

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=G:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
###log4j.rootLogger=debug, stdout,file
log4j.logger.cn.mybatis.dao=debug, stdout,file

    在mybatis配置文件中加入log4j配置

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

六、MyBatis框架getMapper

IEasyBuyDao mapper = sqlSession.getMapper(IEasyBuyDao.class);
List<EasyBuyUser> easyBuyUser = mapper.getAllEBUser();
for (EasyBuyUser user:easyBuyUser) {
    System.out.println(user.getLoginName());
}

七、别名的设置

   方法一:单独别名的设置

<typeAliases>
    <typeAlias type="cn.mybatis.entity.EasyBuyUser" alias="EasyBuyUser"/>
</typeAliases>

  方法二:全局别名的设置

<typeAliases>
    <package name="cn.mybatis.entity"/>
</typeAliases>

八、resultMap的使用

01-22 21:37
查看更多