首页 > 技术文章 > mybatis 基本配置

yanyunpiaomaio 2019-07-09 20:22 原文

一、mybatis是什么
mybatis是一种orm的持久化层技术。orm 对象关系映射mybatis就是完成对象和表之间映射关系的持久层框架。
二、mybatis实现数据库查询
  举例:利用mybatis完成部门表的查询
  第一步,创建web项目,引入mybatis依赖的jar包。(不要忘了引入数据库驱动包这里用oracle示例)
  第二步,创建mybatis的主配置文件 
  可以在src下创建mybatis的主配置文件idea是没有mybatis主配置文件的模板文件的,
  我们可以创建mybatis的模板文件
 
  

 

 

 代码如下

<?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"
>
 创建好之后,右键菜单中就会出现该名称的模板文件选项:
  有了这个选项之后,我们就可以创建mybatis的主配置文件了。
<?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的运行环境 mybatis可以连接多个数据库 ,连接一个数据库的信息就是一个运行环境 default指定默认使用哪个运行环境 --> <environments default="myOracleEnv"> <!--连接oracle的环境--> <environment id="myOracleEnv"> <!--配置mybatis的事物管理器 JDBC 使用mybatis自己的事物管理方式,就是使用jdbc的事物管理方式 MANAGED 使用容器的事物管理方式 --> <transactionManager type="JDBC"></transactionManager> <!--配置mybatis连接oracle的连接池信息 POOLED 使用连接池的方式获取数据库连接 UNPOOLD 不使用连接池的方式获取数据库连接 --><dataSource type="POOLED"> <!--数据库的驱动--> <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property> <!-- 数据库连接的url--> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property> <!--数据库连接的用户名--> <property name="username" value="scott"></property> <!-- 数据库连接的密码--> <property name="password" value="tiger"></property> </dataSource> </environment> </environments> </configuration>
主配置文件创建好之后如上所示
第三步,创建mybatis的工厂类工具,用来获取mybatis的SqlSession对象
       以后我们做数据库操作都是通过SqlSession来进行的,所以我们可以写一个工厂类帮助工具,用来获取这个
SqlSession对象。
package com.aaa.mybatis.util;
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.Reader;
 /**
* 获取SqlSession对象工具类
*/
public class SqlSessionFactoryUtil { 
     //获取SqlSession的工厂类对象
        private static SqlSessionFactory sessionFactory; 
     //静态代码块,在类加载的时候会自动执行该内容 
      static{
        Reader reader =null; 
            try {
                  //获取Reader对象,读取mybatis的主配置文件 
               reader = Resources.getResourceAsReader("mybatis.xml"); 
              //利用SqlSessionFactoryBuilder创建工厂类对象 
            sessionFactory = new SqlSessionFactoryBuilder().build(reader); 
             } catch (IOException e) {
                               e.printStackTrace();
                         }finally{ 
                                   try { 
                                         reader.close(); 
                                    } catch (IOException e) { 
                                         e.printStackTrace(); 
                          } 
                   }
      }    


/**
* 提供给用户调用的获取SqlSession的方法
* @return
*/
public static SqlSession getSession(){
   
return sessionFactory.openSession();
}
}
第四步,创建实体类
创建实体类Dept.java:
package com.aaa.entity;

import java.util.List;

public class Dept {
    private int deptno;
    private String dname;
    private String loc;
    private List<Emp> emp;

    public List<Emp> getEmp() {
        return emp;
    }

    public void setEmp(List<Emp> emp) {
        this.emp = emp;
    }

    public int getDeptno() {
        return deptno;
    }

    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }
}
第五步,创建dao接口
package com.aaa.dao;

import com.aaa.entity.Dept;

/**
 * 部门管理到接口
 */
public interface DeptDao {
    /**
     * 根据部门编号查询部门信息
     * @param deptno
     * @return
     */
    public Dept selectOneDept(int deptno);
}

 

第六步,创建dao接口的实现的mapper文件
这里我们不需要再用类的方式实现dao接口,我们用mapper文件也就是映射文件来实现dao接口中的方式。使用映射文件,首先应该创建映射文件,映射文件是一个xml格式的文件,所以我们一般也会先创建一个模板,创建模板文件和刚才创建mybatis主配置文件的模板文件步骤是一样的。

 

 
模板创建好之后,就可以根据模板创建映射文件了,我们一般把映射文件创建到dao接口的目录下面,名字一般叫
dao接口名称+Mapper.xml, DeptDaoMapper.xml:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aaa.dao.DeptDao">
    <resultMap id="deptMap" type="com.aaa.entity.Dept">
        <id column="deptno" property="deptno"></id>
        <result column="dname" property="dname"></result>
        <result column="loc" property="loc"></result>

        <collection property="emp" ofType="com.aaa.entity.Emp" autoMapping="true"></collection>
    </resultMap>
    <select id="selectOneDept" resultMap="deptMap">
        SELECT * FROM dept d INNER JOIN emp e on e.deptno=d.deptno WHERE d.deptno=#{deptno}
    </select>

</mapper>
第七步,把mapper文件加载到mybatis的主配置文件中
第八步,创建测试类
package com.aaa.test;

import com.aaa.dao.DeptDao;
import com.aaa.dao.EmpDao;
import com.aaa.entity.Dept;
import com.aaa.entity.Emp;
import com.aaa.util.SqlSessonFacttoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class DeptTest {
    @Test
    public void sumDeptEmp3(){
        SqlSession session = SqlSessonFacttoryUtil.getSession();
        DeptDao deptDao = session.getMapper(DeptDao.class);
        Dept dept = deptDao.selectOneDept(20);
        System.out.println(dept.getDname());
        List<Emp> emp = dept.getEmp();
        for (Emp e:emp){
            System.out.print("员工姓名:"+e.getEname());
            System.out.print("员工编号:"+e.getEmpno());
            System.out.println("员工工资:"+e.getSal());
        }

        session.close();
    }
}

增删改查在mybatis中都有对应的标签 

查询<select></select>

添加<insert></insert>

修改<update></update>

删除<delete></delete>

推荐阅读