Mybatis学习笔记Ⅰ

系列文章目录
Mybatis学习笔记Ⅱ
Mybatis缓存机制



一、Mybatis是什么

  MyBatis是一个优秀的持久层框架(ORM),它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
  Mybatis通过xml或注解的方式将要执行的各种statement(statement、 preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql 进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二、Mybatis架构

在这里插入图片描述

1. mybatis 配置 mybatis-config.xml,此文件作为 mybatis 的全局配置文件,配置了 mybatis 的运行环境等信息。
mapper.xml 文件即 sql 映射文件,文件中配置了操作数据库的 sql 语句。此文件需要在 mybatis-config.xml 中加载。
2.通过 mybatis 环境等配置信息构造 SqlSessionFactory 即会话工厂。
3.由会话工厂创建 sqlSession 即会话,操作数据库需要通过sqlSession 进行。
4.mybatis 底层自定义了 Executor 执行器接口操作数据。库.Executor 接口有两个实现,一个 是基本执行器、一个是缓存执行器。
5.Mapped Statement 也是 mybatis 一个底层封装对象,它包装了 mybatis 配置信息及 sql 映射信息等。mapper.xml 文件中一个 sql 对应一个 Mapped Statement 对象,sql 的 id 即 是 Mapped statement 的 id。
6.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor 通过 Mapped Statement 在执行 sql 前将输入的 java 对象映射至 sql 中,输入参数映射就 是 jdbc 编程中对 preparedStatement 设置参数。
7.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor 通过 Mapped Statement 在执行 sql 后将输出结果映射至 java 对象中,输出结果映射过程 相当于 jdbc 编程中对结果的解析处理过程。

二、Mybatis入门

示例程序(Maven)

1.创建项目

创建maven项目及构建对应目录
在这里插入图片描述

2.pom.xml文件中加入对应依赖

在这里插入图片描述

3.配置log4j日志

resources下创建log4j.properties 配置文件(打印运行时sql语句)
在这里插入图片描述

4.配置 mybatis-config.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">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/*?characterEncoding=utf-8"/>
                <property name="username" value="*"/>
                <property name="password" value="*"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

5.编写pojo类

lombok

@Data
public class Department {
  private Integer deptid;
  private String deptname;
  private Integer deptuserid;
  private String deptusername;
  private String deptdesc;
  private Integer deptstate;
  }

6.编写 mapper.xml

resources/mapper下创建DepartmentMapper.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">
<mapper namespace="DepartmentMapper">
    <select id="selectDepartment"
            resultType="com.etime.pojo.Department"
            parameterType="com.etime.pojo.Department"
            >
            select * from department where deptstate = #{deptstate}
    </select>
    <insert id="insertDepartment"
            parameterType="com.etime.pojo.Department">
        insert into department(deptname,deptuserid,deptusername,deptdesc,deptstate)
        values (#{deptname},#{deptuserid},#{deptusername},#{deptdesc},#{deptstate})
    </insert>
    <select id="selectDepartmentByName"
            resultType="com.etime.pojo.Department"
            parameterType="java.lang.String">
            select * from department where deptname like '%${value}%'
    </select>
</mapper>

7. mybaits-config.xml 中引入 mapper 文件

    <mappers>
        <mapper resource="mapper/DepartmentMapper.xml"/>
    </mappers>

8.编写 dao 执行 sql 语句

public class DepartmentDao {
    public List<Department> selectDepartment(Department department) throws IOException {
        SqlSessionFactory factory = createSqlSessionFactory();
        SqlSession session = factory.openSession();
        List<Department> list = session.selectList("DepartmentMapper.selectDepartment", department);
        return list;
    }

    public int insertDepartment(Department department) throws IOException {
        SqlSessionFactory factory = createSqlSessionFactory();
        SqlSession session = factory.openSession();
        int rtn = session.insert("DepartmentMapper.insertDepartment", department);
        session.commit();
        return rtn;
    }

    public Department selectDepartmentByName(String deptname) throws IOException {
        SqlSessionFactory factory = createSqlSessionFactory();
        SqlSession session = factory.openSession();
        Department department = session.selectOne("DepartmentMapper.selectDepartmentByName", deptname);
        return department;
    }

    private SqlSessionFactory createSqlSessionFactory() throws IOException {
        SqlSessionFactory sessionFactory = null;
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sessionFactory;
    }
}

9.编写测试类

public class App {
    public static void main(String[] args)  {
        ListDepartment();
    }

    private static void ListDepartment(){
        DepartmentDao departmentDao = new DepartmentDao();
        Department department = new Department();
        department.setDeptstate(1);
        List<Department> list = null;
        try {
            list = departmentDao.selectDepartment(department);
        } catch (IOException e) {
            e.printStackTrace();
        }
        for(Department d : list){
            System.out.println(d.toString());
        }
    }

    private static void InsertDepartment(){
        DepartmentDao departmentDao = new DepartmentDao();
        Department department = new Department();
        department.setDeptname("测试1");
        department.setDeptuserid(1);
        department.setDeptusername("1");
        department.setDeptdesc("测测测1");
        department.setDeptstate(1);
        int rtn = 0;
        try {
            rtn = departmentDao.insertDepartment(department);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (rtn == 0) {
            System.out.println("添加失败");
        }else {
            System.out.println("添加成功");
        }
    }

    private static void SelectDepartmentByName() {
        DepartmentDao departmentDao = new DepartmentDao();
        Department department = null;
        try {
            department = departmentDao.selectDepartmentByName("一部");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(department.toString());
    }
}

控制台结果如下:

//log4j日志
Opening JDBC Connection
Created connection 873610597.
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@34123d65]
==>  Preparing: select * from department where deptname like '%一部%'
==> Parameters: 
<==    Columns: deptid, deptname, deptuserid, deptusername, deptdesc, deptstate
<==        Row: 1, 一部, 5, 朔月, undefined, 1
<==      Total: 1
//输出结果
Department{deptid=1, deptname='一部', deptuserid=5, deptusername='朔月', deptdesc='undefined', deptstate=1}

总结

初学mybatis,对其的原理、架构等有了一个基本的了解。使用原始的写法编写了一个入门程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值