mybatis简介以及快速入门

1.Mybatis简介(Mybatis官方网址:http://www.mybatis.org/mybatis-3/zh/)

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github,ibatis和MyBatis区别  2.3.5之前是ibatis之后是MyBatis

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

Hibernate与MyBatis

 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需要定义好了POJO到数据库表的映射关系,即可提供Hibernate提供的方法完成持久层操作。程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。

 iBATIS的着力点,则在于POJO与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。相对Hibernate"O/R"而言,iBATIS是一种“Sql Mapping”的ORM实现。


简单例子,快速入门

我用的是idea开发,下面详细介绍每一步

 

1.首先创建一个web项目,或者就maven项目也行

 

2.配置mybatis需要的依赖,要使用MyBatis,只需将mybatis -x.x.x.jar文件置于classpath中即可,如果使用maven来构建项目,则需将下面的dependcy代码置于pom.xnl文件中:

    <!--mybatis的核心依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.8</version>
    </dependency>
    <!--配置mysqljar包 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.37</version>
    </dependency>

 

3.编写一个jdbc.properties文件配置数据库

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

 

4.添加mybatis配置文件mybatis.cfg.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>
    <!-- 是mybatis的核心配置文件  数据库的连接信息(连接池) -->
    <properties resource="jdbc.properties"></properties>

    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClass}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射sql语句的地址-->
    <mappers>
        <!--映射文件方式一,一个一个的配置xml-->
        <mapper resource="mapper/demo01/FoodMapper.xml"/>

        <!-- 映射文件方式二,自动扫描包内的Mapper接口与配置文件 -->
        <!--<package name="mapper/demo01"/>-->
    </mappers>
</configuration>

 

 

5.编写一个实体类 对应数据库字段

package cn.et.demo01.model;

public class Food {
    private String id;
    private String name;
    private String price;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

 

6.创建一个接口类

package cn.et.demo01.mapper;

import cn.et.demo01.model.Food;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FoodMapper {
    /**
     * 添加
     * @param food
     * @return
     */
    int insertFood(@Param("food") Food food);

    /**
     * 删除
     * @param id
     * @return
     */
    int deleteFood(@Param("id") String id);

    /**
     * 修改
     * @param food
     * @return
     */
    int updateFood(@Param("food") Food food);

    /**
     * 查询所有的
     * @return
     */
    List<Food> foodList();

    /**
     * 根据条件查询
     * @param food
     * @return
     */
    List<Food> selectFood(@Param("food") Food food);
}

 

7.创建一个写sql语句的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="cn.et.demo01.mapper.FoodMapper">
    <!--重点:-->
        <!--使用#{键} 方式 实际上 是使用占位符 ?来 替代  默认情况下可以通过 #{0} #{1} 的方式取值,也可以通过 #{param1} #{param2}来取值-->
        <!--使用${键} 方式 实际上 是使用值 直接替换对应的键 注意 如果是字符串 手工添加  ' '-->
    
    <!-- 增加 -->
    <insert id="insertFood">
  	  insert into food values(#{food.id},#{food.name},#{food.price})
    </insert>

    <!--删除-->
    <delete id="deleteFood">
        delete from food where id=#{id}
    </delete>

    <!--修改-->
    <update id="updateFood">
        update food set
            <trim suffixOverrides=",">
                <if test="food.name !=null and food.name !=''">
                    name = #{food.name},
                </if>
                <if test="food.price != null and food.price !=''">
                    price = #{food.price},
                </if>
            </trim>

        where id=#{food.id}
    </update>

    <!--查询所有的数据-->
    <select id="foodList" resultType="cn.et.demo01.model.Food">
        select * from food
    </select>

    <!-- 根据条件查询 -->
    <select id="selectFood" resultType="cn.et.demo01.model.Food">
        SELECT * FROM food
        <trim prefix="where" prefixOverrides="and">
            <if test="food.name !=null and food.name !=''">
                and name LIKE concat('%','${food.name}','%')
            </if>
            <if test="food.price != null and food.price !=''">
                and price LIKE concat('%','${food.price}','%')
            </if>
        </trim>
    </select>
</mapper>

 

8.写一个工具类

 每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获取。而SqlSessionFactoryBuilder则可以从核心配置文件或者预先定制的Configuration的实例构建出该实例。这里则演示通过配置文件获取。

package cn.et.tools;

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 java.io.IOException;
import java.io.InputStream;

public class DBTools {
    //封装一个工厂类
    public static SqlSession getSession() throws IOException {
        //读取连接池的
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //工厂类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //session操作的是 指向sql语句的一个唯一标示符
        SqlSession session = sqlSessionFactory.openSession();
        return session;
    }
}

 

9.写一个测试的类,开始测试

package cn.et.demo01.controller;

import cn.et.demo01.mapper.FoodMapper;
import cn.et.demo01.model.Food;
import cn.et.tools.DBTools;
import org.apache.ibatis.session.SqlSession;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

public class foodTest {
    public static void main(String[] args) throws IOException{
//        List<Food> foods = foodList();       //查询所有的数据
//        List<Food> foods = selectFood();     //根据条件查询数据
//        List<Food> foods = updateFood();     //修改数据
        List<Food> foods = insertFood();      //添加数据
        for (Food food1 : foods){
            System.out.println(food1.getId()+","+food1.getName()+","+food1.getPrice());
        }
    }

    /**
     * 添加
     * @return
     * @throws IOException
     */
    public static List insertFood() throws IOException {
        SqlSession sqlSession = DBTools.getSession();
        FoodMapper mapper = sqlSession.getMapper(FoodMapper.class);
        Food food = new Food();
        food.setId(String.valueOf(UUID.randomUUID()));
        food.setName("7");
        food.setPrice("7");
        mapper.insertFood(food);
        sqlSession.commit();
        List<Food> foods = foodList();
        return foods;
    }

    /**
     * 删除
     * @return
     * @throws IOException
     */
    public static List deleteFood() throws IOException{
        SqlSession sqlSession = DBTools.getSession();
        FoodMapper mapper = sqlSession.getMapper(FoodMapper.class);
        mapper.deleteFood("7");
        sqlSession.commit();
        List<Food> foods = foodList();
        return foods;
    }

    /**
     * 修改
     * @return
     * @throws IOException
     */
    public static List updateFood() throws IOException{
        SqlSession sqlSession = DBTools.getSession();
        FoodMapper mapper = sqlSession.getMapper(FoodMapper.class);
        Food food = new Food();
        food.setId("1");
        food.setName("11");
        food.setPrice("11");
        mapper.updateFood(food);
        sqlSession.commit();
        List<Food> list = mapper.foodList();
        return list;
    }

    /**
     * 查询所有数据
     * @return
     * @throws IOException
     */
    public static List<Food> foodList() throws IOException {
        FoodMapper mapper =DBTools.getSession().getMapper(FoodMapper.class);
        List<Food> list = mapper.foodList();
        return list;
    }

    /**
     * 根据条件查询
     * @return
     * @throws IOException
     */
    public static List<Food> selectFood() throws IOException {
        FoodMapper mapper =DBTools.getSession().getMapper(FoodMapper.class);
        Food food =new Food();
        food.setPrice("4");
        List<Food> list = mapper.selectFood(food);
        return list;
    }
}

 

注意:如果给xml文件放在java目录下,没有放在resources目录下,一定要在pom.xml中添加一个配置文件,因为idea不会扫码java目录下的xml文件,我是过来人,希望大伙们别踩这个坑了。

 

 

 

运行效果如下:

用mybatis实现的一个简单例子ok。。。。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值