mybatis入门案例

稻草人      2022-02-11     795

关键词:

  1. mybatis简介
  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
  • 在mybatis的文件中,提供了一个pdf文档,全英文版的,这里有个中文版的文档http://www.mybatis.org/mybatis-3/zh/index.html

  2. 入门案例

  • 环境准备:博主用的mybatis版本是mybatis-3.4.1、MySQL5.7、jdk1.8。
  • 首先在数据库中建一个表

  

  • 建立一个对应的java类
public class Student {

    private int studentID;
    private String studentName;
    private String studentSex;

    public int getStudentID() {
        return studentID;
    }

    public void setStudentID(int studentID) {
        this.studentID = studentID;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentSex() {
        return studentSex;
    }

    public void setStudentSex(String studentSex) {
        this.studentSex = studentSex;
    }
}
  •  新建一个全局的配置文件,在src下 mybatis-config.xml;配置了一些数据库连接的信息,还有配置了另外一个mappers,studentMapper.xml是针对student的增删改查的SQL配置。这里提供了两种方式配置。第一种是直接把连接数据库的信息放在全局的mybatis-config.xml中;另外一种是将数据库的连接信息放到另外一个properties配置文件中,再在mybatis-config.xml中引用。
  1. 第一种,把连接数据库的信息放在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/test" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 注册studentMapper.xml文件, studentMapper.xml位于com.test.bean这个包下,所以resource写成com/test/bean/studentMapper.xml -->
        <mapper resource="com/test/bean/studentMapper.xml" />
    </mappers>
</configuration>

  2.把连接数据的信息放在db.properties中,在mybatis-config.xml中引用db.properties; 新建一个db.properties,和mybatis-config.xml在同一目录。内容如下:

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

  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>

<!-- 导入db.properties -->
    <properties resource="db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <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>
        <!-- 注册studentMapper.xml文件, studentMapper.xml位于com.test.bean这个包下,所以resource写成com/test/bean/studentMapper.xml -->
        <mapper resource="com/test/bean/studentMapper.xml" />
    </mappers>
</configuration>

 

