MyBatis的使用一(框架的搭建)

Posted zwgitOne123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis的使用一(框架的搭建)相关的知识,希望对你有一定的参考价值。

本文主要讲述如何快速使用mybatis

一. MyBatis的下载

  MyBatis框架下载网站:Releases · mybatis/mybatis-3 (github.com)

  下载好之后,文件目录如下:

  打开mybatis-3.5.10.pdf,mybatis的使用手册,进行mybatis的搭建

二. MyBatis的安装与配置

1. 创建项目

  步骤一:

  

  步骤二:选择Maven项目

  

  步骤三:创建项目名

  

  初始目录如下:

  

  java包:用于编写java程序,resources包:用于存放配置文件,test包:用于测试编写好的java程序

2. 引入MyBatis框架

  在pom配置文件中

  

  添加dependency依赖

<dependencies>
    <!-- Mybatis核心 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</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>8.0.28</version>
        </dependency>

        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

3. 项目架构

  一. com.hspedu包的结构如下:

  

  1. mapper包:用于存放接口类

  XXxxMapper接口类,接口类中声明对数据库中数据的处理方法

  

  UserMapper接口类的声明如下:

public interface UserMapper 
    // 添加user
    // public void
    int insertUser();

    // 修改user
    int updatePwdById();

    // 删除user
    int deleteUser();

    // 查询单行数据
    User getUserSingle();

    // 查询多行数据
    ArrayList<User> getUserAll();

  2. pojo包:用于存放实例

  

   User类的声明如下:

public class User 
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String gender;
    private String email;

    public User() 
    

    public User(Integer id, String username, String password, Integer age, String gender, String email) 
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.gender = gender;
        this.email = email;
    
............

  注意:实例对象,一定要有无参构造器,因为反射机制,resultSet结果集--反射-->实例对象--封装-->集合。

  可以看看这篇博客:DAO数据访问对象 - zwGitOne - 博客园 (cnblogs.com)

  3. utils包:用于存放工具类

  

  SqlSessionUtils类,连接数据库,声明如下:

/**
 * 获得sqlSession对象,用于执行sql语句
 */
public class SqlSessionUtils 
    private static SqlSession sqlSession;

    public static SqlSession getSqlSession()
        try 
            // 1.获取核心配置文件的输入流
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis_config.xml");
            // 2.获取sqlSessionFactoryBuilder执行sql语句
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 3.创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
            // 4.获取sqlSession
            //      SqlSession sqlSession = sqlSessionFactory.openSession(true); 自动提交事务
            sqlSession = sqlSessionFactory.openSession(true);
         catch (IOException e) 
            throw new RuntimeException(e);
        
        return sqlSession;
    

    public static boolean closeSqlSession()
        if(sqlSession != null)
            sqlSession.close();
            return true;
        
        return false;
    

  mybatis-config.xml的讲解在后面,请耐心观看。

  二. resource包结构如下:

  

   1. mybatis_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>
    <!--配置信息的顺序-->
    <!--The content of element type "configuration" must match "(
    properties?,settings?,typeAliases?,typeHandlers?,
    objectFactory?,objectWrapperFactory?,reflectorFactory?,
    plugins?,environments?,databaseIdProvider?,mappers?)".-->

    <!--引入jdbc.properties数据库配置文件-->
    <!--使用配置信息 $key-->
    <properties resource="jdbc.properties" />


    <typeAliases>
        <!--对指定类型设置别名-->
        <!--<typeAlias type="com.hspedu.pojo.User" alias="User" />-->

        <!--对指定类型设置默认别名,即类名,不区分大小写-->
        <!--<typeAlias type="com.hspedu.pojo.User" />-->

        <!--在pojo包中设置默认别名,即pojo的类名-->
        <package name="com.hspedu.pojo"/>

    </typeAliases>

        <!--environments 环境配置
            default:默认环境配置
        -->
    <environments default="development">
            <!--environment 数据库连接
                id:唯一标识
            -->
        <environment id="development">
            <!--transactionManager 事务管理配置
            type:事务管理方式类型
            jdbc 原生jdbc模式
            managed 被管理模式【Spring】
            -->
            <transactionManager type="JDBC"/>
            <!--dataSource 数据源配置
                type:数据源类型
                POOLED 使用数据连接池
                UNPOOLED 不使用数据连接池
            -->
            <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>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="zw20010108"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入mybatis的映射文件,执行sql语句的xml文件-->
    <mappers>
        <!--以xml单个文件的方式绑定mapper.xml文件-->
        <!--<mapper resource="mappers/UserMapper.xml"/>-->
        
        <!--以包的方式绑定mapper.xml文件-->
        <!--注意:1.package的name必须与mapper接口所在的包名保持一致;
             2.XXxx.xml文件的名称与mapper接口的名称保持一致-->
        <package name="com.hspedu.mapper"/>
    </mappers>
