Mybatis

最简单的用Mybatis实现对数据库表的增删改查,内容详细,初学者可以快速实现功能.

Mybatis介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

Mybatis特点

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  • 解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql

Mybatis配置过程

1.添加必要的jar包

添加到pom.xml

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.2</version>
    </dependency>
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.40</version>
    </dependency>

添加到pom.xml的<build>标签中

<resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
2.添加config.xml

添加到resource文件夹下

java mybatis plus 数据库不释放_数据库

这个配置文件中,所有的标签都有严格的顺序

<environments default="${env_choosen}">
        <environment id="deve">
            <transactionManager type="JDBC"></transactionManager>
            <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>

自动读取mapper包下的所有xml文件

<mappers>
        <mapper resource="com/lanou/mapper/StudentMapper.xml"/>
 <package name="com.lanou.mapper"/>
3.与config.xml对应的db.properties

java mybatis plus 数据库不释放_持久层框架_02

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

env_choosen=deve
4.定义实体类

实体类的属性和表的字段名称一一对应

数据库表:

java mybatis plus 数据库不释放_mybatis_03

实体类:

java mybatis plus 数据库不释放_数据库_04

5.定义操作实体类表的接口xxxMapper

java mybatis plus 数据库不释放_java_05

定义操作数据库的方法

  • 增加(两种添加方法)
void insertStu(Student student);
void insertStudent(@Param("sname") String name);
  • 删除(根据id删除)
void delStu(@Param("sid") Integer id);
  • 更改
void updateStu(Student student);
  • 查询
  • 查询所有
List<Student>findAllStudent();
  • 按id查询

java
List<Student>findById(@Param("id") Integer id);

6.定义操作表的sql映射文件XXXMapper.xml

java mybatis plus 数据库不释放_mybatis_06

SQL语句写在mapper标签中(namespace 一般写对应接口的路径)

<mapper namespace="com.lanou.mapper.StudentMapper">

MyBatis的结果映射
当实体类的属性名和数据库表的列名不一致的情况下,
需要使用结果映射来确保数据的一致性

column:数据库表的列名

property:实体类的属性名

java
<resultMap id="BaseMap" type="com.lanou.bean.Student">
<id column="id" property="id"/>
<result column="name" property="name"/>
</resultMap>

  • 增加(两种添加方法)
<insert id="insertStu" parameterType="com.lanou.bean.Student">
        INSERT INTO student VALUES (NULL ,#{name})
    </insert>
<insert id="insertStudent">
        INSERT INTO student VALUES (NULL ,#{sname})
    </insert>
  • 删除(根据id删除)
<delete id="delStu" parameterType="com.lanou.bean.Student">
        DELETE FROM student WHERE id =(#{sid})
    </delete>
  • 更改
<update id="updateStu">
        UPDATE student SET name=#{name} WHERE id=#{sid};
    </update>
  • 查询
  • 查询所有
<select id="findAllStudent" resultMap="BaseMap">
SELECT <include refid="Column_List"/> FROM student;
</select>
  • 按id查询

java
<select id="findById" resultMap="BaseMap">
SELECT * FROM student WHERE id = #{id}
</select>

7.创建test类测试代码

从 XML 中构建 SqlSessionFactory

  • 加载config文件
String re = "config.xml";
        InputStream stream = Resources.getResourceAsStream(re);
  • 创建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
  • 生产sqlSession对象
SqlSession session = factory.openSession();
  • 获取mapper对象
xxxMapper mapper = session.getMapper(xxxMapper.class);
  • 调用方法获取结果
  • 增加
Student stu = new Student();
    stu.setName("zhaoliu");
    mapper.insertStu(stu);
    session.commit();
    session.close();
mapper.insertStudent("wangwu");
session.commit();
session.close();
  • 删除
mapper.delStu(1);
session.commit();
session.close();
  • 更改
mapper.updateStu(stu);    
   session.commit();
  session.close();
  • 查询
  • 查询所有
List<Student> studentList = mapper.findAllStudent();
System.out.println(studentList);
  • 按id查询
List<Student> studentList = mapper.findById(1);
   System.out.println(studentList);

8.总结

最后的结构视图

java mybatis plus 数据库不释放_数据库_07


通过以上操作可以简单实现对数据库表的增删改查.