MyBatis 配置文件记录

概念 

  将数据库表中记录的数据查询出来,并封装成一个实体类的对象。
  SqlSession代表和数据库的一次会话,是用openSession对象实现的,用完必须关闭,释放资源。
  SqlSession和connection一样都是非线程安全的,每次使用都应该获取新的对象。
  mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。

1  初级的mybatis

  拥有两个配置文件:全局配置文件 和 映射文件,必须创建mybatis环境。这里用IDEA创建maven项目,只需要在相应的POM文件中写入maven依赖即可。

1.1  pom.xml文件中添加相应依赖

<dependencies>
<!--mybatis依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
<!--mysql驱动依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.7.6</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-api</artifactId>
        <version>5.3.2</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
<!--这个插件,将应用打包成一个可执行的jar包-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

1.2  全局配置文件 mybatis.xml

  在此映射文件中,只需要指定输入参数类型,返回结果参数类型,sql语句等就差不多了,也就是将原本jdbc所遇到的硬编码问题全部是使用xml配置文件来替代。以下是一个简单的示例。

1.2.1  全部 MyBatis 的配置元素

  MyBatis 配置 XML 文件的层次结构。这些层次是不能够颠倒顺序的,如果颠倒顺序,MyBatis 在解析 XML 文件的时候就会出现异常了。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--配置-->
    <properties/><!--属性-->
-------------------------------------------------------------------------
    <settions/><!--设置-->
        属性:mapUnderscoreToCamelCase
        是否开启自动驼峰命名规则(camel cass)映射。
        即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射
        例如:数据库列名为U_NAME,则Java属性名为uName
    数据库表中的字段名称下划线后面的第一个字母,与Java属性名的第一个大写字母相同
    例如:
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
-------------------------------------------------------------------------
    <typeAliases><!--别名处理器,为某一个类型命名,不区分大小写-->
        <!-- 配置别名role,它代表com.learn.po.Role -->
        <typeAliase alias="role" type="com.learn.po.Role"/>
        <package name="com.zzfan.framework.entiey"/>
        name:指定包名
        可以为当前包以及下面所有的包中的每一个类起默认别名
        默认别名是类名的全小写
        package标签写在typeAliases标签中
    </typeAliases>
        <!--
            起好的别名用在映射文件中
            写sql语句的标签的resultType parameterType等标签中
        -->

-------------------------------------------------------------------------
    <typeHandlers/><!--类型处理器-->
-------------------------------------------------------------------------
    <objectFactory/><!--对象工厂-->
-------------------------------------------------------------------------
    <plugins/><!--插件-->
-------------------------------------------------------------------------
    <environments><!--配置环境-->
    <!-- mybatis可以配置多种环境 -->
        <environment>
        id:当前环境的唯一标识,便于多种开发环境切换
        <!-- 必须有以下两个标签 -->
            <transactionManager/><!--事务管理器-->
            <dataSource/><!--数据源-->
        </environment>
    </environments>
    <!-- 有如下示例 -->
    <environments default="development">
    <!-- 通过更改default来改变当前环境,达到快速切换的目的 -->
        <environment id="development" >
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            ...
            <!-- 当前环境用于测试,用到该环境时,只需要修改default的值 -->
        </environment>

</environments>
-------------------------------------------------------------------------
    <databaseIdProvider/><!--数据库厂商标识-->
        type属性:得到数据库厂商标识(驱动自带)
        mybatis就能根据数据库厂商标识执行不同的sql

        <!-- 为不同的数据库厂商起别名 -->
        <properties name="MySQL" value="mysql">
        然后在映射文件的标签如<select>等有一个databaseId属性,写其对应的别名