</configuration>

  总结:① 配置信息标签的顺序;

     ② 当使用properties文件,即 <properties resource="jdbc.properties" />,此时在dataSource标签中,配置数据库的信息中的value用$key来指明;

     ③ 在给指定类型取别名,即 <typeAliases></typeAliases>,简化XXxxMapper.xml中查询语句的resultType的书写

       方式1:<typeAlias type="com.hspedu.pojo.User" alias="User" />,type阐明实体类的位置,alias取别名

       方式2:<typeAlias type="com.hspedu.pojo.User" />,默认用user或者User命名实体类

       方式3:<package name="com.hspedu.pojo"/>,指明实体类所在的包,默认用类名命名实体类

     ④ 绑定XXxxMappper.xml文件,即<mappers></mappers>,用于提供数据库的连接,执行sql语句

       方式1:<mapper resource="mappers/UserMapper.xml"/>,绑定单个xml文件【注意是在resource中找XXxxMapper.xml文件,因此用 / 】

       方式2:<package name="com.hspedu.mapper"/>,绑定com/hspedu/mapper文件夹下的所有xml文件

       注意方式2中package的name必须与mapper接口所在的包名一致;根据name,在resources下创建相应的文件夹时,应该用 / 作为分隔符。

  2. jdbc.properties数据库信息如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
jdbc.username=root
jdbc.password=zw20010108

  3. mappers包结构如下

  

  UserMapper.xml文件,用于编写sql语句

<?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.xml要与mapper接口保持两个一致
    1. mapper的namespace和mapper接口的路径保持一致
    2. mapper的sql标签中的id要与mapper接口的方法保持一致
-->
<mapper namespace="com.hspedu.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser" >
        insert into t_user values(null,\'Tom\',\'tom123\',20,\'男\',\'tom@123\');
    </insert>

    <!--int updatePwdById()-->
    <update id="updatePwdById" >
        update t_user set password = \'$123\' where id = 4;
    </update>

    <!--int deleteUser()-->
    <delete id="deleteUser" >
        delete from t_user where id = 8;
    </delete>

    <!--User getUserSingle()-->
    <!--在查询过程中,需要指明返回类型 resultType-->
    <select id="getUserSingle" resultType="User">
        select * from t_user where id = 10;
    </select>

    <!--ArrayList<User> getUserAll()-->
    <select id="getUserAll" resultType="User">
        select * from t_user;
    </select>
</mapper>

  注意:这里的mappers包的UserMapper.xml与mybatis-config配置文件中的<mapper resource="mappers/UserMapper.xml"/>相对应。

  总结:① XXxxMapper.xml的名称要与XXxxMapper接口保持一致;

     ② XXxxMapper.xml中的标签 id 名称要与XXxxMapper接口中定义的方法保持一致。

     ③ 在使用select标签时,需要指明返回类型,

       注意:在没有使用typeAliases标签的情况下,返回类型resultType = "实体类所在包名 . 实体类名称";

          当使用了typeAliases标签,返回类型resultType = 别名名称。

   4. resources中com.hspedu.mapper包的结构如下

  

  注意:resources中com.hspedu.mapper包与<package name="com.hspedu.mapper"/>相对应。

 

以上是关于MyBatis的使用一(框架的搭建)的主要内容,如果未能解决你的问题,请参考以下文章

搭建一个简单的mybatis框架

Spring+SpringMvc+Mybatis框架集成搭建教程一(背景介绍及项目创建)

搭建MyBatis框架

电商项目实战——SpringBoot+MyBatis搭建基本骨架

SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建

MyBatis(一) —— 环境搭建