mybatis单框架通用mapper使用(一)

mybatis 通用mapper使用(一)

1.导入依赖

<!--依赖 通用mapper-->
<dependency>
    <groupId>com.github.abel533</groupId>
    <artifactId>mapper</artifactId>
    <version>3.0.1</version>
</dependency>
<!--分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.1</version>
</dependency>

2 配置主配置文件mybatis-config.xml

2.1 需要添加的代码

<plugins>
  <!--  分页:-->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 设置数据库类型 Oracle,Mysql,MariaDB,
            SQLite,Hsqldb,PostgreSQL六种数据库  value就是你传入的数据库-->
        <property name="helperDialect" value="mysql" />
        <!--分页合理化 输入的页码少于1页时,查询的是首页 大于最后一页的页码数,查询的是最后一页-->
        <property name="reasonable" value="true"/>
    </plugin>
  <!--  通用Mapper-->
    <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
        <property name="mappers" value="com.github.abel533.mapper.Mapper" />
    </plugin>
</plugins>

2.2 添加的位置

typeAliases标签后面

2.3 完整的mybatis-config文件

<?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>
    <!--引入jdbc配置文件 引入文件后就能调用里面的值了-->
    <properties resource="jdbc.properties"></properties>
    <!--以类名作为别名 都是.的形式 让resultType写的短一些-->
    <!--全局设置-->
    <settings>
        <!--只要多表联查,就是懒加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <package name="entity"/>
    </typeAliases>
    <plugins>
      <!--  分页:-->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,
                SQLite,Hsqldb,PostgreSQL六种数据库  value就是你传入的数据库-->
            <property name="helperDialect" value="mysql" />
            <!--分页合理化 输入的页码少于1页时,查询的是首页 大于最后一页的页码数,查询的是最后一页-->
            <property name="reasonable" value="true"/>
        </plugin>
      <!--  通用Mapper-->
        <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
            <property name="mappers" value="com.github.abel533.mapper.Mapper" />
        </plugin>
    </plugins>
    <!--环境选择 default是谁 就选谁,只能选择一个-->
    <environments default="mysql">
        <!--多种环境之一 上面的id要与default里面的值要保持一致-->
        <environment id="mysql">
            <!--事物管理器 JDBC 使用JDBC管理事务(事物提交是自动的)
            MANAGED Spring容器去提交-->
            <transactionManager type="JDBC"/>
            <!--dataSource数据源 连接数据库的对象
                unPooled是没有连接池的
              POOLED是连接池的 pool游泳
              JNDi外部容器管理连接-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载mapper文件-->
    <mappers>
    <!--    <mapper resource="mapper/EmpMapper.xml"/>-->
        <!--扫描mapper接口的 该方式接口必须与mapper.xml文件名完全一致 且同一目录-->
        <package name="mapper"/>
    </mappers>
</configuration>

3 设置实体类并给其加上JPA注解

3.1 代码展示

package entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

/**
 *  JPA注解 规范 实体与类的对应关系
 *  所有的注解都是可选的
 *  所有驼峰转下划线
 *  @Table(name="songs") 指定表名 默认类名作为表名
 * @Id 主键 根据id查询或相关方法需要识别
 * @Column(name="字段名") 普通字段 默认属性名为字段名 可以指定字段名
 * @Transient 指定该属性不与数据库关联
 * id是一定要加的
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
//@Table(name="songs")
public class Songs implements Serializable {
    @Id
    private Integer id;
    private String singerName;
    private String album;
    private String albumImg;
    private String name;
    private String releaseDate;
}

3.2 要点记录

 JPA注解 规范 实体与类的对应关系
a 所有的注解都是可选的
b 所有驼峰转下划线 例如singerName会在通用mapper的作用下转换成singer_name的形式
c @Table(name="songs") 指定表名 默认类名作为表名(会把类名的首字母从大写转换成小写)
d @Id 主键 下一行的字段是id,一般都建议写上
e  @Column(name="字段名") 普通字段 默认属性名为字段名 可以指定字段名(出现实体类名想要和数据库表的名字不一样的时候)
f @Transient 指定该属性不与数据库关联,使用后查询就会不会管它,得到的值就会为null,

4 书写SongsMapper类

4.1 创建SongsMapper接口并继承mapper类

package mapper;

import com.github.abel533.mapper.Mapper;
import entity.Songs;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface SongsMapper  extends Mapper<Songs> {
}

4.2 在接口里面使用注解实现查询

 @Select("SELECT * FROM songs WHERE singer_name=#{sname}")
 List<Songs> find(String sname);

4.3 完整的SongsMapper接口版本

package mapper;

import com.github.abel533.mapper.Mapper;
import entity.Songs;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface SongsMapper  extends Mapper<Songs> {
    @Select("SELECT * FROM songs WHERE singer_name=#{sname}")
    List<Songs> find(String sname);
}

5 测试代码

 @Test
    public void t1(){
        SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
        SqlSession sqlSession = sf.openSession();
        SongsMapper mapper = sqlSession.getMapper(SongsMapper.class);
        //分页设置后 仅对最近的一条查询语句分页,第一个参数为当前页码数,第二个参数为一页的数据条数,这个是物理分页
        PageHelper.startPage(1, 10);
        List<Songs> list = mapper.select(null);
        list.forEach(System.out::println);
    }

6 测试运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值