-------------------------------------------------------------------------
    <mappers/><!--映射器-->
    每一个mapper标签都注册一个标签,四种方式加载映射文件
    1,2注册配置文件 3注册接口
    1. <mapper resource="映射文件地址"/>
        引用类路径下的sql映射文件,使用相对路径,相对于项目下的。
        "mybatis/mybatis-config.xml"
    2. <mapper url=""/>
        使用绝对路径或者网络路径,一般不用。
        "file:///var/mappers/AuthorMapper.xml"
    3. <mapper class=""/>
      A:接口的全限定名:包括类名以及接口的名称在内的全类名
        使用mapper接口的全限定名让mybatis通过全限定名称自己找映射文件
        前提:mapper接口的名称必须与映射文件名称相同,并放到同一目录下
      B:没有sql映射文件,在接口方法上使用注解
        @select("select * from tbl_employee where id = #{id}")
    4. <package name=""/>
        注册指定包下的所有映射文件
        注意:mapper接口的名称必须与映射文件名称相同,并放到同一目录下
-------------------------------------------------------------------------
</configuration>

1.2.2  配置文件示例

<?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) -->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="zzf940227"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 写好的sql映射文件一定要注册到全局配置文件中 -->
    <mappers>
        <mapper resource="mapper/EmployeeMapper.xml"/>
    </mappers>
</configuration>

1.2.3 引入外部数据库配置信息

  引用db.properties中的信息,将上述配置信息中的dataSource标签中的内容进行如下修改。

# 引用外部数据库文件
         <dataSource type="POOLED">
             <!-- 引用db.properties中的信息,通过${} -->
             <property name="driver" value="${db.driver}"/>
             <property name="url" value="${db.url}"/>
             <property name="username" value="${db.username}"/>
             <property name="password" value="${db.password}"/>
         </dataSource>

# db.properties文件配置信息
db.driver = com.mysql.cj.jdbc.Driver
db.url = jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=utf8&aserverTimezone=GMT
db.username = root
db.password = zzf940227

# 导入properties文件
<properties resource = "db.properties">

1.3  映射文件操作  xxxMapper.xml
# xxxrMapper.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">
<!--namespace:名称空间,随便起(也别太随便),一般是该文件的全限定名
    id:唯一标识
    resultType:返回值类型(对应的应该是表相应的实体类)
    #{id}:从传递过来的参数中取出ID值
-->
<mapper namespace="mapper.xxxMapper">
    <select id="selectEmpid" resultType="com.zzfan.test.Mybatis.Employee">
        查询操作,这里写sql语句,下面的是示例。
    </select>
    <insert id="insertid" parameterType="com.zzfan.test.Mybatis.User">
        添加操作
    </insert>
    <delete id="deleteid" parameterType="com.zzfan.test.Mybatis.Employee">
        删除操作
    </delete>
    <update id="deleteid" parameterType="com.zzfan.test.Mybatis.Employee">
        更新操作
    </update>
--------------------------------------------------------------------
    <!-- resultMap最终还是要将结果映射到pojo上, -->
    <!--
        type:指定映射到哪一个pojo
        id:  设置ResultMap的id
    -->
    <resultMap type="order" id="orderResultMap">
        <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
        <!-- property:主键在pojo中的属性名 -->
        <!-- column:主键在数据库中的列名 -->
        <id property="id" column="id" />
        <!-- 定义普通属性 -->
        <result property="userId" column="user_id" />
        <result property="number" column="number" />
        <result property="createTime" column="create_time" />
        <result property="note" column="note" />
    </resultMap>
--------------------------------------------------------------------
</mapper>

2 DAO接口方式

  在开发中,都是开发DAO接口和DAO实现类,然后再DAO实现类中调用sqlsession的方法对数据库进行增删改查操作。

2.1 DAO接口

# xxxDao.java
package com.zzfan.framework.dao;

import com.zzfan.framework.entity.Employee;

/**
 * 这个接口就是用来查出Employee,记录数据,并封装成Employee对象
 */
public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
}

2.2  DAO接口实现类

# xxxDaoImpl.java
public class UserDaoImpl implements UserDao{
    private SqlSessionFactory ssf;
    public UserDaoImpl(SqlSessionFactory ssf) {
        this.ssf = ssf;
    }
    public User findUserById(int id) {
        SqlSession ss = ssf.openSession();
        return ss.selectOne("test.findUserById", id);
    }
    public void insertUser(User user){
        ...
    };
}

