• 【java框架】MyBatis(4)--MyBatis基于Maven环境构建


    1.Mybatis基于Maven项目QuickStart

    • Mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,是开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
    • Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
    • 最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

     

    1.1.MyBatis构建开发步骤

    一般基于Maven项目来构建MyBatis的项目环境主要有以下几个步骤:

    ①创建IDEA Maven项目,添加pom.xml中MyBatis依赖坐标;

    ②创建数据库表,本例以user表单为例;

    ③编写Domain实体类,本例以User实体类为例;

    ④编写数据库实体映射文件UserMapper.xml;

    ⑤编写核心文件mybatis-config.xml;

    ⑥编写测试类测试CRUD操作

    1.2.MyBatis基于Maven项目环境搭建

    ①首先在创建新项目时直接选择创建Maven项目,不勾选“Create from archetype”;

    ②引入MyBatis及相关坐标依赖pom配置如下:

    pom.xml文件配置:

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

    ③创建实体类与数据库表;

    user表:

    User实体类(省略get/set及toString()):

    public class User {
        private int id;
        private String username;
        private String password;
    }

    ④编写对应domain下的XxxMapper.xml文件、MyBatis核心配置文件mybatis-config.xml:

    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">
    <!--namespace表示当前mapper的唯一标识:一般使用domain的全路径名+Mapper来命名-->
    <mapper namespace="com.fengye.domain.UserMapper">
        <!--id:方法表示,一般配置对应的方法;
            resultType:表示该方法有返回,返回需要封装到对应实体的类型-->
        <select id="findAll" resultType="com.fengye.domain.User">
            select * from user
        </select>
    </mapper>

    mybatis-config.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>
        <!-- 引入jdbc.properties配置文件 -->
        <properties resource="jdbc.properties"></properties>
        <!--MyBatis数据源环境配置-->
        <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>
        <!--加载Mapper.xml映射文件配置-->
        <mappers>
            <!--注意在IDEA构建Maven项目中有些特殊:resource属性不能配置成:com/fengye/mapper/UserMapper.xml-->
            <mapper resource="com.fengye.mapper/UserMapper.xml"/>
        </mappers>
    </configuration>

     

    ⑤抽取出jdbc.properties配置文件:

    jdbc.properties

    driver = com.mysql.jdbc.Driver
    url = jdbc:mysql://localhost:3306/mybatisreview_0216
    username = root
    password = admin

     

    完成上述步骤后一个最简单的MyBatisMaven项目环境就搭建好了,项目构建如下图所示:

    1.3.构建测试类测试环境

    完成上述操作之后,我们编写了一个findAll进行数据库的查询,下面我们可以编写一个Junit语句来执行数据库查询操作:

    查询项目构建如下图所示:

    具体测试类如下:

    public class MyBatisQuickTest {
        /**
         * MyBatis环境搭建测试:测试查询语句
         * @throws IOException
         */
        @Test
        public void test1() throws IOException {
            //加载核心配置文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //获得sqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //获得sqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //执行sql语句
            List<User> users = sqlSession.selectList("com.fengye.domain.UserMapper.findAll");
            //打印结果
            System.out.println(users);
            //释放资源
            sqlSession.close();
        }
    }

    在实际过程中要注意一个问题,UserMapper.xml文件是放在resources资源文件夹下,在mybtais-config.xml中引入这个Mapper文件时一定要右键选择”Copy Relative Path”的路径进行配置:

    如果使用resource=”com/fengye/mapper/UserMapper.xml,有时会因为IDEAMaven项目构建出现找不到XxxMapper.xml文件错误:

     正确配置如下:

    <!--加载Mapper.xml映射文件配置-->
    <mappers>
        <!--注意在IDEA构建Maven项目中有些特殊:resource属性不能配置成:com/fengye/mapper/UserMapper.xml-->
        <mapper resource="com.fengye.mapper/UserMapper.xml"/>
    </mappers>

     

    运行测试后查询数据库打印输出数据如下:

    此外,上述问题还有另外一种情况是XxxMapper.xml文件放在src/java目录的子目录之下,造成项目编译运行后在target文件包中未被编译,此时需要在pom.xml中添加如下配置即可:

    <build>
          <resources>
              <resource>
                  <directory>src/main/java</directory>
                  <includes>
                      <include>**/*.xml</include>
                  </includes>
               </resource>
           </resources>
    </build>

    问题定位参考博客原文:https://blog.csdn.net/weixin_42323802/article/details/83717814 

    1.4.MyBatis执行简单CRUD操作

    之前在构建Maven项目环境时已经执行了全表查询的配置操作,下面进行简单地增删改及查询一条数据操作:

    增删改查映射配置与API:

    对应在UserMapper.xml与查询代码中做如下配置操作:

    查询一条数据:

    Mapper.xml

    <!--id:方法表示,一般配置对应的方法;
        resultType:表示该方法有返回,返回需要封装到对应实体的类型-->
    <select id="findAll" resultType="com.fengye.domain.User">
        select * from user
    </select>
    //执行sql语句
    User user = sqlSession.selectOne("com.fengye.domain.UserMapper.findOneById", 2);

    添加一条数据:

    Mapper.xml

    <insert id="insert" parameterType="com.fengye.domain.User">
        insert into user values (#{id}, #{username}, #{password})
    </insert>
    //执行sql语句
    User user = new User();
    user.setId(6);
    user.setUsername("lily");
    user.setPassword("7652");
    //命令空间namespace+id,参数传递要插入的User
    int insertId = sqlSession.insert("com.fengye.domain.UserMapper.insert", user);
    //增删改需要提交事务
    sqlSession.commit();

    修改一条数据:

    Mapper.xml

    <update id="update" parameterType="com.fengye.domain.User">
    <!--注意多个修改参数之间使用","隔开,而不是用and隔开-->
        update user set username = #{username} , password = #{password}
        where id = #{id}
    </update>
    //执行sql语句
    User user = new User();
    user.setId(6);
    user.setUsername("mike");
    user.setPassword("1110");
    int updateId = sqlSession.update("com.fengye.domain.UserMapper.update", user);
    //增删改需要提交事务
    sqlSession.commit();

    删除一条数据:

    Mapper.xml

    <delete id="deleteById" parameterType="java.lang.Integer">
        delete from user where id = #{id}
    </delete>
    //执行sql语句
    int deleteId = sqlSession.delete("com.fengye.domain.UserMapper.deleteById", 6);
    //增删改需要提交事务
    sqlSession.commit();

    参考文档:

    MyBtais 3.0中文官方文档:

    https://mybatis.org/mybatis-3/zh/index.html

    本博客中项目示例代码均已上传至github:

    https://github.com/devyf/MyBatisReview/tree/master/fengye_mybatis_quickstart

  • 相关阅读:
    ContentDisposition的使用方法
    winform上传文件解决方案
    C#中的委托和事件
    Sql Update语句使用表别名的方法(多种方法,经典)
    查找在菜单里提交的报表所在职责
    查找在标准请求组里提交的报表所在的职责
    根据报表文件名称关键字查找报表的执行文件名称等信息
    根据窗口名称查找关键字弹性域用到的表,列等信息
    EBS中取profile值的用法
    查找运行请求时间,参数等(可以是某用户的,某个报表)
  • 原文地址:https://www.cnblogs.com/yif0118/p/14408732.html
Copyright © 2020-2023  润新知