美文网首页
MyBatis(1)-基本操作

MyBatis(1)-基本操作

作者: 炖土豆块 | 来源:发表于2019-04-16 13:45 被阅读0次

    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。

    相关文章

      网友评论

          本文标题:MyBatis(1)-基本操作

          本文链接:https://www.haomeiwen.com/subject/zblvwqtx.html