MyBatis(1)-基本操作

1.数据库新建person表


数据库person

2.步骤

目录结构
目录结构.png

1)导入jar包
2)配置核心xml文件,开发环境及数据库相关信息,及mapper映射文件位置

3)配置映射文件XXXMapper.xml,主要是命名空间,操作语句
4)通过构建SqlSessionFactory获取SqlSession对象,然后通过使用SqlSeesion对象调用对应的方法实现数据库操作。
3.操作
1)引入相关MyBatis及MySQL连接Jar包及JUnit4包


相关jar包

2)新建Person实体类
package com.capgemini.entity;

/**
 * 实体类
 */
public class Person {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3)MyBatis核心配置文件sqlMapperConfig.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>
    <!-- 配置开发环境-->
    <environments default="test">
        <environment id="test">
            <!-- 事务管理类型:JDBC、MANAGED -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据源类型:POOLED、UNPOOLED、JNDI -->
            <dataSource type="POOLED"> 
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 mapper -->
    <mappers>
        <!--路径使用"/"-->
        <mapper resource="com/capgemini/mapper/PersonMapper.xml"></mapper>
    </mappers>
</configuration>

4)映射文件PersonMapper.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.capgemini.mapper.PersonMapper">
    <!-- 查询功能,resultType 设置返回值类型 -->
    <select id="findAll" resultType="com.capgemini.entity.Person">
        SELECT * FROM person
    </select>

    <!--增加功能,parameterType 设置参数,为实体类中的属性-->
    <insert id="insert" parameterType="com.capgemini.entity.Person">
        INSERT INTO person(id,name,age) VALUES (#{id},#{name},#{age})
    </insert>

    <!--修改功能-->
    <update id="update" parameterType="com.capgemini.entity.Person">
        UPDATE person SET name = #{name},age = #{age}
        WHERE id = #{id}
    </update>

    <!--删除-->
    <delete id="delete" parameterType="com.capgemini.entity.Person">
        DELETE person WHERE id = #{id}
    </delete>
</mapper>

5)测试

package com.capgemini.test;

import com.capgemini.entity.Person;
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 org.junit.Test;

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

public class TestMyBatis {
    @Test
    public void Test01() throws IOException {
        /**
         *  1、获得 SqlSessionFactory
         *  2、获得 SqlSession
         *  3、调用在 mapper 文件中配置的 SQL 语句
         */
        String resource = "sqlMapperConfig.xml";           // 定位核心配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSession

        // 调用 mapper 中的方法:命名空间 + id
        List<Person> personList = sqlSession.selectList("com.capgemini.mapper.PersonMapper.findAll");

        for (Person p : personList){
            System.out.println(p);
        }
    }
    @Test
    public void Test02() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(25);
        // 调用 mapper 中的方法:命名空间 + id
        sqlSession.insert("com.capgemini.mapper.PersonMapper.insert",person);
        sqlSession.commit();
    }
    @Test
    public void Test03() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(26);
        // 调用 mapper 中的方法:命名空间 + id
        sqlSession.update("com.capgemini.mapper.PersonMapper.update",person);
        sqlSession.commit();
    }

    @Test
    public void Test04() throws IOException {
        String resource = "sqlMapperConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSession

        Person person = new Person();
        person.setId(2);
        person.setName("Echo");
        person.setAge(26);
        // 调用 mapper 中的方法:命名空间 + id
        sqlSession.delete("com.capgemini.mapper.PersonMapper.delete",person);
        sqlSession.commit();
    }

}

4.其他
在PersonMapper.xml中的映射的对象是 使用下面方法实现的

  <!-- 查询功能,resultType 设置返回值类型 -->
    <select id="findAll" resultType="com.capgemini.entity.Person">
        SELECT * FROM person
    </select>

可以通过实体对象映射,节省代码量

<!--对象映射,type是对象的位置-->
    <resultMap id="PersonRM" type="com.capgemini.entity.Person">
        <!-- id是主键,result是普通字段,property表示实体对象属性,column是数据库中对应的字段-->
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
    </resultMap>
    <!-- 查询功能,resultMap 通过对象映射,设置返回值类型 -->
    <select id="findAll" resultMap="PersonRM">
        SELECT * FROM person
    </select>

5.分析
1)首先是映射文件
namespace,是命名空间,是用于区分映射文件中的方法的
每一个sql语句操作都有一个id,对应的是SqlSession方法调用时候命名空间后的方法名,主要有4种sql语句操作类型,select,insert,update,delete。
parameterType,是sql语句的输入参数类型,如果输入参数是对应的实体类,在sql语句中则是使用#{实体类属性}来添加;如果不是则#{随便的命名}。
resultType,是sql语句返回的结果集类型,用于简单类型,
resultMap,是返回的结果集类型是复杂类型时候使用的,对应的是resultMap标签所指定的对象映射id
标签resultMap,其中id是用于sql语句结果集返回时resultMap的位置,type是映射对象,id是主键,result是普通字段,property是实体类属性,column是数据库中对应的字段名
2)调用方式
首先创建SqlSessionFacory对象,使用的是SqlSessionFactoryBuilder().build(inputStream)方法,其中inputStream可以通过Resources.getResourceAsStream(resource)方法获取,resource是核心配置文件位置。
然后获取SqlSession对象,使用的是sqlSessionFactory。openSession()方法。
最后调用mapper中的方法,增加使用insert,修改使用update,删除使用delete,查询使用select。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,511评论 0 4
  • MyBatis 理论篇 [TOC] 什么是MyBatis  MyBatis是支持普通SQL查询,存储过程和高级映射...
    有_味阅读 2,895评论 0 26
  • Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache...
    day_Sunny阅读 2,662评论 0 6
  • 1.1mybatis下载 mybaits 的代码由github.com 管理,地址:https://github....
    暖熊熊阅读 858评论 0 5
  • 上周沪深B指前半周连续阴跌,周五出现报复性反弹,在走势图上尤以上证B指最为明显。上证B指上周连续下跌,从周一360...
    阳光在风雨后阅读 225评论 0 0