首页 > 技术文章 > Mybatis

zhouchangyang 2019-05-30 20:29 原文

 

一.MyBatis简介.

    MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

 

二.MyBatis快速入门.

  1.在mevn库导入mybatis包和mysql包

 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.6</version>
    </dependency>

2.在main文件夹下创建resources文件并标记为资源文件,在该文件夹下创建mybatis的配置文件(mybatis-config.xml).

  XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。

<?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="dev">
        <environment id="dev">
            <!--配置事务管理器-->
            <transactionManager type="JDBC"/>
            <!--配置数据源的类型为链接池类型-->
            <dataSource type="POOLED">
                <!--配置数据库-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/zcy?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="357159"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

 

3.加载mybatis配置文件.

从 SqlSessionFactory 中获取 SqlSession,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 对象来直接执行已映射的 SQL 语句
public void init() throws IOException {

        //读取成输入流,注意为ibatis.io包下的
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = sessionFactory.openSession();
}

4.创建一个接口,.通过这个接口连接数据库查询.

   在项目的包下创建一个专门用来装接口的包mapper.

package com.lanou.demo.mapper;
import com.lanou.demo.bean.OrderBean;
import java.util.List;

public interface OrderMapper {
    
    //查询所有
    List<OrderBean> findAll();
    List<OrderBean> findDetails();
}

5.创建实体类映射数据库的数据.

package com.lanou.demo.bean;

import java.util.List;

public class OrderBean {

    private Integer orderId;
    private String orderCode;
    private Integer userId;

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderId(Integer orderId) {
        this.orderId = orderId;
    }

    public String getOrderCode() {
        return orderCode;
    }

    public void setOrderCode(String orderCode) {
        this.orderCode = orderCode;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

 
}

 

6.资源文件夹下创建mapper的xml配置文件,这个文件相当于实现了上面接口的类,用来写sql语句.

 注意:这个xml文件要跟接口在相同路径的包下,比如我的接口创建在java文件下的com.lanou.demo.mapper包下,

         那么这个xml文件对应的路径为resources资源文件下的com.lanou.demo.mapper包下.这样编译后接口和xml文件才会在同一个路径下

         在resources文件下创建包要用"/",创建文件夹,起名为:com/lanou/demo/mapper 创建后会自动变为包:com.lanou.demo.mapper

然后在mapper中创建对数据库操作的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">

<!--命名空间,当前的mapping文件的唯一标识-->
<!--namespace指明这是实现的接口的路径--> <mapper namespace="com.lanou.demo.mapper.OrderMapper">
<!--sql语句-->
<!--id是对应接口中的方法,名字要保持一致  resultType表示该sql语句返回的结果集类型,比如这里是OrderBean实体类类型-->
<select id="findAll" resultType="com.lanou.demo.bean.OrderBean">
  select order_id,order_code,user_id,
us.user_id ,us.username
from tb_order
</select>

<!--如果接口方法中有参数,也就是按条件对数据库操作时
  参数使用#{}的形式来获取
里面的变量名有规则:如果接口中的方法参数只有一个,并且类型都是值类型
那么这个名起什么都可以.
如果接口中传递的参数是一个对象,那么每一条属性都是一个参数
获取参数的时候,{}里面必须写的是属性的名字
-->
<select id="findOne" resultType="com.lanou.demo.bean.UserBean">
select * from user where uid = #{uid}
</select>
 
</mapper>

7.在mybatis-config.xml配置文件中引入mapper的配置文件.把下面代码添加到mybatis配置文件的<configuration>标签里

   <!--引入所有的xml文件-->
<mappers> <!--引入方式--> <!-- <mapper class="com.lanou.demo.mapper.UserRepository"/>
--> <!--批量引入Mapper文件--> <package name="com.lanou.demo.mapper"/> </mappers>

8.通过 SqlSession 实例来直接执行已映射的 SQL 语句,通过接口得到一个接口的实例

public void init() throws IOException {

        //读取成输入流,注意为ibatis.io包下的
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
        //从 SqlSessionFactory 中获取 SqlSession,
        // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
        SqlSession session = sessionFactory.openSession(); // 通过 SqlSession 实例来直接执行已映射的 SQL 语句 
//通过接口得到一个接口的引用
OrderMapper orderMapper = session.getMapper(OrderMapper.class);
//调用口中的方法去xml文件中找到对应的sql语句
List
<OrderBean> all = orderMapper.findAll(); }

 

推荐阅读