  •  新建一个studentMapper.xml,这个配置文件的内容是配置SQL,并且配置输入输出类型;这里配置的SQL都是通用的,比较灵活,会有一些占位符{# } (这种方式是通过占位符的方式将参数传入SQL语句)和{$ }(这种写法是进行SQL的字符串拼接,可能会导致SQL注入)
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 -->

<mapper namespace="com.test.bean.studentMapper">
    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getStudent,id属性值必须是唯一的, 不能够重复 
        使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="com.test.bean.Student"
        表示将查询结果封装成一个User类的对象返回 
        User类就是users表所对应的实体类 -->
    <!-- 根据id查询得到一个student对象 -->
    <select id="getStudent" parameterType="int" resultType="com.test.bean.Student">
        select *
        from tb_student where studentID=#{id}
    </select>

    <!-- 通过姓名模糊查询,返回结果可能为多个,但是这里的结果类型还是对应一个Java类 -->
    <select id="findStudentByName" parameterType="java.lang.String" resultType="com.test.bean.Student">
        select * from tb_student where studentName like #{value}
    </select>
    
    <!-- 插入一条记录 , 如果tb_student中的主键是自增的,那这里就不用管主键,系统会自动分配-->
    <insert id="insertStudent" parameterType="com.test.bean.Student">
        insert into tb_student (studentName,studentSex) values(#{studentName},#{studentSex})
    </insert>
</mapper>
  •  配置文件写完之后开始编码,读取配置文件,这里写了一个工具类,专门来读取全局的mybatis配置文件,并获取sqlsession
public class DBTools {
    public static SqlSessionFactory sessionFactory;

    static {
        try {
            // 使用MyBatis提供的Resources类加载mybatis的配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 构建sqlSession的工厂
            sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    // 创建能执行映射文件中sql的sqlSession
    public static SqlSession getSession() {
        return sessionFactory.openSession();
    }

}
  •  然后写一个DAO来实现基本的操作。值得注意的是这里的 String statement="com.test.bean.studentMapper.getStudent";// 映射sql的标识字符串 这里的字符串是和studentMapper.xml中配置的SQL语句是一一对应的,在配置文件中配置mapper的时候有一个namespace=" com.test.bean.studentMapper" 然后加上select的SQL对应的id,构成了这里的statement完整的字符串;
  • 在模糊查询部分,和其他的SQL不太一样,这里模糊查询可能会返回多条数据,前面在studentMapper.xml中已经配置了resultType="com.test.bean.Student" 返回的结果是单个的student对象,实际上是返回了一个结果集,但是每个单独的记录都是对应一个student,所以这里返回多条数据的时候resultType还是为单个的Java对象,但是问题又来了,如果结果是只返回了一条数据可以用list接收吗? 当然是可以的,这样list中就只有一个对象了;
  • 从下面的代码也可以看出,当结果是单条数据的时候,用得是session.selectOne()方法,而结果可能有多条的时候,用的是session.selectList();而且这里的模糊查询手动地在传入的参数前后各加了一个%来进行模糊匹配,从这里也可以很明显地感受到mybatis和hibernate的区别,mybatis给程序员非常大的空间让其设计SQL;
public class StudentDAO {

    // 通过ID查询student
    public void findStudentById(int studentID) {
        SqlSession session = DBTools.getSession();
        /**
         * 映射sql的标识字符串,
         * com.test.bean.studentMapper是studentMapper.xml文件中mapper标签的namespace属性的值,
         * getStudent是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
        String statement = "com.test.bean.studentMapper.getStudent";// 映射sql的标识字符串
        Student stu1 = session.selectOne(statement, 1);
        System.out.println(stu1.getStudentID() + "\n" + stu1.getStudentName() + "\n" + stu1.getStudentSex());
        session.close();
    }

    // 通过姓名模糊查询
    public void findStudentByName(String studentName) {
        SqlSession session = DBTools.getSession();
        String statement = "com.test.bean.studentMapper.findStudentByName";// 映射sql的标识字符串
        // 这里不能使用selectOne,因为返回的结构可能是多条
        List<Student> list = session.selectList(statement, "%" + studentName + "%");
        System.out.println(list.get(0).getStudentName());
        session.close();
    }

    // 插入一条学生信息
    public void insertStudent(Student student) {
        SqlSession session = DBTools.getSession();
        String statement = "com.test.bean.studentMapper.insertStudent";
        session.insert(statement, student);
        session.commit();
        System.out.println("插入成功");
        session.close();
    }
}

mybatis入门案例分析

mybatis入门案例分析一、设计模式分析publicclassMybatisTest{publicstaticvoidmain(String[]args)throwsException{//1.读取配置文件InputStreamin=Resources.getResourceAsStream("SqlMapConfig.xml");//2.创建SqlSessionFactor 查看详情

mybatis入门案例

mybatis简介MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs(PlainOldJavaObjects,... 查看详情

初识mybatis之入门案例

我也是自学了一下,在idea中基于maven的mybatis的配置。有什么不对的地方,请指正,谢谢。 1.1咋们先来配置测试一下,配置mybatis的图解: 1.2pom.xml需要mybatis的依赖节点,节点如下:1<dependencies>2<dependency>3<groupId&... 查看详情

mybatis入门(开发环境+入门案例)(代码片段)

Mybatis入门1.MyBatis入门1.1概述2下载3与JDBC对比4入门:搭建环境4.1构建项目4.2数据库和表:User5入门案例:查询所有5.1JavaBean:User5.2编写Dao:UserMapper5.3编写核心配置文件:SqlMapConfig.xml5.4测试类6总结1.MyBatis入... 查看详情

mybatis入门案例分享

本文分享一下,Mybatis的一些入门案例;为什么不用JDBC方式来操作数据库,而使用类似于Mybatis的框架呢?1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在Sq... 查看详情

mybatis入门案例

...ResultSet  Spring的JdbcTemplate:Spring中对JDBC的简单封装4、mybatis的环境搭建  第一步:创建maven工程并导入坐标(即在pom.xml文件中 查看详情

mybatis入门以及简单案例

  这两天学习了mybatis框架,实现了简单的curd功能.有好多技术这里没有用到,在这里我用的开发工具为idea,jdk版本为1.8.   mybatis分析大概如下:MyBatis有两类配置文件:a)mybatis-condig.xml,是MyBatis的全局配置文件,包含全局配置... 查看详情

mybatis入门案例——idea版

环境:IDEA2017,jdk1.8.0,maven3.5.2 步骤:1.创建一个普通Maven工程,删掉src目录,再创建一个maveb的model命名为mybatis-012.配置 pom.xml,注入依赖(导入所需的 jar 包)<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="ht 查看详情

1mybatis入门案例(代码片段)

...入坐标 第二步:创建实体类和dao的接口 第三步:创建Mybatis的主配置文件     SqlMapConifg.xml 第四步:创建映射配置文件     IUserDao.xml2 环境搭建的注意事项第一个:创建IUserDao.xml和IUserDao.java时名称是为了和我... 查看详情

mybatis入门案例超详细(代码片段)

...rMapper.xml映射文件添加查询语句3.测试方法4.运行结果二、MyBatis核心对象及工作流程1.MyBatis核心对象2.MyBatis工作流程3.使用SqlSession操作数据库三、添加其他常见方法1.Mybatis新增用户2.Mybatis用户更改3.Mybatis删除用户4.Mybatis根据用户id... 查看详情

mybatis框架入门小案例(关于用mybatis框架对数据库的增删改查)

...maven项目,建好相对应的包,在https://mvnrepository.com中导入MyBatis需要的依赖,复制到配置文件中  2.在resources文件下添加mybatis-config.xml文件和mapper文件夹,mybatis-config.xml是连接mysql的主要配置,mapper文件夹存放的是对数据库... 查看详情

[mybatisplus]入门案例(代码片段)

入门案例创建测试数据库和表CREATEDATABASE`mybatis_plus`/*!40100DEFAULTCHARACTERSETutf8mb4*/;use`mybatis_plus`;CREATETABLE`user`(`id`bigint(20)NOTNULLCOMMENT'主键ID',`name&# 查看详情

手撸mybatis从配置文件到读出数据库的模拟实现

手动模拟MyBatis入门案例的底层实现:需要了解的关键技术:java反射、动态代理(commingsoon)一、Mybatis入门案例点击此处跳过入门案例首先看一下MyBatis最基础的入门案例目标:读取数据库名为mybatis中的user表内容maven依赖:<depend... 查看详情

mybatis-plus入门教程及基本api使用案例

MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率-无侵入:只做增强不做改变,不会对现有工程产生影响-强大的CRUD操作:内置通用Mapper,少量配置即可实现单表CRUD操作-支持Lambda:编写查... 查看详情

mybatis快速入门

MyBatis​​一、MyBatis简介​​​​二、入门案例​​​​2.1安装Mybatis​​​​2.2通过xml构建SqlSessionFactory​​​​2.3从SqlSessionFactory中获取SqlSession​​​​2.4探究已映射的SQL语句​​​​2.5注解开发​​​​三、MyBatis-全局配置... 查看详情

intellijideamybatis入门案例(代码片段)

最近打算学习ssm框架 Mybatis作为入门的第一个持久层框架,学习起来实在费劲。故写此文章作为入门案例。先打开IDEA建立一个Maven项目,目录结构如下:源代码已经上传至GitHub https://github.com/Wo-com/mybatis_demo,需要的点击下... 查看详情

mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用](代码片段)

...查询总记录数4.2测试批量存储数据功能近期也是计划学习mybatis-plus,扩展知识;推荐官方文档食用学习–>https://baomidou.com/Mybatis-plus官方文档本次学习根据B站尚 查看详情

mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用](代码片段)

...查询总记录数4.2测试批量存储数据功能近期也是计划学习mybatis-plus,扩展知识;推荐官方文档食用学习–>https://baomidou.com/Mybatis-plus官方文档本次学习根据B站尚 查看详情