MyBatis入门笔记一

1.1MyBatis概述

MyBatis是数据访问层(Dao)层的框架,解决了JDBC的代码冗余,重复,不灵活等缺点,是一个SQL

Mapper For Java(SQL映射)框架,框架一般是jar包形式存在(包含各种配置文件)。

学习MyBatis之前,我们需要先了解ORM(对象关系映射)思想

O:java虚拟机中的对象
R:关系型数据库
M:将关系型数据库的内容关联到Java虚拟机中的对象的映射

在这里插入图片描述

2.1MyBatis开发环境配置及创建项目

新建项目之后,对idea进行相关设置,以下都需要注意一下
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

创建Maven项目

在这里插入图片描述
这里的maven项目建议不使用模板,直接点下一个
在这里插入图片描述
这样就把一个Maven项目创建好了
在这里插入图片描述
之后再在pom.xml配置文件中写入Mybatis相关的依赖

<dependencies>
	<!-- Mybatis核心 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.7</version>
	</dependency>
	<!-- junit测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
	<!-- MySQL驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.3</version>
		</dependency>
</dependencies>

再重新加载一下maven项目

2.2MyBatis核心配置文件

maven项目创建好之后,我们开始我们的MyBatis学习之旅,首先介绍MyBatis核心配置文件,Mybatis核心配置文件是一个Xml文

件,我们需要手动在主程序目录下的resources资源文件夹下新建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">
        <environment id="development">
<!--            jdbc事务管理方式-->
            <transactionManager type="JDBC"/>
<!--                使用数据库链接池-->
            <dataSource type="POOLED">
<!--                驱动名称-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--                数据库链接地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<!--                数据库用户名-->
                <property name="username" value="root"/>
<!--                密码-->
                <property name="password" value="1999"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

2.3MyBatis的Mapper接口和映射文件

Mybatis中的Mapper接口相当于dao(持久层),但是与之不同的是Mapper接口不需要提供实现类。

首先在数据库中创建一个t_user表

CREATE TABLE t_user(
	id INT AUTO_INCREMENT,
	userName VARCHAR(20) NOT NULL,
	psd VARCHAR(20) NOT NULL,
	age INT,
	sex CHAR,
	email VARCHAR(25),
	PRIMARY KEY(id)
)

再创建一个对应实体类,包括构造方法,set,get方法及toString方法

package com.yhg.pojo;

public class User {
    private int id;
    private char userName;
    private char psd;
    private int age;
    private char sex;
    private char email;

    public User(int id, char userName, char psd, int age, char sex, char email) {
        this.id = id;
        this.userName = userName;
        this.psd = psd;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public int getId() {
        return id;
    }

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

    public char getUserName() {
        return userName;
    }

    public void setUserName(char userName) {
        this.userName = userName;
    }

    public char getPsd() {
        return psd;
    }

    public void setPsd(char psd) {
        this.psd = psd;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

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

    public char getEmail() {
        return email;
    }

    public void setEmail(char email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName=" + userName +
                ", psd=" + psd +
                ", age=" + age +
                ", sex=" + sex +
                ", email=" + email +
                '}';
    }
}

实体类创建完成后,我们再来创建Mapper接口,mapper接口相当与dao(持久层),所以需要建一个专门存放mapper接口的

包,同时一张表对应一个mapper接口。mybatis之所以需要建mapper接口,是因为mybati会根据mapper

接口匹配相应的映射文件,

映射文件会将mapper的方法名作为id唯一标识来对数据库的增删改查,这样就实现了mapper-映射文件-

数据库,如何java对

象调用mapper接口中的方法,就实现了java对象-映射文件-数据库的一致关系,这就是ORM(对象关系映射)思想。

mybatis映射文件需要在rescources目录下,注意下,映射文件的命名最好是XXX+Mapper.xml,我这里以UserMapper.xml为例,由

于后面会有许多Mapper接口,所以为了后面开发的方便,最好在resources文件夹下,创建一个专门存放Mapper映射文件的文件

<?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中的参数为包名+mapper接口的名字-->
<mapper namespace="com.yhg.mapper.UserMapper">
    <!--对应于Mapper接口中的int insertUser();-->

    <insert id="insertUser">
m        insert into t_user values (null,'张三','123456',18,'男','zhangsan@qq.com')
	</insert>
</mapper>

mapper映射文件配置好之后,还需要修改mybatis配置文件中的映射。

<!--引入映射文件-->
   <mappers>
       <mapper resource="mappers/UserMapper.xml"/>
   </mappers>

2.4第一个Mybatis程序的增删查改

Mybatis核心配置文件配置好之后,我们需要在test目录下新建一个测试类来测试第一个mybatis程序的增删查改

①增加数据

首先在UserMapper接口中定义insertUser()方法,

 int insertUser();

再在mapper映射文件中定义插入表数据的语句,id的参数为mapper接口中的插入方法名

<!--    增加数据-->
    <insert id="insertUser">
        insert into t_user values (null,'张三','123456',18,'男','zhangsan@qq.com');
	</insert>

增加数据的测试类代码

package com.yhg;

import com.yhg.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatisTest {
    @Test
    public void mybatisTest() throws IOException {
        //加载核心配置文
        InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
        //获取sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder= new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
        //获取sqlSession对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //获取mapper接口对象
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);

        //测试功能
        int result=mapper.insertUser();
        //提交事务
        sqlSession.commit();
        System.out.println("result"+result);
    }
}

②删除数据

首先在UserMapper接口中定义deleteUser()方法,

int deleteUser();

再在mapper映射文件中定义删除表数据的语句,id的参数为mapper接口中的删除方法名

<!--    删除数据-->
    <delete id="deleteUser">
        delete from t_user where userName='张三'
    </delete>

测试类中调用mapper接口中的deleteUser()方法,然后mapper映射文件就会按照方法名作为id匹配相应的
③修改数据

首先在UserMapper接口中定义updateUser()方法,

int updateUser();

再在mapper映射文件中定义修改表数据的语句,id的参数为mapper接口中的修改方法名


