2021-06-21Mybatis 学习日记(一)

环境说明

jdk 8 +
MySQL 5.7.19
maven-3.6.1
IDEA

什么是Mybatis

MyBatis 是一款优秀的持久层框架

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。

MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。

2013年11月迁移到Github .

Mybatis官方文档 :官方文档

GitHub : github

持久化

持久化是将程序数据在持久状态和瞬时状态间转换的机制。

即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

JDBC就是一种持久化机制。文件IO也是一种持久化机制。

在生活中 : 将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。

为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。

内存过于昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。

持久层

什么是持久层?

完成持久化工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象】

大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。

不过这里有一个字需要特别强调,也就是所谓的“层”。对于应用系统而言,数据持久功能大多是必不可少的组成部分。也就是说,我们的系统中,已经天然的具备了“持久层”概念?也许是,但也许实际情况并非如此。之所以要独立出一个“持久层”的概念,而不是“持久模块”,“持久单元”,也就意味着,我们的系统架构中,应该有一个相对独立的逻辑层面,专注于数据持久化逻辑的实现.

与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界。【说白了就是用来操作数据库存在的!】

Mybatis 的第一个程序

思路流程:搭建环境–>导入Mybatis—>编写代码—>测试

第一步:搭建实验数据库
CREATE DATABASE `mybatis`;

USE `mybatis`;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
第二步:新建一个项目,再新建一个java module。

项目结构如下Utiles工具类

第三步:导入相关jar包,从github上寻找
把下面的代码放入pom.xml文件中
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
       <scope>test</scope>
 </dependency>
第四步:编写工具类Utils

参考mybatis入门文档。这里的sqlSession可以简单的理解为创建一个数据库的连接对象

public class MybatisUtils {
  private static SqlSessionFactory sqlSessionFactory;
  static {
      try {
          String resource = "mybatis-config.xml";
          InputStream inputStream = Resources.getResourceAsStream(resource);
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
  /*
  * 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
  * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
  * */
  public static SqlSession getSqlSession(){
      return sqlSessionFactory.openSession();
  }
}
第五步:编写mybatis-config.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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个Mapper都需要在MyBATIS核心配置文件注册-->
    <mappers>
        <mapper resource="com/zhang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

注:另一种个通过properties文件的方式注入数据库 其中 db.properties的文件和 mybatis-config.xml文件编写内容如下

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8
username=root
passward=123456

<!--引入外部配置文件-->
    <properties resource="db.properties"/>
<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="${passward}"/>
            </dataSource>
        </environment>

    </environments>

第六步:编写实体类,要对应数据库表中的字段信息 。
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 + '\'' +
                '}';
    }
}

第七步:编写 UserMapper接口
public interface UserMapper {

    List<User> getUserList();  //获取所有对象信息  
    User getUserById(int id);   //通过id 获取对象
    void addUser(User user);       //插入对象信息 
    int updateUser(User user);      //修改 对象信息 
    int deleteUser(int id);         //删除一个对象
}
第八步:编写 UserMapper.xml文件,这里面要注意,把namespace的内容填写正确,这是与UserMapper接口创建出连接的方法
<?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">
<!--绑定一个UserDaoMapper接口-->
<!--当前src下的路径信息 -->
<mapper namespace="com.zhang.dao.UserMapper">


    <!--id与UserDao接口中的方法的名称相同
        resultType就是返回值类型,select查询出所有的对象-->
    <select id="getUserList" resultType="com.zhang.Pojo.User">
        select * from user
    </select>
    <!--根据id查询对象-->
    <select id="getUserById" parameterType="int" resultType="com.zhang.Pojo.User">
        select * from user where id = #{id}
    </select>

    <!--插入一个对象-->
    <insert id="addUser" parameterType="com.zhang.Pojo.User" >
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>


    <!--修改一个对象-->
    <update id="updateUser" parameterType="com.zhang.Pojo.User">
        update user
        set name = #{name}, pwd = #{pwd}
        where id = #{id};
    </update>

    <!--删除一个对象,,parameterType:参数类型-->
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>

</mapper>

注1:这里面我们可以发现,在传入参数类型上parameterType,每次传入 的是User对象时,都需要 写一个完整的路径,显得代码麻烦 冗余。所以 mybatis给我们提供了一个起别名的方法去解决这个问题。,我们 可以将下面的代码写入mybatis-config.xml文件中

<typeAliases>
        <typeAlias type="com.zhang.Pojo.User" alias="User"></typeAlias>
    </typeAliases>

注2:在向xml文件添加标签的 时候并不是随意的,这是有一定的顺序的。 <!
ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers?)

最后:我们在test文件中编写测试类

 @Test
    public void test(){
        //获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //方式一:getMapper
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userDao.getUserList();

        for (User user: userList  ) {
            System.out.println(user);

        }
        sqlSession.close();
    }

需要注意的问题

静态资源过滤问题

由于我们 在dao层文件夹中创建的UserMapper.xml文件,不在Resource文件中,可能存在无法被读取的情况(静态资源过滤问题),为了解决此问题,必须在项目根目录的pom.xml文件中插入如下代码
<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mybatis-plus-generator和mybatis-plus是用于简化MyBatis开发的两个工具。mybatis-plus是一个MyBatis的增强工具包,提供了一些便捷的操作,节约了编写简单SQL的时间。而mybatis-plus-generator是一个代码生成器,可以自动生成一些基本的Controller、Service、Mapper和Mapper.xml文件。 通过整合mybatis-plus和mybatis-plus-generator,我们可以更高效地开发项目中的单表增删改查功能。使用mybatis-plus-generator可以自动生成一些基本的文件,例如Controller、Service、Mapper和Mapper.xml,极大地减少了手动创建这些文件的时间和工作量。而mybatis-plus提供的便捷操作可以节约编写简单SQL的时间。 然而,对于一些逻辑复杂、多表操作或动态SQL等情况,建议使用原生SQL来处理。mybatis-plus支持原生SQL的使用,通过写原生SQL可以更灵活地满足这些复杂需求。 综上所述,通过整合mybatis-plus和mybatis-plus-generator,我们可以在开发中更高效地处理单表的增删改查功能,并且对于复杂的需求可以使用原生SQL来满足。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring cloud整合MyBatis-plus和mybatis-plus-generator](https://blog.csdn.net/cssweb_sh/article/details/123767029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mybatis-plus-generator(mybatisplus代码生成器篇)](https://blog.csdn.net/b13001216978/article/details/121690960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值