zoukankan      html  css  js  c++  java
  • 使用Mybatis框架的步骤

    1、先在pom.xml文件中导入Mybatis的jar包与mysql-connector-java的jar包(需要在<dependencies>标签之中)

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.16</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
            </dependency>

    2、在resource文件夹下编写mybatis-config.xml文件(即mybatis核心设置文件),该文件用于设置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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
    <!--        这是第一种注册mapper方法,通过resource路径来绑定-->
    <!--       <mapper resource="com/com.kuang/dao/UserMapper.xml"/>-->
    <!--        这是第二种注册方法,通过包路径来注册,但是要求接口类和xml实现类同名-->
    <!--       <mapper class="com.com.kuang.dao.UserMapper"></mapper>-->
    <!--        这是第三种注册方法,直接注册该报下的所有mapper,但是要求接口和实现类同名(和mapper标签的class属性来注册相同)-->
            <mapper class="com.kuang.dao.teacherMapper"></mapper>
            <mapper class="com.kuang.dao.studentMapper"></mapper>
        </mappers>
    </configuration>

    3、然后编写MybatisUtils类用于在程序中获取Sqlsession对象.(放在untils包下)

    package com.kuang.utils;
    
    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 java.io.IOException;
    import java.io.InputStream;
    
    public class MybatisUtils {//工具类,用于返回该mybatis项目的核心配置文件的SqlSession对象
        private static SqlSessionFactory sqlSessionFactory;
        static{
            try {
                String resource = "mybatis-config.xml";//获取mybatis的核心配置文件名
                InputStream inputStream = Resources.getResourceAsStream(resource);//使用mybatis的核心配置文件名创建一个输入流
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                //创建一个sqlSessionFactory(数据库会话工厂,用于创建SqlSession对象的),使用mybatis的核心配置文件名创建的字节输入流创建一个SqlSessionFactory
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
    
        public static SqlSession getSqlSession(){//用于获取SqlSession对象
    
            return sqlSessionFactory.openSession();
    
        }
    }

    4、接下来就可以正式使用Mybatis框架来进行数据库操作了

    我们可以编写一个实体类javaBeen(pojo类)来与数据库中的表一一对应.javaBeen即指成员变量都为private修饰类型(私有).通过get和set方法来对该类成员变量进行操作的类,并且有无参构造函数

    如User类:

    package com.kuang.pojo;
    //pojo包,其中存放的类都是实体类
    public class User {
        private int id;
        private String name;
        private String pwd;
    
        public User(int id, String name, String pwd) {
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
    
    
        public User() {
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    
    }

    要注意,该实体类的成员变量类型、名字必须和数据库该表中的数据类型、名字一一对应,如数据库中数据类型是varchar则该成员变量类型就为String.

    5、接下来就可以开始编写对数据库数据的操作了

    package com.kuang.dao;
    
    import com.kuang.pojo.User;
    
    import java.util.List;
    
    public interface UserMapper {
       public List<User> getUserList();//用于获取用户列表的方法
       public User getGivenUser(int id);//获取特定用户的方法
       public int addUser(User user);
       int deleteUser(int id);//根据id删除指定对象
       int updateUser(User user);//更新对象
    }

    Mybatis实现用户操作需要先定义个数据操作接口,然后再编写对应的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.com.kuang.dao.UserMapper">
    <!--    id是要实现方法的方法名,resultType是该方法的返回值-->
        <select id="getUserList" resultType="com.com.kuang.pojo.User">
            select * from mybatis.user
        </select>
        <select id="getGivenUser" parameterType="int" resultType="com.com.kuang.pojo.User">
            select * from mybatis.user where id=#{id}
        </select>
    
        <insert id="addUser" parameterType="com.com.kuang.pojo.User">
            insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd})
        </insert>
        <delete id="deleteUser" parameterType="int">
            delete from mybatis.user where id=#{id}
        </delete>
        <update id="updateUser" parameterType="com.com.kuang.dao.UserMapper" >
            update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}
        </update>
    </mapper>

     6、我们可以创建测试类来测试数据操作是否可以正常操作

    package com.kuang.dao;
    
    import com.kuang.pojo.User;
    import com.kuang.utils.MybatisUtils;
    import junit.framework.TestCase;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserMapperTest extends TestCase {
        @Test
        //这是测试类,用于测试是否能够正常使用
        public void testGetUserList() {
            //1、获得了SqlSession对象
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            try{
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//使用class属性来获取类的class对象,
                List<User> userList = userMapper.getUserList();//执行语句
                for(User user :userList) { //循环输出语句
                    System.out.println(user);
                }
                User givenUser = userMapper.getGivenUser(6);//如果在表中没有查询到该用户则返回null
                System.out.println(givenUser);
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                sqlSession.close();//关闭sqlSession流,非常重要,每次使用完后都需要记得关闭
            }
        }
        @Test
        public void testAddUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);//获取接口的class
            mapper.addUser(new User(5,"小王","1234561"));//插入数据
            sqlSession.commit();//提交事务,不然数据库中的数据不会更新
            sqlSession.close();//关闭sqlSession流
    
        }
        @Test
        public void testupdateUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.updateUser(new User(5,"小张","12312321"));
            sqlSession.commit();
            sqlSession.close();
        }
        @Test
        public void testdeleteUser(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            mapper.deleteUser(5);
            sqlSession.commit();
            sqlSession.close();
        }
    }

    想要使用自己编写的数据操作方法:

    1、先调用MybatisUtils的getSqlSession()方法获取Sqlsession对象.

    2、调用获得的SqlSession对象使用它的GetMapper(实现操作接口名.class)获取Mapper对象

    3、直接使用Mapper对象调用该方法.(如果调用的是update、insert、delete方法需要使用SqlSession.commit()把事务提交更新数据)

    4、使用完毕记得将SqlSession关闭,使用SqlSession的close()方法.

  • 相关阅读:
    小程序面试题及答案
    Git常用指令
    《剑指offer》面试题23 从上往下打印二叉树 Java版
    《剑指offer》面试题22 栈的压入、弹出序列 Java版
    《剑指offer》面试题21 包含min函数的栈 Java版
    《剑指offer》面试题20 顺时针打印矩阵 Java版
    《剑指offer》面试题19 二叉树的镜像 Java版
    《剑指offer》面试题18 树的子结构 Java版
    《剑指offer》面试题17 合并两个排序的链表 Java版
    《剑指offer》面试题16 反转链表 Java版
  • 原文地址:https://www.cnblogs.com/youjunhui/p/15812137.html
Copyright © 2011-2022 走看看