   <!--    修改数据-->
    <update id="updateUser">
        update t_user set psd="111111" where userName='张三'
    </update>

④查询数据
首先在UserMapper接口中定义selectAllUser()方法,

User selectAllUser();

再在mapper映射文件中定义修改表数据的语句,id的参数为mapper接口中的查询方法名


    <!--查询所有数据-->
    <select id="selectAllUser" resultType="com.yhg.pojo.User">
        select * from t_user
    </select>

2.5测试项目的优化

①事务的自动提交功能

由于我们在测试项目中,每次执行sql语句,都需要手动提交事务,有些麻烦,这时我们就需要设置自动提交事务的方式

	SqlSession sqlSession=sqlSessionFactory.openSession(true);

②加入日志功能

我们每次执行项目的时候想观察执行的sql语句,我们需要加入日志功能调试,在pom.xml配置文件中导入日志功能的依赖

<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

然后创建日志依赖的配置文件,log4j.xml,注意日志依赖的配置文件必须存放在src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

里面的内容不需要更改,但是需要注意的是日志的级别:FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细

2.5MyBatis核心配置文件详解及相关概念(了解)

①enviroment标签

enviroment:设置多个链接数据库的环境

属性:default:设置默认使用的环境的id

enviroments标签:配置某个具体的环境

属性:id:设置某个具体环境的唯一标识

transactionManager标签:设置事务管理方式

属性:type=JDBC/MANAGED

JDBC:原生事务管理方式,事务的提交或回滚需要手动处理

MANAGED:被管理的事务方式,如Spring

②引入properties文件

在配置核心配置文件时,我们需要设置链接数据的一些信息,而且信息都比较长,不利于后期修改

 <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                数据库链接地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<!--                数据库用户名-->
                <property name="username" value="root"/>
<!--                密码-->
                <property name="password" value="1999"/>

为了简短后期开发方便我们可以导入properties文件。首先我们先新建一个存放链接数据库信息的properties文件,注意位置存放在resources文件夹下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=1999

之后我们在mybatis核心配置文件中引入properties文件

<!--    导入properties文件-->
    <properties resource="jdbc.properties"></properties>

再将链接数据库的信息的中的value值修改为properties文件中设置的键值对

 <property name="driver" value="${jdbc.driver}"/>
<!--                数据库链接地址-->
                <property name="url" value="${jdbc.url}"/>
<!--                数据库用户名-->
                <property name="username" value="${jdbc.username}"/>
<!--                密码-->
                <property name="password" value="${jdbc.password}"/>

③设置类型别名

我们在写mapper映射文件时,查询结果集时都需要设置resultType,而且值是包名加类名,有些时候会很长,为了后期开发简

便,我们可以在mybatis核心配置文件中设置类型别名

第一种方式:typeAliases标签

<!--    设置类型别名-->
    <typeAliases >
    <!--typeAlias:设置某个类型别名,type:需要设置别名的类型,alias:设置类型别名,注意alias的值不区分大小写,可默认不写,默认值为类名 -->
        <typeAlias type="com.yhg.pojo.User" alias="User"></typeAlias>
    </typeAliases>

第二中方式:package标签

 <typeAliases >
<!--        <typeAlias type="com.yhg.pojo.User" alias="User"></typeAlias>-->
<!--        package标签设置该包下的所有类的别名都为默认别名,即类名,且不区分大小写-->
        <package name="com.yhg.pojo"></package>
    </typeAliases>

之后我们把mapper映射文件中的resultType修改为设置的别名

 <select id="selectById" resultType="user">
        select * from t_user where id=2
    </select>

④mapper映射标签

在mybatis中,一张表对应一个mapper接口对应一个mapper映射文件,这个对应关系需要我们使用核心配置文件中的mppaer标签来设置,但是后面开发我们可能会有很多表,也就是会有很多mapper标签,为了简化后期开发,我们也可以使用package标签来链接这种对应关系,需要注意的是,在使用package标签时,我们要注意俩个原则1.mapper所在的包要和映射文件所在的包一致。2.mapper接口和映射文件接口一致
注意:在resourses文件夹下创建包是以斜线来创建的,然后把之前建的mapper映射文件全部放在这个包下,同时之前的Mappers文件夹也可以删除了。

<mappers>
        <package name="com.yhg.mapper"/>
    </mappers>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值