mybatis环境搭建

一丶Mybatis概述

     MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于 2013年11月迁移到Github。
iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架 包括SQL Maps和Data Access Objects(DAO)。

2、MyBatis特性
    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
    MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象) 映射成数据库中的记录
    MyBatis 是一个 半自动的ORM(Object Relation Mapping) 框架

  • 轻量级,性能出色 SQL 和 Java 编码分开,功能边界清晰。
  • Java代码专注业务、SQL语句专注数据

 二丶Mybatis环境搭建

1、创建maven工程,导入依赖。

<dependencies>
        <!-- Mybatis核心 --> 
     <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    
        <!-- junit测试 --> 
     <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
        <!-- MySQL驱动 -->
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.3</version>
    </dependency>
</dependencies>

 2、创建MyBatis核心配置文件

<?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>
    <!--设置连接数据库的环境--> <environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url"
                      value="jdbc:mysql://localhost:3306/mybatis"/>
             <!--注意:如果在建sql表单的时候选了字符集(如utf8),
             这里的value要改成:value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"-->
            <property name="username" value="root"/>
            <property name="password" value="这里写你的sql root的密码"/>
        </dataSource>
    </environment>
</environments>
    <!--引入映射文件--> <mappers>
    <mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>

3、创建Mapper接口

     Mapper接口不需要提供实现类

    ①映射文件namespace和Mapper接口的全类名一致

    ②映射文件中的sql语句和Mapper接口方法名一致

 

 创建User类POJO对应数据库中的表user

User类中,包括private类型的对应字段、一个有参构造器、一个无参构造器、所有字段的getter和setter

 

 4、创建UserMapper.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" >
<mapper namespace="com.cdl.mybatis.mapper.UserMapper">
    <insert id="saveUser">
        INSERT INTO user VALUES(null,"name","1234",23,"男","1234@qq.com")
    </insert>
    <update id="updateUser">
        update user set username='name' where id = 9
    </update>
    <delete id="removeUser">
        delete  from user  where id = 8 and username='name'
    </delete>

<!--      resultType 设置默认的映射关系-->
<!--      resultMap  设置自定义的映射关系-->
<!--  –>-->
    <select id="userGetById" resultType="User">
        select * from user where id = 4
    </select>

    <select id="getAllUser" resultType="User">
        select * from user
    </select>
</mapper>

 namespace定位到UserMapper类

根据元素id 例如<insert id="saveUser">,找到UserMapper.saveUser()

 

相关概念:ORM(Object Relationship Mapping)对象关系映射

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系

①、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml (一张表一个映射文件)
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers目录下

②、MyBatis中可以面向接口操作数据,要保证两个一致:
a> mapper接口的全类名和映射文件的命名空间(namespace)保持一致
b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

5、通过junit进行测试

public class MyBatisTest {
    /**
     * sqlsession默认不自动提交事务,如果需要自动提交事务,可以使用SqlSessionFactory.openSession(true);
     * @throws IOException
     */
    @Test
    public void testInsertUser() throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取sqlsessionfactorybuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取factory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class); //代理模式

        //测试功能
        int result = mapper.insertUser();

        //提交事务(写的type是JDBC)
//        sqlSession.commit();

        System.out.println("result: " + result);
    }
}

 6、加入日志

日志功能可以记录测试的sql语句、参数、结果,如:

 

①导入依赖

<!-- log4j日志 --> <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

②创建配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m  (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

日志的级别:
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细,即,如果选择DEBUG级别,一定会打印出前面几种级别的信息。

posted @ 2022-05-15 22:00  橘子写代码  阅读(45)  评论(0)    收藏  举报