有关mybatis的一些知识点

有关mybatis的一些知识点

最近在学框架,发现学到mybatis的时候思路有点混乱,于是在这里整理一下。

  • 使用mybatis的配置
  • 使用mybatis实现查询
  • 使用mybatis实现插入
  • 使用mybatis实现更新和删除

mybatis的配置

-这里首先看一下mybatis的总配置文件
-下面还需要配置一个和bean层查询表对应的类文件的配置文件

![这是我的文件层次结构](https://img-blog.csdn.net/20170310135511950?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWF0dHNjbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

如下是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>

    <!-- 这里创建一个全局变量,方便下面查询结果的使用,也就是对应类对象的小名 -->
    <typeAliases>
        <typeAlias type="com.bean.Admin" alias="admin" />
    </typeAliases>

    <!-- 这里配置连接数据库的环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:scloracle"></property>
                <property name="username" value="ATM"></property>
                <property name="password" value="letmein"></property>
            </dataSource>
        </environment>
    </environments>
    <!-- 下面引入和类对应的配置文件! -->
    <mappers>
        <mapper resource="Admin.xml"/>
    </mappers>
</configuration>

以上是mybatis总和配置文件的简单配置

-下面是对应相关类的配置文件

    <?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.bean.Admin">


    <!-- 这里定义一个结果集标签 -->
    <resultMap type="com.bean.Admin" id="allAdmin">
        <!-- property表示类的属性名,colum表示数据库表内的字段名 -->
        <result property="adminName" column="adminname"/>
        <result property="adminPass" column="adminpass"/>
    </resultMap>
    <!-- 这里定义一个参数的映射 ,该映射和我们的类对应-->
    <parameterMap type="com.bean.Admin" id="paramAdmin">
        <parameter property="adminName"/>
        <parameter property="adminPass"/>
    </parameterMap>
    <!-- 下面可定义增删改查语句 -->

    <!-- 查询所有的结果集 -->
    <select id="selectAll" resultMap="allAdmin">
        select * from admintable
    </select>
    <!-- 查询单个结果,根据传入map来查询 ,结果类型为小名-->
    <select id="selectOne" resultType="admin" parameterType="Map">
        select * from admintable where adminname=#{adminName}
    </select>
    <!-- 查询单个结果,根据传入 对象来查询,结果类型为小名,参数类型为小名 -->
    <select id="selectOne2" resultType="admin" parameterType="admin">
        select * from admintable where adminname=#{adminName}
    </select>
    <!-- 查询单个结果,根据传入类的单个属性来查询 -->
    <select id="selectOne3" resultType="admin" parameterType="String">
        select * from admintable where adminname=#{adminName}
    </select>
    <!-- 以下是插入语句 -->
    <insert id="insert" parameterMap="paramAdmin">
        insert into admintable values(#{adminName},#{adminPass})
    </insert>
    <!-- 以下是更新语句 -->
    <update id="update" parameterType="admin">
        update admintable set adminpass=#{adminPass} where adminname=#{adminName}
    </update>
    <!-- 一下是删除语句 ,传入的参数类型为之前定义的小名-->
    <delete id="delete" parameterType="admin">
        delete from admintable where adminname=#{adminName}
    </delete>
</mapper>

-下面是相关的测试类

package com.test;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 com.bean.Admin;

public class Test {

    String path="mybatis-config.xml";
    //定义一个方法用来获取session对象
    public SqlSession getSession(String configURL) throws IOException{
        //获取总配置文件的输入流
        Reader reader=Resources.getResourceAsReader(configURL);
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session=factory.openSession();
        return session;
    }

    //定义一个方法用来获取查询到的所有用户集合
    public List<Admin> getAllAdmin(String selectId) throws IOException{
        //这里mybatis自带了方法返回查询到的结果集
        return this.getSession(path).selectList(selectId);
    }

    //定义传入参数为map方法用来查询单个用户
    public Admin getOne(String selectId,Map map) throws IOException{
        return this.getSession(path).selectOne(selectId, map);
    }

    //定义一个传入参数为对象方法来查询单个用户
    public Admin getOne2(String selectId,Admin admin) throws IOException{
        return this.getSession(path).selectOne(selectId, admin);
    }

    //定义一个传入参数为对象属性的方法来查询单个用户
    public Admin getOne3(String selectId,String adminName) throws IOException{
        return this.getSession(path).selectOne(selectId, adminName);
    }

    //定义一个传入参数为对象的方法来插入信息
    public void insert(String insertId,Admin admin) throws IOException{
        SqlSession session=this.getSession(path);
        session.insert(insertId, admin);
        session.commit();
        session.close();
    }

    //定义一个方法传入参数为对象的方法来更新信息
    public void update(String updateId,Admin admin) throws IOException{
        SqlSession session=this.getSession(path);
        session.insert(updateId, admin);
        session.commit();
        session.close();
    }

    //定义一个方法传入参数为对象,来删除信息
    public void delete(String deleteId,Admin admin) throws IOException{
        SqlSession session=this.getSession(path);
        session.insert(deleteId, admin);
        session.commit();
        session.close();
    }



    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        Test t=new Test();
        /*System.out.println(t.getAllAdmin("selectAll"));*/
        /*Map map=new HashMap<String, String>();
        map.put("adminName","scott");
        System.out.println(t.getOne("selectOne",map));*/
        /*Admin admin=new Admin();
        admin.setAdminName("scott");
        System.out.println(t.getOne2("selectOne2", admin));*/
        /*System.out.println(t.getOne3("selectOne3", "scott"));*/
        /*Admin admin=new Admin("matt",123456);
        t.insert("insert", admin);*/
        /*Admin admin=new Admin("999",666666);
        t.update("update", admin);*/
        Admin admin=new Admin();
        admin.setAdminName("999");
        t.delete("delete", admin);
    }

}

简单梳理了一下知识点,基本都是配置文件的相关配置,中间也遇到了一些bug,不过经过修改也都能解决。
这里的配置文件,只是实现简单的功能,还有很多功能未能尽善尽美,主要是把学习的东西自己回忆一下加深印象,供日后参考。

关于mybatis操作持久层还可以用注解(看起来比用配置文件方便得多)

猜你喜欢

转载自blog.csdn.net/Mattscl/article/details/61191722
今日推荐