MyBatis---------环境搭建(一)

目录

MySQL存储引擎InnoDB与Myisam

默认字符集

MyBatis使用

1.导入依赖

2.编写MyBatis核心配置文件

3.创建MyBatis工具类

4.Maven资源配置

测试

容易产生的问题:

1.配置文件没有注册

2.maven资源问题

3.绑定接接口错误

4.方法名不对

5.返回类型不对

生命周期和作用域

Mybatis三个核心接口

关于@Param() 注解

 

MySQL存储引擎InnoDB与Myisam

ENGINE=INNODB 
ENGINE=MYISAM

默认字符集

DEFAULT CHARSET=utf8 

MyBatis使用

1.导入依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--
        注意核新配置文件链接  为8.0.21
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        mysql 依赖版本为
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
             </dependency>
        -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>

2.编写MyBatis核心配置文件

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=123456
<?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>

    <!--引入外部 db.properties-->
    <properties resource="db.properties"/>


    <settings>
        <!--输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--开启驼峰命名转换-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--显示开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    
    <!--引入别名typeAliases-->
    <typeAliases>
        <!--方式一-->
        <typeAlias type="com.gh.pojo.User" alias="user"/> <!--建议-->
        <!--方式二:扫描包下的类以类名的首字母小写作为类的别名-->
        <package name="com.gh.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
    <mappers>
        <!--方式一: 推荐-->
        <mapper resource="com/gh/dao/UserMapper.xml"/>

        <!--
            都要求:
                1.接口和mapper 必须同名
                2.接口和mapper 必须 在同一包下
        -->
        <!--方式二-->
<!--        <mapper class="com.gh.dao.UserMapper"/>-->

<!--        &lt;!&ndash;方式三&ndash;&gt;-->
<!--        <package name="con.gh.dao"/>-->


    </mappers>
</configuration>

3.创建MyBatis工具类

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用mybatis创建sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    public static SqlSession getSqlSession(){
        return  sqlSessionFactory.openSession();
        //    return  sqlSessionFactory.openSession(true); 自动提交事务
    }
}

4.Maven资源配置

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

测试

    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }

容易产生的问题:

1.配置文件没有注册

org.apache.ibatis.binding.BindingException: Type interface com.gh.dao.UserMapper is not known to the MapperRegistry. 

解决方法:

    <!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
    <mappers>
        <mapper resource="com/gh/dao/UserMapper.xml"/> 此时是/ 不是 .
    </mappers>

2.maven资源问题

Could not find resource com/gh/dao/UserMapper.xml

解决方法

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

3.绑定接接口错误

4.方法名不对

5.返回类型不对

生命周期和作用域

生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的并发问题

Mybatis三个核心接口

SqlSessionFactoryBuilder:

  • 一旦创建了 SqlSessionFactory,就不再需要它了

  • 局部变量

SqlSessionFactory:

  • 说白了就是可以想象为 :数据库连接池

  • SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。

  • 因此 SqlSessionFactory 的最佳作用域是应用作用域。 application

  • 最简单的就是使用单例模式或者静态单例模式。

SqlSession

  • 连接到连接池的一个请求!

  • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

  • 用完之后需要赶紧关闭,否则资源被占用!

关于@Param() 注解

  • 基本类型的参数或者String类型,需要加上

  • 引用类型不需要加

  • 如果只有一个基本类型的话,可以忽略,但是建议大家都加上!

  • 我们在SQL中引用的就是我们这里的 @Param() 中设定的属性名!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gh-xiaohe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值