2.3  DAO方式下的映射文件

# 部分内容进行修改
# mapper标签的namespace属性一般指定为接口的全限定名
<mapper namespace="com.zzfan.framework.dao.EmployeeMapper">
<!-- select标签的id就是接口的getEmpById()方法 -->
    <select id="getEmpById" resultType="com.zzfan.framework.entity.Employee">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

2.4  测试

public class MybatisTest {

    @Test
    public void test() throws IOException {
        // 1、读取配置文件
        String resource = "mybatis/mybatis-config.xml";
        // 2、获取SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 3、获取sqlSession实例,能直接执行已经映射的sql语句
        SqlSessionFactory sqlSessionFactory =
            new SqlSessionFactoryBuilder().build(inputStream);
        EmployeeMapper employeeMapper = new EmployeeMapperImpl(sqlSessionFactory);
        Employee employee = employeeMapper.getEmpById(1);

    }
}

补充

全局配置文件的标签顺序

properties
settings
typeAliases
typeHandlers
objectFactory
objectWrapperFactory
reflectorFactory
plugins
environments
databaseIdProvider
mappers

原文地址:https://www.cnblogs.com/zzfan/p/11091361.html

时间: 2024-07-31 11:21:48

MyBatis 配置文件记录的相关文章

mybatis学习记录

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibat

MyBatis配置文件(一)――properties属性

MyBatis配置文件中有很多配置项,这些配置项分别代表什么,有什么作用,需要理一下了.先通过下面这个例子来看都有哪些配置项 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3

mybatis学习记录------2

一  单条记录查询 上篇博客的例子便是单条记录查询 二 多条记录查询 1 在映射文件中加入如下sql查询,${}:表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中,${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value. <!--根据名称查找记录,可能返回多条记录 resultType:指定就是单条记录所映射的java对象类型 ${}:表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中. 使用${}拼接sql,容易引起sql注入 ${value

spring+springmvc+mybatis配置文件

最近在学习SSM,自己上手了一个crm项目,这两天对底层配置文件做了个总结. sqlmapconfig.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&qu

spring(一)--spring/springmvc/spring+hibernate(mybatis)配置文件

这篇文章用来总结一下spring,springmvc,spring+mybatis,spring+hibernate的配置文件 1.web.xml 要使用spring,必须在web.xml中定义分发器等信息,基本的配置信息如下: <?xml version="1.0" encoding= "UTF-8"?> <web-app version= "3.0" xmlns="http://java.sun.com/xml/n

MyBatis 配置文件基本结构

一.MyBatis 配置文件基本结构 在使用mybatis框架时,首先导入其对应的jar包,并进行相应的配置,所以得对配置文件的每个参数都得了解.一个完全的mybatis配置文件结构如下: [html] view plain copy <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/

MyBatis——配置文件

mybatis配置文件 转载:http://loveshisong.cn/mybatis/2015/01/20/MyBatis(%E4%BA%8C)%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6.html MyBatis 的配置文件即mybatis-config.xml中的configuration标签下有settings.properties等属性.本文对其中常用属性的配置做简单介绍 本文结构 properties 属性 typeAliases 类型别名 typeHa

Spring/Maven/MyBatis配置文件结合properties文件使用

使用properties文件也叫注入,比如把一些常用的配置项写入到这个文件,然后在Spring的XML配置文件中使用EL表达式去获取. 这种方式不只Spring可以使用,同样MyBatis也可以使用,只不过加载的方式不一样,但是获取值同样是EL表达式.具体的参考官方文档. properties语法参考:https://zh.wikipedia.org/wiki/.properties,注意转移字符. Spring: 本次使用的例子来自这章http://www.cnblogs.com/EasonJ

web项目通过listener直接加载Mybatis配置文件

首先,webxml中配置listener,并配置配置文件的路径作为参数 <!-- 初始化mybatis配置文件路径 --> <context-param> <param-name>mybatisConfigLocation</param-name> <param-value>com/config/configuration.xml</param-value> </context-param> <!-- 初始化Sess