mybatis的使用及详解

一、Mybatis介绍

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

二、准备开发环境

  导入jar包

  【mybatis

  

  oracle

  

  生成数据库

  

三、使用MyBatis查询表中的数据

  1、添加Mybatis的配置文件conf.xml

  在src目录下创建一个mybatis.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>
    <properties resource="db.properties"></properties>

    <!-- 定义一个别名们 -->
    <typeAliases>
        <!-- <typeAlias type="com.model.TestId" alias="a"/> -->
        <package name="com.model"/>
    </typeAliases>
  <!-- mybatis的环境们 -->
  <environments default="test">
      <environment id="test">
          <!-- mybatis支持的事务
              JDBC:数据源自己的事务管理
              MANAGE(托管),不支持tomcat,一般用在大型的商业服务器,weblogic,jboss
           -->
          <transactionManager type="JDBC"></transactionManager>

          <!-- 数据源链接类型:PLOOLED,UNOOLED,JNDI
              POOLED:连接池
              JJNDI:使用应用服务器的数据源连接
           -->
          <dataSource type="POOLED">
              <property name="driver" value="${driver}"/>
              <property name="url" value="${url}"/>
              <property name="username" value="${username}"/>
              <property name="password" value="${password}"/>
          </dataSource>
      </environment>
      <!-- <environment id="test1">

      </environment>
      <environment id="test2">

      </environment> -->
  </environments>
  <mappers>
      <mapper resource="com/dao/UsersMapper.xml"/>
  </mappers>
</configuration>

  db.properties文件如下:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=root
password=123

  2、定义表所对应的实体类,如下图所示:

  

  

package com.model;
// Generated 2017-4-19 10:19:42 by Hibernate Tools 5.2.0.CR1

import java.math.BigDecimal;

import org.apache.ibatis.type.Alias;

/**
 * TestId generated by hbm2java
 */
public class TestId {

    private BigDecimal id;
    private String username;
    private String password;

    public TestId() {
    }

