MyBatis基础环境搭建(使用idea,meven)

MyBatis基础环境搭建(使用idea,meven)

1.MyBatis 简介

在这里插入图片描述
作为持久层的框架,还有一个封装程度更高的框架就是Hibernate,但这个框架因为各种原因目前在国内的

流行程度下降太多,现在公司开发也越来越少使用。目前使用 Spring Data 来实现数据持久化也是一种趋势。

​ mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,

而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中

sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象返回。

​ 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我

们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

2.分析JDBC 编程的中存在的问题

2.1.原生态JDBC程序代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test
{
    public static void main(String[] args)
    {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try
        {
            //1、加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、通过驱动管理类获取数据库链接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");
            //3、定义sql语句 ?表示占位符
            String sql = "select * from user where username = ?";
            //4、获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "admin");
            //6、向数据库发出sql执行查询,查询出结果集
            resultSet = preparedStatement.executeQuery();
            //7、遍历查询结果集
            while (resultSet.next())
            {
                System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            //8、释放资源
            if (resultSet != null)
            {
                try
                {
                    resultSet.close();
                }
                catch (SQLException e)
                {

                    e.printStackTrace();
                }
            }
            if (preparedStatement != null)
            {
                try
                {
                    preparedStatement.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
            if (connection != null)
            {
                try
                {
                    connection.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}

2.2、JDBC问题总结

(1)数据库连接频繁开启和关闭,会严重影响数据库的性能。

(2)代码中存在硬编码,分别是数据库部分的硬编码和SQL执行部分的硬编码。

3.Mybatis框架开发的准备

jar包下载地址 :mybatis-x.x.x.jar

这里使用 Maven 来构建项目,在 pom.xml 文件中添加 Mybatis的坐标

<dependencies> 
    <dependency> 
        <groupId>org.mybatis</groupId> 
        <artifactId>mybatis</artifactId> 
        <version>3.5.1</version>
	</dependency> 
    <dependency>
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.12</version> 
        <scope>test</scope>
	</dependency> 
    <dependency> 
        <groupId>mysql</groupId> 
        <artifactId>mysql-connector-java</artifactId> 
        <version>8.0.16</version>
	</dependency> 
    <dependency> 
        <groupId>log4j</groupId> 
        <artifactId>log4j</artifactId> 
        <version>1.2.12</version>
	</dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
    </dependency>
</dependencies>

3.1.编写User实体类

//为实体类添加get,set方法以及重新toString方法等等,来自lombok   jar
@Data
public class User implements Serializable {
	private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
}

3.2.编写持久层接口UserMapper

UserMapper 接口就是我们的持久层接口(也可以写成 UserDao)

public interface IUserDao {
    
    /**
    * 查询所有用户
    * @return
    */
    List<User> findAll();
}

3.3.编写持久层接口的映射文件UserMapper.xml

映射文件一般存放位置有两个:

  1. 直接放在dao包内,因为也是持久化相关的
    在这里插入图片描述

这样放会出现一种问题,idea不会将源代码包下的其他类型文件编译,执行时就会抛出找不到Mapper.xml文件的异常
在这里插入图片描述

解决方案:在pom.xml文件中添加一段代码如下:

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

作用就是将src/main/java目录下的所有文件夹及子文件夹的所有xml文件统统编译到classes目录下

  1. 放在resources资源文件夹,这种方式不会出现之前的问题,因为资源文件夹下编译资源文件很合理啊,

    注意:创建位置:必须和持久层接口在相同的包中。
    名称:必须以持久层接口名称命名文件名,扩展名是.xml
    在这里插入图片描述
    注意:在resources中建包一定不能使用一下方式
    在这里插入图片描述
    ​ 到文件资源管理器中你会发现,它变成了一个文件夹
    在这里插入图片描述
    ​ 正确建包方式应该为

在这里插入图片描述
​ 结果
在这里插入图片描述
​ 有人可能会问变成一个文件夹会怎么样,首先违背了你一开始的意愿,所以编译后这个包就和它原本应该在的位置分道扬镳了

你一开始想要的长这样
在这里插入图片描述
结果却是这样
在这里插入图片描述
代码

<?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="com.liao.mapper.UserMapper">

    <!--id 写对应接口的对应方法名称,resultType 写返回类型的全限定类名-->
    <select id="findAll" resultType="com.liao.pojo.User">
        select * from user
    </select>

</mapper>

3.4.编写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>

    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <mapper resource="com.liao.mapper/UserMapper.xml"/>
    </mappers>

</configuration>

3.5.编写测试类

public class MybatisTest {

    @Test
    public void m1() throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //2.创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory factory = builder.build(in);
        //4.使用 SqlSessionFactory 生产 SqlSession 对象
        SqlSession session = factory.openSession();
        //5.使用 SqlSession 创建 dao 接口的代理对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //6.使用代理对象执行查询所有方法
        List<User> users = userMapper.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        //7.释放资源
        session.close();
        in.close();
    }
}

4.小结

通过快速入门示例,使用 mybatis 是非常容易的一件事情,因为只需要编写 Dao 接口并且按照 
mybatis 要求编写两个配置文件,就可以实现功能。远比我们之前的 jdbc 方便多了。(我们使用注解之后,将变得 更为简单,只需要编写一个 mybatis 配置文件就够了。) 

5.基于注解的mybatis使用(入门)

5.1.在持久层接口中添加注解

public interface UserMapper {
    /**
    * 查询所有用户
    * @return
    */
    @Select("select * from user")
    List<User> findAll();
}

5.2.修改 mybatis-config.xml

    <!-- 告知 mybatis 映射配置的位置 --> 
    <mappers> 
        <mapper class="com.liao.dao.UserMapper"/>
    </mappers>

5.3.注意事项

在使用基于注解的 Mybatis 配置时,请移除 xml 的映射配置(UserMapper.xml)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值