Mybatis入门

目录

第一步:在mysql中创建一张user1表,并添加数据。

第二步:在Maven工程中pom.xml文件中导入坐标(即我们需要的依赖)

 第三步:编写Mybatis的核心配置文件--->替换连接信息,解决硬编码问题

 第四步:Resource目录下创建一个映射文件,我们取名为UserMapper.xml,内容一会写

第五步:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一个目录下

 现在我们要思考一个问题,Mapper接口在java代码块中,映射文件在Resource目录中,该怎么让他们在同一个目录下?

验证,查看target目录:

第六步:编写SQL映射文件,namespace属性的值设置为Mapper接口的路径

 第七步:我们可以编写代码了

核心配置文件的补充

        properties标签:加载外部的资源配置文件,properties标签在第一位

        settings标签

        typeAliases标签:起别名


我们要

使用Mapper代理方式完成Mybatis入门

第一步:在mysql中创建一张user1表,并添加数据。

create table user1
(
    id int primary key auto_increment,
    name varchar(20) not null,
    sex char default '男',
    address varchar(20)
);
insert into user1 (id, name, sex, address) VALUE (null,'小红','女','天津'),(null,'阿发','男','北京'),(null,'卡恩','男','海南'),
    (null,'阿福','女','山东');
select id, name, sex, address from user1;

在java代码中编写一个user1类与该表相对应

public class user1 {
    private Integer id;
    private String name;
    private String sex;
    private String address;

    public user1() {
    }

    public user1(Integer id, String name, String sex, String address) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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 "user1{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

第二步:在Maven工程中pom.xml文件中导入坐标(即我们需要的依赖)

这是完整的pom.xml文件,我们导入了Junit,Mysql,Mybatis依赖

<?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.hhh</groupId>
    <artifactId>maven_day1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

    </dependencies>


</project>

 第三步:编写Mybatis的核心配置文件--->替换连接信息,解决硬编码问题

在Maven工程中的Resource目录下创建一个名为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>
    <environments default="development">
        <!--设置默认的环境development,也可以配置多环境开发-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--使用mybatis自带的连接池POOLED-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射文件关联的参数-->
    <mappers>
       //相关参数一会写
    </mappers>
</configuration>

 第四步:Resource目录下创建一个映射文件,我们取名为UserMapper.xml,内容一会写

第五步:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一个目录下

Mapper接口创建在java代码块中

//dao层
public interface UserMapper {
    /**
     * 功能:查询所有用户数据
     * @return
     */
    public List<user1>  findAllUser();



}

 现在我们要思考一个问题,Mapper接口在java代码块中,映射文件在Resource目录中,该怎么让他们在同一个目录下?

我们要在Resource目录中创建一个目录:com/hhh/dao (使用"."的话,不是同一个目录,要使用"/")

然后把映射文件拖到Resource目录下的com.hhh.dao包

验证,查看target目录:

可以发现他们已经处于同一个目录 

第六步:编写SQL映射文件,namespace属性的值设置为Mapper接口的路径

id是Mapper接口里的方法名字,resultType就是封装的类型

在文本中写select语句

<?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.hhh.dao.UserMapper">

    <!--编写sql查询语句-->
    <select id="findAllUser" resultType="com.hhh.pojo.user1">/*返回的结果封装到user1对象*/
        select id, name, sex, address from user1
    </select>
    
    
</mapper>

 第七步:我们可以编写代码了

我们在java代码块中编写代码

 要使用的API

SqlSessionFactory:工厂类,就是为了创建SqlSession对象

SqlSession:和数据库交互的类(执行SQL语句)

大致步骤

1.加载核心配置文件,获取SqlSessionFactory对象

2.获取SqlSession对象

3.通过SqlSession的getMapper()方法获取Mapper接口的代理对象

4.调用代理对象的方法完成sql的执行

5.释放资源 

//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句),因为Mapper接口已经和xml文件处于同一个目录,且xml文件的namespace属性值是Mapper接口的路径(关联)

public class MybatisTest {
    @Test
    public void testFindAllUser() throws IOException {
        //核心配置文件路径
        String resource = "mybatis-config.xml";//核心配置文件

        //基于配置文件路径,创建字节输入流对象
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建SqlSessionFactory工厂类对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //利用工厂类,创建一个SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //利用SqlSession,创建一个代理类对象(注意,不是SqlSession被代理,是UserMapper类对象被代理)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //使用代理对象,调用方法查询用户数据
        List<user1> allUser = userMapper.findAllUser();
//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句)

        for (user1 u : allUser) {
            System.out.println(u);
        }

    }
}

