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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容