MyBatis01:MyBatis介绍及实现增删改查

什么是Mybatis?

​ MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

优点

  1. ​与JDBC相比,减少了50%的代码量
  2. 最简单的持久化框架,简单易学
  3. SQL代码从程序代码中彻底分离出来,可以重用
  4. 提供XML标签,支持编写动态SQL
  5. 提供映射标签,支持对象与数据库的ORM字段关系映射

缺点:

  1. ​SQL语句编写工作量大,熟练度要高
  2. 数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很大的差异

1、创建普通的maven项目

2、导入相关的依赖

	<dependencies>
        <!--1、mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--2、连接mysql需要数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        <!--3、测试类-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <!--4、log4j打印日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
    
	<!--可能出现问题说明:Maven静态资源过滤问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

3、创建数据库

CREATE TABLE `emp` (
  `empno` int(10) NOT NULL,
  `ename` varchar(20) DEFAULT NULL,
  `job` varchar(20) DEFAULT NULL,
  `mgr` int(10) DEFAULT NULL,
  `hiredate` varchar(20) DEFAULT NULL,
  `sal` int(10) DEFAULT NULL,
  `comm` int(10) DEFAULT NULL,
  `deptno` int(10) DEFAULT NULL,
  PRIMARY KEY (`empno`),
  KEY `FK_DEPTNO` (`deptno`),
  CONSTRAINT `FK_DEPTNO` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

在这里插入图片描述

4、创建实体类

public class Emp {

    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hiredate;
    private Integer sal;
    private Integer comm;
    private Integer deptno;
    //无参、有参,set、get、toString

5、创建数据源db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://8.131.84.120:3306/demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username=root
password=root

6、配置文件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>
    
    <!--
    	引入外部配置文件,类似于Spring中的property-placeholder
    	resource:从类路径引入
    	url:从磁盘路径或者网络路径引入
    -->
    <properties resource="db.properties"/>

	<!--用来控制mybatis运行时的行为,是mybatis中的重要配置-->
    <settings>
        <!--设置字段和属性映射的时候是否是驼峰标识,例如 字段userName和user_name-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--类型别名-->
    <typeAliases>
        <typeAlias type="com.lian.pojo.Emp" alias="emp"/>
    </typeAliases>
	
	<!--
    在实际的开发过程中,我们可能分为开发环境,生产环境,测试环境等等,每个环境的配置可以是不一样的
    environment就用来表示不同环境的细节配置,每一个环境中都需要一个事务管理器以及数据源的配置
    我们在后续的项目开发中几乎都是使用spring中配置的数据源和事务管理器来配置,此处不需要研究
    -->
    
    <!--default:用来选择需要的环境-->
    <environments default="development">
    	<!--id:表示不同环境的名称-->
        <environment id="development">
            <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>
    
	<!--将sql的映射文件适用mappers进行映射-->
	<!--每一个dao都需要配置映射,有3种方式,class、resource、url--> 
    <!--
        指定具体的不同的配置文件
        class:直接引入接口的全类名,可以将xml文件放在dao的同级目录下,并且设置相同的文件名称,同时可以使用注解的方式来进行相关的配置
        url:可以从磁盘或者网络路径查找sql映射文件
        resource:在类路径下寻找sql映射文件
    -->
    <!--
        当包含多个配置文件或者配置类的时候,可以使用批量注册的功能,也就是引入对应的包,而不是具体的配置文件或者类
        但是需要注意的是,
        1、如果使用的配置文件的形式,必须要将配置文件跟dao类放在一起,这样才能找到对应的配置文件.
           如果是maven的项目的话,还需要添加以下配置,原因是maven在编译的文件的时候只会编译java文件
                <build>
                    <resources>
                        <resource>
                            <directory>src/main/java</directory>
                        <includes>
                            <include>**/*.xml</include>
                        </includes>
                    </resource>
                    </resources>
                </build>
        2、将配置文件在resources资源路径下创建跟dao相同的包名
    -->
    <mappers>
        <mapper class="empDao"/>
    <!--<mapper resource="empDao.xml"/>-->
    </mappers>

</configuration>

7、dao层

package com.lian.dao;

import com.lian.pojo.Emp;
import org.apache.ibatis.annotations.Param;

public interface EmpDao {

    Integer addEmp(Emp emp);
    Integer delEmp(@Param("empno") Integer empno);
    Integer updateEmp(Emp emp);
    Emp queryByEmpno(@Param("empno") Integer empno);

}

8、empDao.xml dao实现层

<?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.lian.dao.EmpDao">

    <select id="queryByEmpno" resultType="com.lian.pojo.Emp">
        select * from emp where empno = #{empno}
    </select>

    <insert id="addEmp" parameterType="com.lian.pojo.Emp">
        insert into emp(empno,ename) values(#{empno},#{ename})
    </insert>
    
    <update id="updateEmp" parameterType="com.lian.pojo.Emp">
        update emp set ename = #{ename} where empno = #{empno}
    </update>
    
    <delete id="delEmp" parameterType="int">
        delete from emp where empno = #{empno}
    </delete>

</mapper>

9、配置log4j日志

# 全局日志配置
log4j.rootLogger=INFO, stdout
# MyBatis 日志配置
log4j.logger.com.lian=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

10、测试类

import com.lian.dao.EmpDao;
import com.lian.pojo.Emp;
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 myTest {

    /**
     * 根据全局配置文件创建出SqlSessionFactory
     * SqlSessionFactory:负责创建SqlSession对象的工厂
     * SqlSession:表示跟数据库建议的一次会话
     */
    @Test
    public void test1(){
        String resource = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory =null;
        SqlSession sqlSession = null;
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 获取数据库的会话
            sqlSession = sqlSessionFactory.openSession();
            // 获取要调用的接口类
            EmpDao mapper = sqlSession.getMapper(EmpDao.class);
            // 调用方法开始执行
            Emp emp = mapper.queryByEmpno(7369);
            System.out.println(emp);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭会话
            sqlSession.close();
        }
    }

    //添加,增删改操作一定要提交事务
    @Test
    public void test2() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpDao mapper = sqlSession.getMapper(EmpDao.class);
        Integer integer = mapper.addEmp(new Emp(1,"dan"));
        System.out.println(integer);
        sqlSession.commit();
        sqlSession.close();
    }

    //修改
    @Test
    public void test3() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpDao mapper = sqlSession.getMapper(EmpDao.class);
        Integer integer = mapper.updateEmp(new Emp(1,"蛋"));
        System.out.println(integer);
        sqlSession.commit();
        sqlSession.close();
    }

    //删除
    @Test
    public void test4() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmpDao mapper = sqlSession.getMapper(EmpDao.class);
        Integer integer = mapper.delEmp(1);
        System.out.println(integer);
        sqlSession.commit();
        sqlSession.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值