zoukankan      html  css  js  c++  java
  • Mybatis笔记(一):第一个Mybatis程序

    时间:2021/10/11

    本文是学习了b站狂神老师的视频后的一个总结,总结了一下编写一个mybatis项目所需的基本流程和可能遇到的一些bug。

    首先展示一下项目的整体结构,如下图:

     

    然后项目的具体流程如下所示: 

    一.创建数据库和相应的表

    这里我使用的mysql,创建了一个mybatis数据库,数据库中有一个user表,表中插入了两条记录。

    二.在maven项目的配置文件中插入依赖 

    这个项目中使用的依赖主要有mysql驱动、mybatis和junit。具体配置代码如下:

     1 <!--导入依赖-->
     2     <dependencies>
     3         <!--mysql驱动-->
     4         <dependency>
     5             <groupId>mysql</groupId>
     6             <artifactId>mysql-connector-java</artifactId>
     7             <version>5.1.46</version>
     8         </dependency>
     9         <!--mybatis-->
    10         <dependency>
    11             <groupId>org.mybatis</groupId>
    12             <artifactId>mybatis</artifactId>
    13             <version>3.5.6</version>
    14         </dependency>
    15         <!--junit-->
    16         <dependency>
    17             <groupId>junit</groupId>
    18             <artifactId>junit</artifactId>
    19             <version>4.13.1</version>
    20             <scope>test</scope>
    21         </dependency>
    22 
    23     </dependencies>

    三.编写mysql配置文件

    在写url时要注意后面的参数,比如时区什么的。

     1 <?xml version="1.0" encoding="UTF8" ?>
     2 <!DOCTYPE configuration
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <environments default="development">
     7         <environment id="development">
     8             <transactionManager type="JDBC"/>
     9             <dataSource type="POOLED">
    10                 <property name="driver" value="com.mysql.jdbc.Driver"/>
    11                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT"/>
    12                 <property name="username" value="root"/>
    13                 <property name="password" value="123456789.a"/>
    14             </dataSource>
    15         </environment>
    16     </environments>
    17 
    18     <mappers>
    19         <mapper resource="bupt/machi/dao/UserMapper.xml"/>
    20     </mappers>
    21 </configuration>

    四.编写获取SqlSession对象的工具类

    这段代码首先要读取mysql配置文件,然后通过输入流获取到SqlSessionFactory对象,最后获取SqlSession对象。

     1 package bupt.machi.utils;
     2 
     3 import org.apache.ibatis.io.Resources;
     4 import org.apache.ibatis.session.SqlSession;
     5 import org.apache.ibatis.session.SqlSessionFactory;
     6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     7 
     8 import java.io.IOException;
     9 import java.io.InputStream;
    10 
    11 //mybatis工具类,返回一个SqlSession对象
    12 public class MybatisUtils {
    13 
    14     private static SqlSessionFactory sqlSessionFactory;
    15 
    16     static{
    17         try{
    18             String resource = "mybatis_config.xml";
    19             InputStream inputStream =  Resources.getResourceAsStream(resource);
    20             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    21         }catch (IOException e){
    22             e.printStackTrace();
    23         }
    24     }
    25 
    26     public static SqlSession getSqlSession(){
    27         //获取SqlSession对象
    28         return sqlSessionFactory.openSession();
    29     }
    30 }

    五.编写实体类

    这里编写一个User实体类,属性必须与数据库中属性一一对应。

     1 package bupt.machi.pojo;
     2 
     3 //实体类
     4 public class User {
     5 
     6     private int id;
     7     private String name;
     8     private String pwd;
     9 
    10     public User(){
    11 
    12     }
    13 
    14     public User(int id, String name, String pwd){
    15         this.id = id;
    16         this.name = name;
    17         this.pwd = pwd;
    18     }
    19 
    20     public int getId(){
    21         return id;
    22     }
    23 
    24     public String getName() {
    25         return name;
    26     }
    27 
    28     public String getPwd(){
    29         return pwd;
    30     }
    31 
    32     public void setId(int id){
    33         this.id = id;
    34     }
    35 
    36     public void setName(String name){
    37         this.name = name;
    38     }
    39 
    40     public void setPwd(String pwd){
    41         this.pwd = pwd;
    42     }
    43 
    44     @Override
    45     public String toString(){
    46         return "User{" + "id=" + id + ",name=" + name + ",pwd=" + pwd + "}";
    47     }
    48 }

    六.编写dao/mapper接口

    1 package bupt.machi.dao;
    2 
    3 import bupt.machi.pojo.User;
    4 
    5 import java.util.List;
    6 
    7 public interface UserDao {
    8     List<User> getUserList();
    9 }

    七.编写sql操作的配置文件

    该文件起到了dao/mapper接口实现类的作用。

     1 <?xml version="1.0" encoding="UTF8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <!--绑定一个Dao接口,使用xml文件代替之前的实现类-->
     6 <mapper namespace="bupt.machi.dao.UserDao">
     7     <!--id对应方法名字-->
     8     <select id="getUserList" resultType="bupt.machi.pojo.User">
     9         select * from mybatis.user
    10     </select>
    11 </mapper>

    这里要注意resultType中写的是范型中的类型。

    八.编写测试类

    要注意这里测试类的路径要与被测试类的路径相同,最后要记得关闭SqlSession对象。

     1 package bupt.machi.dao;
     2 
     3 import bupt.machi.pojo.User;
     4 import bupt.machi.utils.MybatisUtils;
     5 import org.apache.ibatis.session.SqlSession;
     6 import org.junit.Test;
     7 
     8 import java.util.List;
     9 
    10 public class UserDaoTest {
    11 
    12     @Test
    13     public void test(){
    14         //获取SqlSession对象
    15         SqlSession sqlSession = MybatisUtils.getSqlSession();
    16 
    17         UserDao userDao = sqlSession.getMapper(UserDao.class);
    18         List<User> userList = userDao.getUserList();
    19 
    20         for (User user : userList) {
    21             System.out.println(user);
    22         }
    23 
    24         sqlSession.close();
    25     }
    26 }

    九.可能出现的bug以及解决方法

    1)在mysql配置文件中,需要通过mapper标签引入你编写的sql配置文件,每一个都必须引入。

    1 <mappers>
    2   <mapper resource="bupt/machi/dao/UserMapper.xml"/>
    3 </mappers>

    2)如果出现找不到sql配置文件的问题,可能是由于maven的资源过滤机制,要在父项目和子项目的配置文件中添加build标签。

    <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
    
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
        </build>
    努力,向上,自律
  • 相关阅读:
    韩信点兵 中国剩余定理
    A -- A. Quailty and Playing Cards 模拟 + 思考
    HDU 5904 LCIS DP
    Ubuntu上的android sdk提示 bash: ......sdk/platform-tools/adb或者emulator: 没有那个文件或目录 解决笔记
    重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)
    重学数据结构系列之——二叉排序树
    重学数据结构系列之——二叉树基础
    重学数据结构系列之——哈希表
    如何判断出栈序列合理性
    重学数据结构系列之——栈
  • 原文地址:https://www.cnblogs.com/machi12/p/15393924.html
Copyright © 2011-2022 走看看