Mybatis学习——用Maven快速构建Mybatis项目并测试(对比JDBC代码)

Mybatis学习——如何快速构建Mybatis项目

学习完JDBC后再看Mybatis后,就会发现Mybatis就是将JDBC复杂繁琐的一套进行了简化,只需要数个配置xml文件,即可实现JDBC中的增删改查操作。这里就记录一下自己的学习过程。

注:学习资源来自于遇见狂神说的Mybatis学习教程以及Mybatis官方文档

环境搭建包括如下几步:

Step1:构建Maven项目——导入响应的包依赖,以及响应的过滤信息

Step2:配置核心xml文件mybatsi-config.xml,填写路径信息,并测试链接数据库

Step3:构建pojo类以及包含了方法的接口

Step4:构建mapper.xml(填写的sql语句),并在主要资源类中注册该mapper

Step5:在Test文件中测试

Step1 使用Maven构建项目

创建好Maven项目后修改内部的pom.xml文件,导入必要的三种包——mysqlmybatis以及junit

<!--导入依赖-->
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>

接下来还需要在pom.xml中配置对应的过滤信息,目的是使的在打包成jar(生成target文件)配置文件.xml以及.properties也能成功生成。对应的代码如下

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

有了上述环境配置就可以进行进入第二步了

Step2 配置数据库基本信息

根据Mybatis官方文档,需要创建mybatis-config.xml文件,并配置连接数据库需要的四个基本信息(驱动,url,用户名,密码)

<?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>

  
  
</configuration>

该核心配置文件中最重要的标签是,其中涉及许多内置标签,见如下图所示:

其中,关于数据库连接最重要的配置标签是配置标签,在该标签下只有标签;而在标签下则有和两个标签,这两个标签也是连接数据库最终需要配置的标签。

<environments default="test">
  <environment id="test">
    <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>

关于核心配置类标签的详细介绍见另一篇博客,这里不做赘述。


这里不妨对比学习一下JDBC中的配置文件

在JDBC中,我们需要填写properties文件,并在其中填写配置信息

user=xxxx
password=xxxx
url=jdbc:mysql://xxxx/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
driverClass=com.mysql.jdbc.Driver

有了上述的内容,接下来可以进入第三步

Step3 获取sql执行对象sqlSession

在Mybatis中sqlSession是执行sql语句的类对象,其类似于JDBC中的preparedStatement

这里不妨再回忆一下JDBC中如何获取获取preparedStatement对象的,其过程为如下三步:

Step1:读取配置文件的基本信息

Step2:加载驱动

Step3:获取连接获取连接

代码如下:

public static Connection getConnection() throws Exception {
  // 1.获取连接配置信息
  InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
  Properties pros = new Properties();
  pros.load(is);

  String user = pros.getProperty("user");
  String password = pros.getProperty("password");
  String url = pros.getProperty("url");
  String driverClass = pros.getProperty("driverClass");

  // 2.加载驱动
  Class.forName(driverClass);

  // 3.获取连接
  Connection connection = DriverManager.getConnection(url, user, password);
  return connection;
}

conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);

但在mybats中获取sqlSession要要方便得多,只需要如下两步

Step1:读取配置文件并配置sqlSessionFactory

Step2:从sqlSessionFactory中获取sqlSession

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            // 使用Mybatis的第一步,
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e){
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

由于该方法是很常用的方法,因此将其写成工具类,放置在pojo同一个文件夹下。

Step4 构建数据表,pojo类,方法接口以及Mapper.xml

在使用增删改之前,数据库中先构造数据表

然后在pojo构建响应的bean类

public class User {
    private int id;
    private String name;
    private String pwd;
  // 省略getset方法
}

有了上述内容,接下来就可以构建dao接口,接口中需要定义响应的方法

public interface UserMapper {

    List<User> getUserList();	// 查询

    User getUserById(int id); // 查询

    int addUser(User user); // 增

    int updateUser(User user); //改

    int deleteUser(int id); //删
}

在JDBC中,定义了接口后通常会写baseDao实现类以及各种方法的实现类。但在Mybatis中,只需要将相应信息写在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="com.ggs.dao.UserMapper">
    <select id="getUserList" resultType="com.ggs.pojo.User">
        select * from Mybatis.user
    </select>

    <select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
        select * from Mybatis.user where id = #{id}
    </select>

    <insert id="addUser" parameterType="com.ggs.pojo.User">
        insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>

    <update id="updateUser" parameterType="com.ggs.pojo.User">
        update Mybatis.user
        set name = #{name},pwd=#{pwd}
        where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from Mybatis.user where id = #{id}
    </delete>
</mapper>

其中,mappernamespace属性需要指向定义的dao接口。mapper下的各种标签对应着各种sql语句。这里需要注意的是各种标签中各个属性的含义

  • id:Mapper中的各种方法
  • resultType:结果类型
  • parameterType:参数类型

关于参数类型以及结果集的标签说明见另一篇博客。

在写完mapper.xml后还需要在主配置文件中注册mapper信息

<mappers>
  <mapper resource="com/ggs/dao/UserMapper.xml"/>
</mappers>

小结:至此,所有环境配置均已完成,最终得到的项目文件如下图所示

核心配置文件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>
    <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://xxx.xxx.xxx.xxx:3306/Mybatis?useSSL=false&amp;
                useUnicode=true&amp;characterEncoding=UTF8"/>
                <property name="username" value="xxxx"/>
                <property name="password" value="xxxx"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/ggs/dao/UserMapper.xml"/>
    </mappers>

</configuration>

mapper类配置文件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="com.ggs.dao.UserMapper">

    <select id="getUserList" resultType="com.ggs.pojo.User">
        select * from Mybatis.user
    </select>

    <select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
        select * from Mybatis.user where id = #{id}
    </select>


    <insert id="addUser" parameterType="com.ggs.pojo.User">
        insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>

    <update id="updateUser" parameterType="com.ggs.pojo.User">
        update Mybatis.user
        set name = #{name},pwd=#{pwd}
        where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from Mybatis.user where id = #{id}
    </delete>

</mapper>

Step5 使用sqlSession完成对数据库增删改操作

分别测试CRUD方法

public class UserDaoTest {
    @Test
    public void test(){
        // 1. 获取SqlSession对象
        SqlSession session = MybatisUtils.getSqlSession();
        //  方式一:getMapper执行SQL
        UserMapper mapper = session.getMapper(UserMapper.class);
      
      // 查询用户
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user.toString());
        }
      
      // 插入用户
      int i = mapper.addUser(user);
        if(i!=0)
            System.out.println("插入成功!");
        sqlSession.commit();
      
      // 更新用户
      mapper.updateUser(new User(3,"黄奕1","123456"));
        sqlSession.commit();
      
      // 删除用户
      mapper.deleteUser(2);
        sqlSession.commit();
      
        // 关闭sqlSession
        session.close();
    }
}

不要忘记提交事务!!

总结

Mybatis是一款十分优秀的持久化框架,在和JDBC对比过程中可以发现,其只需要数行配置信息便实现了数据库的连接,sql语句的调用。不需要再像传统JDBC实现一样,编写许多实现类来完成增删改操作,大大简化了开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值