mybatis框架的使用详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44001965/article/details/87921324

一,在添加maven配置后的pom.xml文件中添加以下配置:

 <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
  <!--oracle不允许maven下载驱动包 -->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.4.0</version>
    </dependency>

二,写一个DeptDao的接口

package com.aaa.mb.dao;

import com.aaa.mb.entity.Dept;

import java.util.List;

public interface DeptDao {
    /**
     * 部门列表查询
     * @return
     */
    List<Dept> getList();

    /**
     * 部门添加
     * @param dept
     * @return
     */
    int add(Dept dept);

    /**
     * 根据id查询对象
     * @param deptNo
     * @return
     */
    Dept getById(int deptNo);

    /**
     * 部门更新
     * @param dept
     * @return
     */
    int update(Dept dept);

    /**
     * 部门删除
     * @param deptNo
     * @return
     */
    int delete(int deptNo);
}

三,写一个dept的实体类

package com.aaa.mb.entity;

/**
 * className:Dept
 * discription:
 * author:zz
 * createTime:2018-11-13 09:44
 */
public class Dept {
    private Integer deptNo;
    private String dname;
    private String loc;

    public Integer getDeptNo() {
        return deptNo;
    }

    public void setDeptNo(Integer 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;
    }
}

四,在resources文件夹下的mapper文件中新建配置文件DeptDaoMapper

<?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.aaa.mb.dao.DeptDao">
    <sql id="selId">
        select deptno as deptNo,dname,loc from dept
    </sql>
    <!--部门列表查询 resultType返回类型 -->
    <select id="getList" resultType="com.aaa.mb.entity.Dept">
    <include refid="selId"></include>
    </select>
    <!--部门添加-->
    <insert id="add" parameterType="com.aaa.mb.entity.Dept">
    insert into dept values(seq_dept_id.nextval,#{dname},#{loc})
    </insert>
    <!--根据id查询部门-->
    <select id="getById" parameterType="java.lang.Integer" resultType="com.aaa.mb.entity.Dept">
        <include refid="selId"></include> where deptno=#{deptno}
    </select>
    <!--部门更新-->
    <update id="update" parameterType="com.aaa.mb.entity.Dept">
    update dept set dname=#{dname},loc=#{loc} where deptno=#{deptNo}
    </update>
    <!--部门删除-->
    <delete id="delete">
    delete from dept where deptno=#{deptNo}
    </delete>
</mapper>

五,在resources文件夹下新建一个和mapper文件位置并列的配置文件mybatis-config.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>
    <!--常量配置-->
    <settings>
        <!--控制台输出-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。-->
        <setting name="jdbcTypeForNull" value="NULL"></setting>
    </settings>


    <!--类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。-->
    <typeAliases>
        <package name="com.aaa.mb.entity"/>
    </typeAliases>
    <!--环境配置,可以配置多个环境链接不同的数据源-->
    <environments default="development">
        <environment id="development">
            <!--事务管理器  JDBC 自定处理事务  MANAGERD 事务交给容器管理-->
            <transactionManager type="JDBC"/>
            <!--数据源配置,链接数据库的4要素 POOLED 使用链接池-->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
                <property name="username" value="scott"/>
                <property name="password" value="scott"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/DeptDaoMapper.xml"/>
        <mapper resource="mapper/EmpDaoMapper.xml"/>
        <mapper resource="mapper/GradeDaoMapper.xml"/>
        <mapper resource="mapper/RoleDaoMapper.xml"/>
    </mappers>
</configuration>

六,在util包里新建一个SqlSessionFactoryUtil工具类

package com.aaa.mb.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.InputStream;

/**
 * className:SqlSessionFactoryUtil
 * discription:该工具类创建SqlSessionFactory(官网建议单例模式)并生成SqlSession
 * author:zz
 * createTime:2018-11-13 09:13
 */
    public class SqlSessionFactoryUtil {
        //私有构造 防止在其他类实例化对象
        private SqlSessionFactoryUtil(){}
        //私有的 静态的属性
        private static SqlSessionFactory sqlSessionFactory;
        //使用静态块根据配置文件创建SqlSessionFactory 没有名字保证在其他地方不能调用,静态的,伴随类只产生一次
        static {
            //使用mybatis提供给我们的类Resources加载主配置文件,生成字节流
            try {
                InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml");
                //使用字节流构建SqlSessionFactory
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //提供一个对象开放方法,生成SqlSession
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

七,新建一个测试类DeptTest类

package com.aaa.mb.test;

import com.aaa.mb.dao.DeptDao;
import com.aaa.mb.entity.Dept;
import com.aaa.mb.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * className:DeptTest
 * discription:
 * author:zz
 * createTime:2018-11-13 11:06
 */
public class DeptTest {
    @Test
    public void testGetList(){
         //使用工具类获取sqlSession
        SqlSession sqlSession = SqlSessionFactoryUtil.getSession();
         //使用sqlSession提供的方法,获取DeptDao
        DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
         //循环遍历
        List<Dept> deptList = deptDao.getList();
        if(deptList!=null&&deptList.size()>0){
            for (Dept dept : deptList) {
                System.out.println("部门名称:"+dept.getDname());
            }
        }
    }
    @Test
    public void testAdd(){

        SqlSession sqlSession = null;
        try {
            //使用工具类获取sqlSession
            sqlSession = SqlSessionFactoryUtil.getSession();
            //使用sqlSession提供的方法,获取DeptDao
            DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
            Dept dept = new Dept();
            dept.setDname("马太阳");
            dept.setLoc("郑州");
            int i = deptDao.add(dept);
            if(i>0){
                System.out.println("添加成功");
                sqlSession.commit();
            }else{
                System.out.println("添加失败");
                sqlSession.rollback();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
    @Test
    public void testUpdate(){
        SqlSession sqlSession = null;
        try {
            //使用工具类获取sqlSession
            sqlSession = SqlSessionFactoryUtil.getSession();
            //使用sqlSession提供的方法,获取DeptDao
            DeptDao deptDao = sqlSession.getMapper(DeptDao.class);
            //更新前先查询对象
            Dept dept=deptDao.getById(41);
            dept.setDname("哈哈部");
            dept.setLoc("哈哈楼");
            int i=deptDao.update(dept);
            if(i>0){
                System.out.println("更新成功");
                sqlSession.commit();
            }else{
                System.out.println("更新失败");
                sqlSession.rollback();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
    @Test
    public void delete(){
        SqlSession sqlSession = null;
        try {
            //使用工具类获取sqlSession
            sqlSession = SqlSessionFactoryUtil.getSession();
            //使用sqlSession提供的方法,获取DeptDao
            DeptDao deptDao = sqlSession.getMapper(DeptDao.class);

            int i=deptDao.delete(41);
            if(i>0){
                System.out.println("删除成功");
                sqlSession.commit();
            }else{
                System.out.println("删除失败");
                sqlSession.rollback();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
}

然后运行。

猜你喜欢

转载自blog.csdn.net/weixin_44001965/article/details/87921324