学习笔记:mybatis——配置文件以及代码参考

目录

什么是mybatis

本文开始:

理解要点:

其他资料:

正文开始

一、mybatis框架配置文件(xml)概述

1.mybatis基础配置文件结构(xml)

2.mapper映射文件(xml)

二、参考代码(非完全代码)

1.部分xml配置

1.1.mybatis基本配置文件 

1.2. mapper.xml部分配置文件

2.部分java代码

2.1 用户数据库操作接口

 2.2.实体类

2.3.测试代码


什么是mybatis

[百度百科]。

我个人的理解就是:这个框架的出现减少了我们在传统持久层的注册驱动、获得数据库连接、设置SQL语句、获得SQL对象、执行SQL语句到数据库、获得结果集、处理结果集、关闭数据库连接相关对象的繁杂步骤。让我们只需要在实际开发中专注于SQL语句,从而起到了提升开发效率的作用

本文开始:

  1. 本文系统环境:windows10 NT(1809)
  2. jdk环境:jdk8(默认) 、jdk11
  3. mybatis 描述版本:3.5.1
  4. 测试文末代码的基本jar包包括:mysql-connector-java-8.0.16.jar、mybatis-3.5.1.jar、junit-4.10.jar

理解要点:

编程中有个概念——不要重复写一样的代码。因为编程的工作应该更加专注于对业务的实现,而那些重复性的工作应尽量减少,重复性的写代码不仅浪费时间,而且没有意义(这也就是通常程序员自黑说的搬砖,搬砖并不能提升技能,只能固化思维)。所以这些具有重复开发部分的都应该被封装成一个方法、一个类或一个框架。

所以这里mybatis框架,就是为了解决开发过程中,一些对数据操作的持久层重复性工作做了一个封装。所以,从入门角度出发,mybatis执行过程:

  1. 编写配置文件(xml)
  2. mybatis读取配置文件(InputSteam)——整个项目只加载一次
  3. 实现配置构造器(SqlSessionFactory)——整个项目只加载一次
  4. 实现配置环境(SqlSessionFactory.bulid(inputSteam))——整个项目只需要加载一次,可重复使用
  5. 给出SQL会话(SqlSessionFactory.openSqlSession())——数据库操作基础
  6. SQL会话给出数据库操作代理类(SqlSession.getMapper(Dao.class))
  7. dao层方法执行方法([dao.insert,dao.select,dao.updata,dao.delete])
  8. SQL会话执行代理类做的操作(SqlSession.commit)
  9. SQL会话关闭(SqlSession.close())

其他资料:

正文开始

一、mybatis框架配置文件(xml)概述

1.mybatis基础配置文件结构(xml)

注:配置文件结构copy自官网

configuration(顶级标签,代表设置)

在xml中配置文件骨架(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">

<!--mybatis的主配置文件顶级标签-->
<configuration>
    <properties resource="fileName">
        <property name="key1" value="value1"/>
        <property name="key2" value="value2"/>
        ......
    </properties>
    <settings>
        <!--详情见官网-->
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#settings]
    </settings>
    <typeAliases>
        <!--详情见官网-->
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases]
    </typeAliases>
    <typeHandlers>
        <!--详情见官网-->
        [http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers]
    </typeHandlers>


    <!-- environments,这里的environment是复数,代表里面不止可以有一种配置,有个属性default代表
     使用的默认配置项id,默认项必填  -->
    <environments default="DeveloperConfig">
        <!--配置id为 [customConfig] 的配置环境-->
        <environment id="customConfig">
            <!--配置事物的类型-->
            <transactionManager type="[JDBC|]"/>
            <!--配置数据源类型-->
            <dataSource type="[unpooled|polled|jndi]">
                <!--配置数据源具体参数-->
                <property name="jdbcUrl" value="${key1}"/>
                <property name="username" value="${key2}"/>
                <property name="password" value="${keyn}"/>
                ......
            </dataSource>
        </environment>

        <!--配置id为[DeveloperConfig]的配置环境-->
        <environment id="DeveloperConfig">
               ......
        </environment>
    </environments>
    
        ......
        ......
        ......


    <!--    指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/xxxxx/dao/xxxxDao.xml"/>
    </mappers>

</configuration>

以上只是mybatis的基本配置环境,接下来才是涉及到开发者最应该熟悉文件——mapper.xml

2.mapper映射文件(xml)

配置mapper映射文件,基于基础配置文件的mappers标签中地址。因为在mybatis执行过程中涉及到读取配置文件的操作,所以,构建器会根据基础配置文件的mapper resource属性,根据其值中的文件路径查找到mapper映射文件,然后读取mapper映射文件构造dao代理类。所以配置mapper文件就等于在构建代理类的功能或模样啦。因此,在mapper文件中如何配置决定了代理类如何执行,有哪些功能,返回什么等等具有重复性质的操作。根据官网描述能节省95%代码,所以,对于一个大系统来说,这是非常具有意义的框架,有效提高了开发效率。至此,简单介绍一下mapper文件的结构

