zoukankan      html  css  js  c++  java
  • MyBatis 极简入门

    工欲善其事,必先利其器
    第一步,使用maven导入mybatis,jdbc以及lombok(简化代码),代码如下

    <dependencies>
            <!--添加mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.3</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.17</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.14</version>
    
            </dependency>
        </dependencies>
    
        <!--读取srcx目录下的资源文件-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    
    
    

    第二步:在resource目录下配置config.xml(即连接数据库相关的配置,如driver,username,password等)

    <?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="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT"/>
                    <property name="username" value="root"/>
                    <property name="password" value="你的数据库密码"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/ibuyi/mybatis/mapper/studentmapper.xml"/>
        </mappers>
    </configuration>
    

    第三步编写实体类和mapper
    一个实体类对应数据库中的一张表,mappe.xm中包含对该表的全部SQL操作。

    实体类Student

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Student{
    
    //@Data注解是注解方式添加get/set方法
    //AllArgsConstructor是注解方式添加全参构造方法
    //NoArgsConstructor是注解方式添加无参构造方法
        private long id;
        private String name;
        private String sex;
        private String born;
    
    }
    
    

    studentmapper.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.ibuyi.mybatis.mapper.studentmapper">
    <!--namespace是该文件的全路径-->
           <insert id="student" parameterType="com.ibuyi.mybatis.entity.Student">
           <!--id可以任意取,后面会用到,parameterType是参数类型,如果普通类型直接写,对象类型写全路径-->
           <!--写SQL语句,#{}表示引用参数中的值,参数就是上面传递进来的-->
               insert into student(name,sex,born) values(#{name},#{sex},#{born})
           </insert>
    </mapper>
    
    

    如果每次都不记得添加dtd文件,可以在IDEA中自定义一个Code Template,以后就可以直接创建了。

    方法如下:
    在这里插入图片描述

    点击“+”号
    在这里插入图片描述
    然后应用就可以,就节省了每次还要去查找头部约束的写法了。mapper.xml也可以参照这样来做。

    最后别忘了把mapper.xml在config.xml中注册一下

    <mappers>
            <mapper resource="com/ibuyi/mybatis/mapper/studentmapper.xml"/>
        </mappers>
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.InputStream;
    
    public class Test {
    
        public static void main(String[] args) {
            //    首先要通过流来读入xml文件
            InputStream inputStream=Test.class.getClassLoader().getResourceAsStream("config.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(inputStream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
    
            String state="com.ibuyi.mybatis.mapper.studentmapper.student";//studentmapper.xml中定义的一个id叫做student,根据这个state就能找到那条sql语句。
            com.ibuyi.mybatis.entity.Student student1=new com.ibuyi.mybatis.entity.Student(5L,"xxxxx","男","1999-07-16");//这里因为我有两个类名交student,所以用了全路径
            sqlSession.insert(state,student1);//执行插入操作,student1表示parameterType中的参数
            sqlSession.commit();//增删改要提交,查询操作可以不用提交。
            sqlSession.close();//关闭,防止占用资源
    
        }
    
    }
    
    

    上面的传统的使用方式很不方便,在实际开发中我们经常用mapper代理的方式。步骤如下:

    • 先创建一个接口,该接口定义了操作数据库的方法,如save,update等
    • 在创建一个mapper.xml文件,这个文件中定义了接口中方法的对应的sql语句

    看代码如下:

    接口Student

    package com.ibuyi.mybatis.repository;
    
    import java.util.List;
    
    public interface Student {
    //需要定义返回值,int型
        int save(com.ibuyi.mybatis.entity.Student student);
        int update(com.ibuyi.mybatis.entity.Student student);
        int delete(long id);
        //返回student对象
        com.ibuyi.mybatis.entity.Student find(long id);
        List<com.ibuyi.mybatis.entity.Student> findAll();
    }
    
    

    student,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.ibuyi.mybatis.repository.Student">
    <!--这里的namespace指的是student接口的全路径-->
    <!--由于增删改方法返回值都是int类型,所以没有ResultType参数-->
        <insert id="save" parameterType="com.ibuyi.mybatis.entity.Student">
            insert into student(name,sex,born) values (#{name},#{sex},#{born})
        </insert>
    
        <update id="update" parameterType="com.ibuyi.mybatis.entity.Student">
            update student set name=#{name},sex=#{sex},born=#{born} where id = #{id}
        </update>
    
        <delete id="delete" parameterType="long">
            delete from student where id=#{id}
        </delete>
    <!--查找返回值不一定,需要定义resultType参数-->
        <select id="find" parameterType="long" resultType="com.ibuyi.mybatis.entity.Student">
            select * from student where id=#{id}
        </select>
    
        <select id="findAll" resultType="com.ibuyi.mybatis.entity.Student">
            select * from student
        </select>
    
    </mapper>
    
    

    看一下如何使用:

    package com.ibuyi.mybatis.entity;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import java.io.InputStream;
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) {
            //    首先要通过流来读入xml文件
            InputStream inputStream=Test.class.getClassLoader().getResourceAsStream("config.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(inputStream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            com.ibuyi.mybatis.repository.Student student = sqlSession.getMapper(com.ibuyi.mybatis.repository.Student.class);
    
          //查询
            List<Student> students= student.findAll();
            for(com.ibuyi.mybatis.entity.Student stu:students){
                System.out.println(stu);
            }
    
            //保存
            com.ibuyi.mybatis.entity.Student student1=new com.ibuyi.mybatis.entity.Student(5L,"xiaoyan","男","1999-07-16");
            student.save(student1);
    
    
    
            //更新
            com.ibuyi.mybatis.entity.Student student2=student.find(11L);
            student.update(student2);
    
            //删除
            student.delete(5L);
            sqlSession.commit();
            sqlSession.close();
    
        }
    
    }
    
    

    简单使用,小结一下以备不时之需

  • 相关阅读:
    模拟赛总结
    2018.04.06学习总结
    2018.04.06学习总结
    Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 671 二叉树中第二小的节点(遍历树)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
    Java实现 LeetCode 670 最大交换(暴力)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309406.html
Copyright © 2011-2022 走看看