    public TestId(BigDecimal id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public BigDecimal getId() {
        return this.id;
    }

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

    public String getUsername() {
        return this.username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean equals(Object other) {
        if ((this == other))
            return true;
        if ((other == null))
            return false;
        if (!(other instanceof TestId))
            return false;
        TestId castOther = (TestId) other;

        return ((this.getId() == castOther.getId())
                || (this.getId() != null && castOther.getId() != null && this.getId().equals(castOther.getId())))
                && ((this.getUsername() == castOther.getUsername()) || (this.getUsername() != null
                        && castOther.getUsername() != null && this.getUsername().equals(castOther.getUsername())))
                && ((this.getPassword() == castOther.getPassword()) || (this.getPassword() != null
                        && castOther.getPassword() != null && this.getPassword().equals(castOther.getPassword())));
    }

    public int hashCode() {
        int result = 17;

        result = 37 * result + (getId() == null ? 0 : this.getId().hashCode());
        result = 37 * result + (getUsername() == null ? 0 : this.getUsername().hashCode());
        result = 37 * result + (getPassword() == null ? 0 : this.getPassword().hashCode());
        return result;
    }

}

  3、定义操作test表的sql映射文件userMapper.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="com.dao.UsersMapper">
      <!-- 当数据库表字段和实体类字段不一样时重新定义的方法,在实体类中username改为username1来实验 -->
      <!-- <resultMap type="testId" id="user">
          <result property="username1" column="USERNAME" jdbcType="number" javaType="String"/>
      </resultMap>
      <select id="list1"  resultMap="user">
          select * from test
      </select>  -->
      <resultMap type="testId" id="users"></resultMap>
      <!-- 查所有表 -->
      <select id="list"  resultType="testId">
          select * from test
      </select>

      <!-- 增 -->
      <insert id="add" parameterType="testId">
          insert into test values(sq_mybatis.nextval,#{username},#{password})
      </insert>

      <!-- 删 -->
      <delete id="delete" parameterType="Integer">
          delete test t where t.id=#{id}
      </delete>

      <!-- 改 -->
      <update id="update" parameterType="testId">
          update test t set t.username=#{username},t.password=#{password} where t.id=#{id}
      </update>

      <!-- 查集合 -->
      <!-- <select id="selectmany" parameterType="Map" resultType="testId" >
          select * from test t where t.username like #{p1} and t.password like #{p2}
      </select> -->
      <select id="selectmany" parameterType="Map" resultMap="users">
          select * from test t where t.username like #{p1} and t.password like #{p2}
      </select>
  </mapper>

  4、创建一个MybatisUtil的和Junit的类,来进行测试

  

  

package com.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
    private static SqlSessionFactory ssf;
    private static SqlSession ss;

    public static SqlSession getSqlSession(){

        InputStream in = null;
        //Reader reader = null;
        try {
            in= Resources.getResourceAsStream("mybatis.xml");
            //reader = Resources.getResourceAsReader("mbatis.xml");

            ssf= new SqlSessionFactoryBuilder().build(in);

            ss=ssf.openSession();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ss;

    }
    /*public static void main(String[] args){
        System.out.println(getSqlSession());
    }*/

}
package com.util;

import static org.junit.Assert.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.model.TestId;

public class JTest {

    private SqlSession ss;

    @Before
    public void setUp() throws Exception {
        ss= MybatisUtil.getSqlSession();
    }

    @After
    public void tearDown() throws Exception {
        ss.commit();
        ss.close();
    }

    public void test() {
        List<TestId> list = ss.selectList("com.dao.UsersMapper.list");
        for(TestId t : list ){
            System.out.println(t.getPassword());
        }
    }

    public void add(){
        TestId ti = new TestId();
        ti.setUsername("hahah");
        ti.setPassword("321");
        int n = ss.insert("com.dao.UsersMapper.add",ti);
        System.out.println(n);
    }

    public void delete(){
        int n = ss.delete("com.dao.UsersMapper.delete",61);
        System.out.println(n);
    }

    public void update(){
        TestId ti = new TestId();
        ti.setId(new BigDecimal(41));
        ti.setUsername("哈哈哈");
        ti.setPassword("654321");
        int n = ss.update("com.dao.UsersMapper.update",ti);
        System.out.println(n);
    }

    @Test
    public void selectmany(){
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("p1", "张%");
        map.put("p2", "2%");
        List<TestId> list=ss.selectList("com.dao.UsersMapper.selectmany",map);
        for(TestId t:list){
            System.out.println(t.getPassword());
        }
    }

}

  Junit类里面实现了mybatis的增删改查的方法。

  

时间: 2024-08-14 09:07:14

mybatis的使用及详解的相关文章

MyBatis的动态SQL详解

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力.如果你有使用 JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号.动态 SQL 可以彻底处理这种痛苦. 通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种

MyBatis的foreach语句详解

MyBatis的foreach语句详解 MyBatis的foreach语句详解 1人收藏此文章, 我要收藏 发表于3个月前 , 已有113次阅读 共0个评论 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,se

Mybatis最入门---配置详解(下)

[一步是咫尺,一步即天涯] 上文我们详细解释了HelloWorld工程中的配置项,本文,我们再来介绍一些更加基础,灵活的配置项.本文,我们先不演示具体的工程,后续的文章中会按照实际应用来配置相关的参数.敬请期待! -----------------------------------------------------------------------------------------------------------------------------------------------

Mybatis使用之查询详解

Mybatis使用之查询详解 一:简介 此篇主要知识点: 1.sql语句块 2.select标签属性 3.ResultMap 标签配置 4.一对一关联 5.一对多关联 6.多对多关联 7.嵌套查询 二:SQL语句块 2.1 作用 SQL元素可以被用来定义可重用的SQL 代码段,可以包含在其他语句中.比如在项目中常常做的分页查询.分别需要两条SQL语句.一条是查询所有具体记录信息.另一条需要查询记录数.而两条语句的where条件是一样的.这种类似情况就可以使用SQL语句块来简化配置信息. 2.2

idea spring+springmvc+mybatis环境配置整合详解

idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2.查看idea中是否安装Maven插件: 2.1:File --> Settings --> Plugins 2.2:如下图所示的步骤进行操作(注:安装完插件,idea会重新启动) 3.idea创建Maven项目的步骤 4.搭建目录结构 下图就是我搭建Maven项目之后,添加对应的目录和文件 5.p

Mybatis(三) 映射文件详解

前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输入映射 输入映射:配置statement中输入参数的类型.有四种 1.1.传递简单类型,八大基本类型,比如int类型 findUserById:根据id进行查询对应user,那么传入的就应该是int类型的值.所以使用别名int来映射传入的值 1.2.传递pojo(代表正常的对象,比如user的jav

Mybatis代码生成器Mybatis-Generator使用详解

前提 最近在做创业项目的时候因为有比较多的新需求,需要频繁基于DDL生成Mybatis适合的实体.Mapper接口和映射文件.其中,代码生成器是MyBatis Generator(MBG),用到了Mybatis-Generator-Core相关依赖,这里通过一篇文章详细地分析这个代码生成器的使用方式.本文编写的时候使用的Mybatis-Generator版本为1.4.0,其他版本没有进行过调研. 引入插件 Mybatis-Generator的运行方式有很多种: 基于mybatis-generat

笔记:MyBatis Mapper XML文件详解 - Result Maps

Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. 事实上, 编写相似于对复杂语句联合映射这些等同的代码, 也许可以跨过上千行的代码. ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们 的关系,你已经看到简单映射语句的示例了,但没有明确的 resultMap.比如: <s

mybatis一对一映射配置详解

听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表  gl_role_men:id,role_id,menu_id     --------->  实体类 GlrolemenuModel  private String id;private String roleId;private String menuId;private MenuModel men

笔记:MyBatis Mapper XML文件详解 - 映射和参数

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码.MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好. SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是最强大的元素,用来描述