注:以下mapper.xml文件结构copy自官网

  • cache – 对给定命名空间的缓存配置。
  • cache-ref – 对其他命名空间缓存配置的引用。
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。文档中不会介绍此元素。
  • sql – 可被其他语句引用的可重用语句块。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句

那么mapper.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.xxxx.dao.xxxxDao">

    <!--以下代码大都来自官网-->

<!--dao代理类的有关查询的方法-->
    <select
      id="selectPerson"
      parameterType="com.xxxx.bean.xxx"
      parameterMap="deprecated"
      resultType="hashmap"
      resultMap="personResultMap"
      flushCache="false"
      useCache="true"
      timeout="10"
      fetchSize="256"
      statementType="PREPARED"
      resultSetType="FORWARD_ONLY">
        <!--查询的SQL语句-->
        select * form table_name where id = #{key}
    </select>

<!---dao代理类的有关插入的方法-->
    <insert
      id="insertAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      keyProperty=""
      keyColumn=""
      useGeneratedKeys=""
      timeout="20">
        <!--插入的SQL语句-->
            insert into tabelname values(value1,value2........);
    </insert>

<!--dao代理类的有关更新的方法-->
    <update
      id="updateAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">
        <!--更新的SQL语句-->
        update tabelnaem set key1=value1 , key2=value2.............
    </update>

<!--dao代理类的有关删除的方法-->
    <delete
      id="deleteAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">
        <!--删除的SQL语句-->
        delete tablename where key=value and .... and ....
    </delete>


</mapper>


除此之外,还有不少能减少代码的标签,这里不再一一介绍,mybatis提供的功能还是很强大的!

这里值得注意的是,在mapper.xml中如果有的方法涉及到参数,例如select 标签的属性parameterType,如果提供的参数是一个对象,那么mybatis将直接提取对象中的属性,我们在使用的时候就可以用 [#{}] 的形式直接提取对象中的属性到SQL语句中。而不需要 [对象.属性] 的形式去提取数据到SQL语句中,这样子还是升了不少代码,当然,如果对象中还嵌套A着另外的对象B,此时如果还需要使用对象A中的对象B的部分属性,就需要[B.属性],看起来很复杂,但是mybatis仍然让我们省了至少[对象.]吧。

二、参考代码(非完全代码)

1.部分xml配置

1.1.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">
<!--mybatis的主配置文件-->
<configuration>
    <!-- 默认配置环境 -->
    <environments default="DeveloperConfig">
        <!--配置id为DeveloperConfig的配置环境-->
        <environment id="DeveloperConfig">
            <!--配置事物的类型-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/dbname?useSSL=false&amp;characterEncoding=utf-8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="${passworld}"/>
            </dataSource>
        </environment>
    </environments>


    <!--    指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/xxxx/dao/xxxxDao.xml"/>
    </mappers>

</configuration>

1.2. mapper.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.xxxx.dao.xxxxxDao">

    <!--    插入新用户的方法-->
    <insert id="insertUser" parameterType="com.xxxx.bean.User">
        insert into user(`username`,`birthday`,`sex`,`address`)
        values
        (#{username},#{birthday},#{sex},#{address})
    </insert>
    <!--    通过传入的useridx删除用户-->
    <delete id="deleteById"  parameterType="int">
        delete from user where id =#{userid}

    </delete>
    <!--    查找所有用户的方法-->
    <select id="findAll" resultType="com.xxxx.bean.User">
        select * from user
    </select>

    <!--    通过用户id查找用户的方法-->
    <select id="findById" parameterType="int" resultType="com.xxxx.bean.User">
        select * from  user where id=#{userid}
    </select>
</mapper>

 

2.部分java代码

2.1 用户数据库操作接口


import com.itheima.domain.User;

import java.util.List;

/**
 * 用户信息操作接口
 * @Auther
 */

public interface UserDao {
    /**
     * 添加用户
     *
     * @param user
     * @return
     */
    int insertUser(User user);

    /**
     * 通过id删除用户
     *
     * @param userid
     * @return
     */
    int deleteById(int  userid);

    /**
     *
     * 查询所有方法
     * @return
     */
    List<User> findAll();

    /**
     *
     * 通过id查找用户
     * @param id
     * @return
     */
    User findById(int id);

}

 2.2.实体类

import java.io.Serializable;
import java.util.Date;

/**
 * 实体类
 */

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2.3.测试代码

/**
 * 这里只是一部分测试代码,不包含配置文件
 */
    SqlSessionFactory factory;
    SqlSession session;
    UserDao userDao;

    @Before
    public void createFactroy() throws IOException {
//2.加载配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//3~4.构建配置构建器,并给出会话工厂
        factory = new SqlSessionFactoryBuilder().build(in);
//5.会话工厂给出SQL会话
        session = factory.openSession();
//6.SQL会话给出代理数据库操作代理类
        userDao = session.getMapper(UserDao.class);
    }

    @After
    public void closeSession() {
//9.SQLsession会话关闭
        session.close();
    }

    @Test
    public void findUserById() {
//7.dao层执行方法
        User user = userDao.findById(41);
//8.session.commit(),这里只是涉及查询,所以没有事务,略
        System.out.println(user);
    }

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值