zoukankan      html  css  js  c++  java
  • 初识mybatis(二)

    上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置mybatis。关于mybatis的一些基础知识小伙伴们可以参考这篇博客 初识mybatis。另外,上篇博客中,小伙伴们也看到了通过添加jar包的方式来搭建mybatis环境太过于麻烦,so,本文我们还是回归到Maven上吧。OK,废话不多说,开始今天的coding之旅吧。

    创建Project并添加Maven支持

    我这里以IntelliJ为例来说明如何创建,先创建一个普通的java工程,创建成功之后,选中工程右键单击,选择Add Framework Support,然后选择Maven,点击OK就可以了。添加Maven支持src目录下多了几个文件夹,同时也多了一个pom.xml文件,如下:
    这里写图片描述
    然后在pom.xml文件中添加相关依赖,我们这里一共添加三个,一个mybatis、单元测试、mysql驱动,如下:

        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.2</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.40</version>
            </dependency>
    
        </dependencies>

    OK,如此我的mybatis环境就搭建好了。接下来我们还是按照上文的顺序来看看要怎么做。

    通过xml创建mybatis配置

    在创建xml配置文件的时候,对于数据库的配置信息我们可以直接创建一个db.properties文件,然后将数据库的配置信息放入其中,如下:

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis
    username=root
    password=sang

    注意,所有的配置文件我们都放在resources文件夹下(小伙伴如果放错了会出现文件找不到的情况,这个时候仔细检查下都很好解决的),如下图:
    这里写图片描述
    有了数据库配置信息,接下来我们就可以创建mybatis的配置文件了,我这里配置文件取名为mybatis-conf.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>
        <properties resource="db.properties"/>
        <typeAliases>
            <typeAlias type="org.sang.bean.User" alias="user"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="userMapper.xml"/>
        </mappers>
    </configuration>

    关于这个配置文件我说如下几点:

    1.第6行我们引入刚刚创建的db.properties文件,方便我们在配置数据库的时候通过${XXX}来直接引用其中的值。

    2.第7-9行给我们的User实体类取一个别名,这样在Mapper的配置文件中我们就可以直接使用这里的别名了。

    3.从第10行开始配置我们的mybatis运行环境,我们可以在environments节点中配置多个environment,比如开发环境下的environment,生产环境下的environment,然后在environments中通过default属性来选择你要使用哪一种环境。

    4.14-17行配置数据库相关属性,通过${XXX}来直接引用db.properties中的值。

    5.第21行到23行配置映射器Mapper,下面我们来说说如何创建Mapper

    有了这个XML文件,接下来我们就可以通过这个xml文件来获取一个SqlSession了,当然,如上篇博客所述,我们需要把SqlSessionFactory搞成单例模式,所以创建方式如下:

    public class DBUtils {
        private static SqlSessionFactory sqlSessionFactory = null;
        private static final Class CLASS_LOCK = DBUtils.class;
    
        public static SqlSessionFactory initSqlSessionFactory() {
            InputStream is = null;
            try {
                is = Resources.getResourceAsStream("mybatis-conf.xml");
            } catch (IOException e) {
                e.printStackTrace();
            }
            synchronized (CLASS_LOCK) {
                if (sqlSessionFactory == null) {
                    sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
                }
            }
            return sqlSessionFactory;
        }
    
        public static SqlSession openSqlSession() {
            if(sqlSessionFactory==null)
                initSqlSessionFactory();
            return sqlSessionFactory.openSession();
        }
    }

    关于这个类我这里就不做过多说明了,小伙伴们有疑问可以参考上篇博客

    创建Mapper

    上篇博客我们说过Mapper由两部分组成,Java接口+注解或者Java接口+XML配置,我们在上篇博客中使用Java接口+注解的方式来创建了Mapper,那么本文我们就来看看一种更常用的方式Java接口+XML配置的方式。

    创建Java接口:

    public interface UserMapper {
        public User getUser(Long id);
    
        public int insertUser(User user);
    
        public int deleteUser(Long id);
    }

    小伙伴们注意,这里我并没有给getUser方法添加@Select注解,我们将在xml配置文件中通过xml来解决这个问题,同时我们还添加了两个方法,一个向数据库中添加数据,一个删除数据。

    创建配置文件

    在resources中创建userMapper.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="org.sang.db.UserMapper">
        <select id="getUser" resultType="user" parameterType="Long">
            select * from user where id = #{id}
        </select>
        <insert id="insertUser" parameterType="user">
            INSERT INTO user(username,password,address) VALUES (#{username},#{password},#{address})
        </insert>
        <delete id="deleteUser" parameterType="Long">
            DELETE FROM user where id=#{id}
        </delete>
    </mapper>

    关于这个配置文件我说两点:

    1.mapper节点的namespace属性就是UserMapper接口的全路径
    2.select节点的id属性就是UserMapper中的方法名称,resultType属性的值是我们在mybatis-conf.xml中定义给User类定义的别名,parameterType是指getUser方法参数的类型。
    3.insert节点用来执行数据的插入操作
    4.delete节点用来执行数据的删除操作

    OK ,最后再给小伙伴们看看我们的实体类,如下:

    public class User {
        private Long id;
        private String username;
        private String password;
        private String address;
    
        //省略getter/setter
    }

    OK,如此之后,我们就可以来测试代码啦。

    测试

    查询

        @Test
        public void test1() {
            SqlSession sqlSession = null;
            try {
                sqlSession = DBUtils.openSqlSession();
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                User user = userMapper.getUser(1l);
                System.out.println(user);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
    
        }

    查询结果如下:
    这里写图片描述

    添加

        @Test
        public void test2() {
            SqlSession sqlSession = null;
            try {
                sqlSession = DBUtils.openSqlSession();
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                for (int i = 0; i < 3; i++) {
                    userMapper.insertUser(new User(null, "u-" + i, "p-" + i, "a-" + i));
                }
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }

    添加结果:
    这里写图片描述

    删除

        @Test
        public void test3() {
            SqlSession sqlSession = null;
            try {
                sqlSession = DBUtils.openSqlSession();
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                int i = userMapper.deleteUser(5l);
                System.out.println(i);
                sqlSession.commit();
            } catch (Exception e) {
                e.printStackTrace();
                sqlSession.rollback();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }

    删除结果:
    这里写图片描述

    OK,以上就是我们通过xml配置文件来使用mybatis。

    本文案例下载:
    本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test27-mybatis3

    以上。

    参考资料:
    1.http://www.mybatis.org/mybatis-3/zh/index.html
    2.《深入浅出MyBatis 技术原理与实战》第二章

    关注公众号【江南一点雨】,专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!

  • 相关阅读:
    STM32-M0中断优先级介绍
    source insight之quicker.em宏的使用
    LORA---关于LORA的30个常见问题解答
    【原创】Mac上编译Hadoop1.0.3出现的一些问题
    Mac中下载JDK手动更新出现“只支持10.7.3以上的系统版本”问题解决方案
    【Java基础】Java内部类
    【Java基础】Java类及成员和修饰符的关系
    【Java基础】Java接口的总结
    【Java基础】抽象类和抽象方法的总结
    【Java基础】Java中的多态
  • 原文地址:https://www.cnblogs.com/lenve/p/7530974.html
Copyright © 2011-2022 走看看