微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mybatis_千峰

MyBatis

lombok

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。官方地址:https://projectlombok.org/,github地址:https://github.com/rzwitserloot/lombok

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的java类

添加插件

plugins

pom.xml添加依赖

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

主要注解

注解实现功能代码可以在.class文件里看到

@Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法

@Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法

@Getter :使用方法同上,区别在于生成的是getter方法

@ToString :注解在类,添加toString方法

@requiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。

@AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法

@Slf4j: 注解在类,生成log变量,严格意义来说是常量。

@Cleanup:作用于变量,保证该变量代表的资源会被自动关闭调用资源的close()方法,如果该资源有其它关闭方法,可使用 @C leanup(“methodName”)来指定。

下面两个通常一起用,以防覆盖无参构造

@EqualsAndHashCode: 注解在类,生成hashCode和equals方法

@NoArgsConstructor: 注解在类,生成无参的构造方法

@EqualsAndHashCode

  1. 此注解会生成equals(Object other) 和 hashCode()方法
  2. 认使用非静态,非瞬态的属性
  3. 可通过参数exclude排除一些属性
  4. 可通过参数of指定仅使用哪些属性
  5. 认仅使用该类中定义的属性且不调用父类方法

@Accessors: 里面有参数可以设置,例如“@Accessors(chain = true)”表示该类的set方法可以链式接下去

country.setName().setLocial();
//代码实现的原理是在一个set方法结束之后返回一个this对象

实现原理

在这里插入图片描述

MyBatis简介

属于ORM框架,负责项目中的持久层(DAO),负责项目中的CRUD,以及事务处理,负责数据库的增删改查,是ssm里面的M

mybatis文档

创建项目

1. MyBatis的传入参数parameterType类型分两种

  • 基本数据类型:int,string,long,Date

  • 复杂数据类型:类和Map

多个参数传递,只管传回自动识别

  <select id="getPage"  resultType="MyBatis_千.com.Country">
        select * from country limit #{arg0} , #{arg1}
    </select>

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

</configuration>

mapper文件

映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的sql语句

namespace解析

<?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就是相当于DAO的实现类-->
<mapper namespace="MyBatis_千.DAO.CountryDao">
    <select id="getCountryCount" resultType="int">
        select count(1) from country;
    </select>

    <!--返回值可以不写
         但是
         参数类型必须写-->
    <insert id="addCountry" parameterType="MyBatis_千.com.Country">
        insert into country(cid,cname)
        values(#{cId},#{cName});
--         //实体类名要和数据库名一样才可以映射
    </insert>

    <update id="updateCounter" parameterType="MyBatis_千.com.Country">
        update country set cname = #{cName} where cid = #{cId}
        -- //注意变量名cname是要与数据库里面一样,#{cName}是与实体类一样,注意大小写,数据库不分大小写但是实体类分
    </update>

    <delete id="deleteCountryById" parameterType="int">
        delete from country where cid = #{id}
    </delete>
</mapper>

测试代码

在测试里面除了select不需要commit提交事件,其余的都要提交事件

package Test_MyBatis_千.com;

import MyBatis_千.DAO.CountryDao;
import MyBatis_千.com.Country;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.sqlSession;
import org.apache.ibatis.session.sqlSessionFactory;
import org.apache.ibatis.session.sqlSessionFactoryBuilder;
import org.junit.Test;


import java.io.IOException;
import java.io.InputStream;

/**
 * @author BXO
 * @version 1.0
 * @description: Todo
 * @date 2022/3/16 20:58
 */
public class TestCountry {
    @Test
    public void TestCountry()
    {
        Country country = new Country();
        System.out.println(country);

    }

    @Test
    public void Countrytest()  {
      try {
          //读取配置文件 导的是ibatis的包
          InputStream is = Resources.getResourceAsstream("mybatis_config.xml");

          //获取实现类
          sqlSessionFactoryBuilder builder = new sqlSessionFactoryBuilder();

          //通过sqlSessionFactoryBuilder构建工厂
          sqlSessionFactory factory = builder.build(is);

          //通过工厂获取会话对象
          sqlSession sqlSession = factory.openSession();

          //通过sqlSession获取实现类
          //两种方法获得
          CountryDao countryDao = sqlSession.getMapper(CountryDao.class);

          System.out.println(countryDao.getCountryCount());

          int i = sqlSession.selectOne("getCountryCount");
          System.out.println(i);
          session.close();
          
      }catch (IOException e)
      {
          e.printstacktrace();
      }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