【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

原文地址:https://www.cnblogs.com/yif0118/p/14408732.html