Mybatis学习(一)基础搭建,入门案例

书写该文档主要是为了给自己的学习路上一点总结,不然每次都是光看,看完了就忘。
以下均是自己的理解和思考,水平有限,不保证完全正确,仅供参考
跟随视频学习地址:https://www.bilibili.com/video/av69742084

什么是mybatis

mybatis的属于持久层的框架,主要作用就是代替原来的jdbc连接数据库,让开发者能够专注于sql的描写,而不需要考虑如何每次连接数据库时繁琐的过程,减少代码量。

运行mybatis需要准备什么

mybatis运行最基础的就是需要相关的jar包。我们可以先在idea中新建一个maven项目
在视频里老师教了一个有用的方法:就是将新建的maven项目中的src文件夹删除,然后在maven项目上右键新建一个moudle,然后这个moudle属于原有项目的子项目。可以直接复用父maven项目的pom.xml,而不需要再次在子项目的pom文件里面再写一遍相关的dependency。
首先我们在最外层的pom.xml里面加上以下的maven代码

<dependencies>
        <!--postgres驱动-->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.10</version>
        </dependency>
        <!--mybatis驱动-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!--junit包-->
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
以上我们就已经将mabatis的相关依赖添加完毕,等maven自动下载相关jar包。

接下来我们开始写一个小入门案例:

首先我们在自己的数据库中新建一个user1表(至于为什么不用user作为名字。我在实际敲得时候发现postgres数据库的select * from user语句搜出来的是当前数据库的用户名,非user表的数据,有点费解。估计user是关键字的缘故,遂将表名改成user1)该表有三个字段,如图:在这里插入图片描述
== 注意表的字段名和接下来新建的pojo类的私有属性名必须相同==
接下来我们在src.main.java下新建一个文件夹:pojo类,内容如下:

package pojo;

public class User {
 private int id;
 private String name;
 private String pwd;

 public User() {
 }

 public User(int id, String name, String pwd) {
     this.id = id;
     this.name = name;
     this.pwd = pwd;
 }

 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 + '\'' +
             '}';
 }
}

然后我们按照mybatis的官方文档获取一个SqlSessionFactory对象。
步骤是:我们现在java文件夹新家一个utils的文件夹,然后在utils的文件夹里面新建一个类,类名叫做MybatisUtils.这个类的作用是返回mybatis的SQLSessionFactory返回的sqlSession类,这段是mybatis官方提供的方法,固定套路

public class MybatisUtils  {

  private  static SqlSessionFactory sqlSessionFactory;
  static {
      try {
          //使用mybatis第一步获取SqlSessionFactory对象
          String resource = "mybatis-config.xml";
          InputStream inputStream;
          inputStream = Resources.getResourceAsStream(resource);
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

  public static SqlSession getSqlSession(){
      return sqlSessionFactory.openSession();
  }

然后在resource文件下新建一个xml文件。命名为: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="org.postgresql.Driver"/>
              <property name="url" value="jdbc:postgresql://127.0.0.1:5434/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
              <property name="username" value="postgres"/>
              <property name="password" value="951024"/>
          </dataSource>
      </environment>
  </environments>
  <mappers>
      <mapper resource="dao/userMapper.xml"/>
  </mappers>
</configuration>

来解析一下这个文件,其中需要自己修改的是红框部分
在这里插入图片描述
上面的红框是写你的jdbc的信息,也就是一次性配置一下你的jdbc文件
然后,下面的框是写的你Mapper.xml文件位置,注意,mapper resource文件路径是用/隔开,而driver的路径是用".“隔开,这点新手一定要注意,文件路径用/隔开,java类的结构化区分用”."
接着在main->java下新建一个dao文件夹(其实也就是mapper文件夹,这里为dao是为了与之前学习的jdbc连接学习,就先设置的是dao)
dao文件夹下先新建一个dao接口,新建UserDao接口,内容为:

public interface UserDao {
  List<User> getUserList();
}

在同样的文件夹下面新建一个userMapper.xml这个xml需要加载到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">
      <!--这个mapper需要和对应的接口绑定,namespace则是接口的所在路径-->
<mapper namespace="dao.UserDao">
  <!--查询语句,select表明这是一个查询语句,然后id则是接口中的方法名,
  resultType则是对应的pojo类,这里注意一点,pojo类的属性值要和数据库表中的字段名相同-->
  <select id="getUserList" resultType="pojo.User">
  select * from user1
  </select>
</mapper>

然后在test—>java->下新建一个dao文件夹,主要是为了保证test中的文件位置和main中的位置保持一致,避免出问题,我们新建一个测试类UserDaoTest
内容为:

public class UserDaoTest {
  @Test
  public void test(){
      SqlSession sqlSession = MybatisUtils.getSqlSession();
      UserDao mapper = sqlSession.getMapper(UserDao.class);
      List<User> userList = mapper.getUserList();
      for(User user:userList){
          System.out.println(user);
      }
      sqlSession.close();
  }
}

当点击运行的时候会报一个这个错误:
在这里插入图片描述
主要是maven的一个问题,maven规定约定大于配置,他在test文件夹不会对应生成Usermapper.xml文件夹从而导致文件缺失导致错误。
解决方法在pom.xml文件夹里面加上

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

添加完后再重新运行就好了。
控制台出现:
在这里插入图片描述
即表示本次通过mybatis执行sql查询成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值