 运行之前我们还要在核心配置文件中加载映射文件

<?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">
        <!--设置默认的环境development,也可以配置多环境开发-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--使用mybatis自带的连接池POOLED-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射文件关联的参数-->
    <mappers>
        <!--扫描mapper-->
        <mapper resource="com/hhh/dao/UserMapper.xml"/>
    </mappers>
</configuration>

结果:

核心配置文件的补充

配置文件中各个标签的顺序

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>      

        properties标签:加载外部的资源配置文件,properties标签在第一位

                属性:resource  指定要引入的外部配置文件路径

                在核心配置文件中,通过:${key}方式引入外部配置文件的数据key是键值对的键 

 我们重新在Resource目录下创建一个jdbc.properties文件,用来保存连接数据库的四大参数

这是jdbc.properties文件的内容

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysql_day2
jdbc.username=root
jdbc.password=123456

所以我们在核心配置文件中引入该文件

<?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 resource="jdbc.properties">

    </properties>

    <environments default="development">
        <!--设置默认的环境development,也可以配置多环境开发-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--使用mybatis自带的连接池POOLED-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>  //通过${key}访问
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射文件关联的参数-->
    <mappers>
        <!--扫描mapper-->
        <mapper resource="com/hhh/dao/UserMapper.xml"/>
    </mappers>
</configuration>

        settings标签

                防止数据库中有的字段名带有下划线,我们可以在settings标签中开启驼峰映射

<?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 resource="jdbc.properties">

    </properties>

    <!--开启驼峰映射:把数据表中名字带有下划线的字段名,变成驼峰命名格式,例如:user_name=>username或userName-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <environments default="development">
        <!--设置默认的环境development,也可以配置多环境开发-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--使用mybatis自带的连接池POOLED-->
            <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>
    </environments>
    <!--配置映射文件关联的参数-->
    <mappers>
        <!--扫描mapper-->
        <mapper resource="com/hhh/dao/UserMapper.xml"/>
    </mappers>
</configuration>

        typeAliases标签:起别名

                子标签:package

                                属性:name:指定扫描的包 

<typeAliases>
       <!-- <typeAlias type="com.hhh.pojo.user1" alias="user1"></typeAlias>-->
        <!--如果pojo包下有很多类,哪么要写很多行,我们换另一种方法-->

        <!--扫描指定的包,把包下的所有类,都起了别名。别名格式:全部小写或者和类名一致,就是把前面的包名去掉-->
        <package name="com.hhh.pojo"/>

    </typeAliases>

这样一来,在映射文件中,resultType的值就可以从com.hhh.pojo.user1改成user1了

<?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">

<!--映射文件-->

<!--利用username把当前映射文件与Mapper接口关联-->
<mapper namespace="com.hhh.dao.UserMapper">

    <!--编写sql查询语句-->
    <select id="findAllUser" resultType="user1">/*返回的结果封装到user1对象*/
        select id, name, sex, address from user1
    </select>


</mapper>

        mappers标签:提供了关联加载映射文件的配置功能;

                使用方式:

1.先加载xml映射文件,再通过映射文件取关联Mapper接口

<mapper resource="UserMapper.xml"/> 从resource下加载映射文件

说明:如果项目基于xml的开发模式,建议使用方式1

2.加载接口,再通过接口关联映射文件

条件:1.接口名和映射文件名保持一致 2.路径保持一致

批量加载class:<package name="接口在的包路径">   

说明:如果基于注解开发的话,使用方式2            

  <!--配置映射文件关联的参数-->
    <mappers>
        <!--扫描mapper-->
        <!--<mapper resource="com/hhh/dao/UserMapper.xml"/>-->
        
        <!--指定要扫描的所有Mapper接口的包路径-->
        <package name="com.hhh.dao"/>
        
    </mappers>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落落落sss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值