142_Java_SpringMybatis_配置文件

举报
alexsully 发表于 2021/08/22 13:43:14 2021/08/22
【摘要】 配置文件 mybatis-config.xml

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下

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>
    <!--  1 properties mybatis可以使用properties来引入外部properties配置文件的内容;
    resource:引入类路径下的资源
    url:引入网络路径或者磁盘路径下的资源
  -->

    <properties resource="mysqlconfig.properties"></properties>


    <!--  2 settings包含很多重要的设置项  setting:用来设置每一个设置项
        name:设置项名  value:设置项取值
        mapUnderscoreToCamelCase : 是否开启驼峰命名映射(数据库 A_COLUMN last_name  Javabean aColumn lastName )

 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!-- 3、typeAliases:别名处理器:可以为我们的java类型起别名 别名不区分大小写-->
    <typeAliases>
        <!-- a) typeAlias:为某个java类型起别名
                type:指定要起别名的类型全类名;默认别名就是类名小写;employee;  alias:指定新的别名
         -->
        <!-- <typeAlias type="com.alex.bean.Employee" alias="emp"/> -->

        <!-- b) package:为某个包下的所有类批量起别名
                name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))
        -->
        <package name="com.alex.bean"/>

        <!-- 3、批量起别名的情况下,使用@Alias注解为某个类型指定新的别名 -->

    </typeAliases>


    <!--4、environments:环境们,mybatis可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境。
        a) environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识
             a1) transactionManager:事务管理器;
                    type:事务管理器的类型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
                     自定义事务管理器:实现TransactionFactory接口.type指定为全类名

              a2) dataSource:数据源;
                    type:数据源类型;UNPOOLED(UnpooledDataSourceFactory)
                            |POOLED(PooledDataSourceFactory)
                            |JNDI(JndiDataSourceFactory)
                     自定义数据源:实现DataSourceFactory接口,type是全类名
     -->

    <environments default="dev_mysql">
        <environment id="dev_mysql">
            <transactionManager type="JDBC"></transactionManager>

            <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.password1}" />
            </dataSource>
        </environment>

        <environment id="dev_oracle">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${orcl.driver}" />
                <property name="url" value="${orcl.url}" />
                <property name="username" value="${orcl.username}" />
                <property name="password" value="${orcl.password}" />
            </dataSource>
        </environment>
    </environments>


    <!-- 5、databaseIdProvider:支持多数据库厂商的; type="DB_VENDOR":别名对应的类:VendorDatabaseIdProvider
         作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;
          MySQL,Oracle,SQL Server,xxxx
  -->
    <databaseIdProvider type="DB_VENDOR">
        <!-- 为不同的数据库厂商起别名 -->
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
        <property name="SQL Server" value="sqlserver"/>
    </databaseIdProvider>




    <!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
    <!--
    mapper:注册一个sql映射
        1 注册配置文件
            resource:引用类路径下的sql映射文件  resources/EmployeeMapper.xml
            url:引用网路路径或者磁盘路径下的sql映射文件
            file:///var/mappers/AuthorMapper.xml

        2 注册接口
        class:引用(注册)接口,
            1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
            2、没有sql映射文件,所有的sql都是利用注解写在接口上;
            推荐:
                比较重要的,复杂的Dao接口我们来写sql映射文件
                不重要,简单的Dao接口为了开发快速可以使用注解;
-->
    <mappers>
        <mapper resource="EmployeeMapper.xml" />

<!--        2 接口-->
        <mapper class="com.alex.dao.EmployeeMapperAnnotation"></mapper>
<!--        包扫描加载映射文件 : 接口类 和映射文件放在同一个目录下,并文件名要一致-->
        <!--   3 包下的批量注册   <package name="com/alex/dao"/>-->


    </mappers>

</configuration>

mysqlconfig.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8
jdbc.username=root
jdbc.password1=szc.2020

orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456

EmployeeMapper.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">

<!-- 1 传统方式, 制定全类目
namespace:名称空间;指定为接口的全类名
id:唯一标识; resultType:返回值类型;  #{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
 -->
<!--<mapper namespace="com.alex.mybatis.bean.Employee">-->

<!-- 2 接口方式: a) 接口和配置文件动态绑定  b) select id 与接口方法名对应getEmpById -->

    <mapper namespace="com.alex.dao.EmployeeMapper">

<!--    <typeAlias>  resultType 类名即可,别名不区分大小写-->
<!--    java bean 类上注解 @Alias("emp") 使用别名 ,此处resultType 可以用别名-->
<!--   resultType 优先推荐全类名,方便跳转  -->
<!--    databaseId 对应着 value 值 <databaseIdProvider type="DB_VENDOR"> <property name="MySQL" value="mysql"/>-->
    <select id="getEmpById" resultType="com.alex.bean.Employee" databaseId="mysql">
		select *  from tbl_employee where id = #{id}
	</select>
</mapper>

EmployeeMapper  &  EmployeeMapperAnnotation

public interface EmployeeMapper {
    public Employee getEmpById(Integer id);
}

public interface EmployeeMapperAnnotation {
    @Select("select * from tbl_employee where id=#{id}")
    public Employee getEmpById(Integer id);
}

@Alias("emp")
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email="
                + email + ", gender=" + gender + "]";
    }
}

测试

public class EmployeeMapperTest {

    @Test
    public void getEmpById() {
        SqlSession session = MybatisUtils.getSqlSession();
        System.out.println(session);
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        Employee employee = mapper.getEmpById(1);
        System.out.println(employee);
        session.close();
    }

    @Test
    public  void test2(){
        SqlSession session = MybatisUtils.getSqlSession();
        EmployeeMapperAnnotation mapper = session.getMapper(EmployeeMapperAnnotation.class);
        Employee employee = mapper.getEmpById(1);
        System.out.println(employee);
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。