mybatis入门

15 篇文章 0 订阅
9 篇文章 0 订阅

学习JDBC,是学习数据库连接的基础。在实际开发中,通常使用框架进行。mybatis就是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。

以Idea为例,新建一个maven项目。

首先,添加相关依赖:pom.xml。这里收藏一个网址:mvn依赖查询

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.damu.mybatis</groupId>
    <artifactId>mybatis-pro</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>
    </dependencies>
    
</project>

这里添加了mybatis和mysql依赖。

生成的目录结构中,根目录--src--main--resources文件夹。resources文件夹中存放的是配置文件。

其中,重要的文件是:配置xml文件。这里官方文档(当下载mybatis时压缩包中有pdf文档,位于:2.1.2 Building SqlSessionFactory from 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>

    <!--properties配置,用于加载外部的properties配置文件-->
    <properties resource="db.properties"></properties>

    <!--environemnts主要用于数据源的配置,可以配置多个数据源。
        通过default属性来指定当前项目运行过程中使用的是哪个数据源
    -->
    <environments default="development">
        <!--environment用于配置一个独立的数据源
            id属性用于给当前的数据源定义一个名称,方便我们项目指定
        -->
        <environment id="development">
            <!--
                transactionManager用于配置事务管理。默认使用JDBC事务管理。
            -->
            <transactionManager type="JDBC"/>
            <!--
                dataSource指定具体数据源的链接信息。type属性用于指定是否使用连接池。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

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

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

    <!--
        mappers主要用于配置外部的映射配置文件
        在主配置中需要引入加载映射配置文件
    -->
    <mappers>

        <!--
            mapper主要配置引入某一个具体的映射配置文件。resource指映射文件的路径
         -->
        <mapper resource="mapper/usersMapper.xml"/>
    </mappers>
</configuration>

其中提到了peoperties。properties文件在学习数据库时提到过,他是键值对组成的Java配置文件。当项目复杂事,直接在xml配置文件中写数据库类、用户名、密码等不太方便。使用properties文件进行配置,再引入进来。方便后期的修改。在项目路径下可见,我们配置的properties文件也在resources文件夹下。db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456

至于其他具体项目的含义,见代码注释。

mappers用来引入外部的映射配置文件,在resources文件夹下建mapper文件夹,外部映射xml文件位于其中。

我们建立了Users类。这里配置相应的外部映射文件usersMappers.xml。(这个pdf文档也有提供示例。位于:2.1.5:Exploring Mapped SQL Statements章节)

<?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值命名空间,主要用来进行session级别的缓存管理
    命名空间默认情况使用当前操作类的全路径
-->
<mapper namespace="com.damu.entity.Users">
    <!--
        select是配置查询语句。id属性便于调用。resultType是返回的结果类型。
        此类型中的数据和数据库中的字段名称一一对应。如果不对应,需要进行自定义配置resultMap。
        而resultType属性和resultMap标签只能出现一个。如果不对应,这里的属性变为:
        resultMap="forUsers"
        这些都是MyBatis封装好的接口
    -->
    <select id="findAll" [resultType="com.damu.entity.Users"或者resultMap="forUsers"]>
        select * from users
    </select>

    <select id="findById" resultType="com.damu.entity.Users">
        select * from users where id = #{id}
    </select>

    <!--自定义映射关系集合:使不对应变为对应。如数据库字段和目标类属性
        resultMap和上面的resultType不能同时出现!!!
    -->
    <resultMap id="forUsers" type="com.damu.entity.Users">
        <!--比如数据库中使用username普通字段,而Users中使用name属性。
            如下的配置让它们强制对应。求同存异嘛-->
        <result column="username" property="name"></result>
        <!--如果是数据库中的主键字段和目标类的属性不对应,需要如下配置-->
        <!--比如数据库主键id与类属性iid强制对应-->
        <id column="id" property="iid"></id>
    </resultMap>
</mapper>

配置好以后,使用Mybatis进行数据库的操作:

初始化MyBatis配置环境:

    1:创建配置文件的输入流:InputStream is = Resources.getResourcesAsStream("主配置路径");

    2:创建SqlSessionFactory:SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

    3:打开和数据库之间的会话:SqlSession session = factory.openSession();

    4:执行:List<Users> list = session.selectList("findAll");    这里的list是映射配置文件中配置的信息(上面的代码有体现),selectList()方法是执行查询的一种方法。

    如果要根据条件查询,还有selectOne(String s, Object o)方法。比如:Users users = session.selectOne("findById",5),就会查询id为5的记录。

上面出现了两条查询语句。实际开发过程中,可能更复杂。把各个语句都列出来是我们不愿意看到的。MyBatis提供了动态查询的语句。

<select id="findAll" resultType="com.damu.entity.Users">
    select * from users
    <if test="id != null">
        where id = #{id}
    </if>
</select>

这里就实现了一条查询语句实现多个功能,其他功能可以根据需要拓展。重要的一点是,动态查询语句使用session.selectOne(String s ,Object o)来调用时,不能直接传入一个值。比如此例中,再使用Users users = session.selectOne("findAll",5);就不行了。要使用:Users users = session.selectOne("findAll",new Users(id));来进行调用。具体原因不加深究。

需要提到的是,上面的四个步骤只是基本的操作,具体使用中根据需要进行封装等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值