Mybatis项目创建 + 规范

一、相关概念Mybatis

1.1 什么是Mybatis

  1. 是持久层框架:是一个用来操作数据库的持久层框架,基于JDBC开发的,可以简化JDBC的开发(将JDBC共性的东西放在框架里,程序员只要基于框架写个性的内容即可)
  2. 使用场景:我们一般会使用Mybatis操作关系型数据库
  3. 关于官网Mybatis官网
  4. 两个依赖的区分
    在这里插入图片描述

1.1 如何实现简化JDBC

  1. 创建数据库连接池DataSource:在Spring Boot的配置文件中配置一下数据库的信息即可
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  1. 通过DataSource获取数据库连接Connection:底层有一个默认的数据库连接池,可以直接从这里面拿连接
  2. 编写SQL语句:分为注解和xml两种写法
@Select("select * from userinfo")    //查询操作的注解写法
  1. 通过Connection即SQL创建命令对象 Statement
  2. 替换占位符
  3. 使用Statement执行SQL语句
  4. 根据查询/增删改执行不同的方法
  5. 处理结果
    • JDBC中,执行查询操作我们需要遍历结果集。而Mybatis直接返回一个List即可,Mybatis会根据我们的返回结果自动匹配
@Select("select * from userinfo")
List<UserInfo> selectAll();
  1. 处理异常和释放资源:异常还是要我们自己处理的,但一旦方法执行完了,Mybatis会立马帮我们释放资源

二、如何创建 Mybatis 项目

2.1 创建SpringBoot项目 + 加载依赖

  1. 需要加载的依赖
    在这里插入图片描述

2.2 准备数据库 以及 对象的映射

  1. 准备数据库:进行建库建表操作
    • 关于数据库客户端的使用:小黑框和图形化的数据库都可以使用
      在这里插入图片描述
  2. 对象的映射:数据库对象和Java对象映射
    在这里插入图片描述

2.3 配置数据库连接池

注意要根据自身数据库的情况,进行修改,如密码、数据库名、版本等

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

2.4 使用Mybatis操作数据库

  1. 创建包和接口:因为我们用的是@Mapper,所以包通常设置为【mapper】,类名则是以【Mapper】结尾,可以方便我们查找
  2. @Mapper:是ibatis提供的注解,ibatis是Mybatis前身。加了@Mapper就不需要再加上五大注解了。
    • 作用:寓意【Mybatis告诉Spring来管理这个对象】,效果和五大注解差不多。此处我们用的是Mybatis框架,故而不用五大注解。
  3. 为什么不是创建一个类:如果是一个类,selectAll方法里就必须要写方法的实现了
  4. @Select:表示一个查询语句,里面的参数是表示SQL语句的字符串。我们使用不同的注解,会调用不同的方法。
    在这里插入图片描述

2.5 单元测试

  1. 方式一:原始版:在src文件下里写一个代码调用接口。下面是在Controller层写,但这其实并不规范,毕竟单元测试的代码并不符合【控制层】的定义。
@RestController
public class UserInfoController {
    @Autowired
    private UserInfoMapper userInfoMapper;

    @PostConstruct
    public void init(){
        List<UserInfo> userInfos = userInfoMapper.selectAll();
        System.out.println(userInfos.toString());
    }
}
  1. 方式二:使用IDEA测试类:在Mapper接口下,选择generate —>test,让IDEA帮我们生成测试代码
    在这里插入图片描述

在这里插入图片描述

三、其他

3.1 数据库与Java对象的映射规则 ---- 结果映射

【1】概念介绍

  1. 什么是结果映射:Mybatis会自动根据数据库的字段名和Java对象的属性名进行映射
    • 名称一致:直接赋值
    • 名称不一致
      • 从mysql层面进行结果映射 :xxx as xxx
        不推荐,感觉改变了mysql的命名规范,而且把SQL语句弄得很复杂
      • 从Mybatis层面进行结果映射:告诉Mybatis哪些字段是对应的,让它帮我们映射
      • 配置驼峰自动转换:因为命名规范上,数据库默认用蛇形,Java属性名用小驼峰。故而可以直接写入配置文件,由Mybatis映射时自动转驼峰

【2】注解写法的处理方式

1. 对mysql查询结果重命名

@Select("select id, username, password, age, gender," +
        "phone, delete_flag as deleteFlag, create_time as createTime," +
        "update_time as updateTime from userInfo ")
List<UserInfo> selectAll();

在这里插入图片描述
2. 使用@Results、@Result
在这里插入图片描述
3. 配置自动转驼峰
:Mybatis拿到数据结果后,会读取配置,然后根据配置里的内容进行结果映射

mybatis:
  configuration:
    map-underscore-to-camel-case: true  #自动驼峰转换

【3】xml写法的处理方式

1. 对mysql查询结果重命名:和注解的一样

<?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="com.example.sp20240530.mapper.UserInfoXMLMapper">
    <select id="selectAll" resultType="com.example.sp20240530.model.UserInfo">
        select id, username, password, age, gender,
        phone, delete_flag as deleteFlag, create_time as createTime,
        update_time as updateTime from userInfo
    </select>
</mapper>
  1. 使用< resultMap>、< result>
    • resultType VS resultMap:前者指【结果的类型】,后者指【结果的映射】,有了resultMap就不需要resultType了

在这里插入图片描述

  1. 配置自动转驼峰:和注解的一样

3.2 传参规则

  1. 只有一个参数:如果只有一个参数,名称是可以不匹配的,Mybatis会直接拿去用。但通常情况下,为了方便去阅读,我们还是会让他们保持一致
@Mapper
public interface UserInfoMapper {
    @Select("select * from userinfo where id = #{id}")
    UserInfo selectUser(Integer id123);
}
  1. 有多个参数:要求名称对应上

3.3 参数重命名规则

  1. 参数不为对象:直接使用改名后的参数即可
@Mapper
public interface UserInfoMapper {

    @Select("select * from userinfo where id = #{userId}")
    UserInfo selectUser(@Param("userId") Integer id);

	//结合了映射规则,只有一个参数的情况
	@Select("select * from userinfo where id = #{userId111}")
    UserInfo selectUser2(@Param("userId") Integer id);
}
  1. 参数为对象:用【对象.属性名】的写法
    在这里插入图片描述

3.2 开发规范介绍

  1. XXXMapper:使用Mybatis对数据库的操作类,叫做XXXMapper(因为我们多用@Mapper)
  2. 企业建表规范:需要具备4个字段,哪怕项目中用不到,也需要我们有
    • id:身份标识
    • create_time:记录,可以方便后续使用
    • delete_flag:表示一个删除的标志,表示数据有无被删除,可以让我们使用【逻辑删除】而不是【物理删除】
      • 原理:企业开发中,我们一般不轻易删除数据,能用逻辑删除就用逻辑删除。
        (1)逻辑删除指从逻辑上进行数据删除,如把标志改变,后续查找的时候不查找这块。物理删除则是delete操作,真的从硬盘里删除了数据

        (2)一旦物理删除了,后续找回数据十分麻烦,我们也并不确定该数据在未来是否真的再也不用了,故而不推荐物理删除。

    • update_time:保障数据修改时的安全
  3. is_xxx:表达是否概念的字母,必须使用is_xxx的方式命名
  4. 字段名、表名全部小写,单词之间使用下划线分割:Mysql在Windows环境下不区分大小写,Linux环境下则是区分的,为了避免冲突,统一不用大写字母
  5. 开发时尽量不要使用*查询:需要查询哪些字段,直接去写即可,如果需要全部的字段就全部写完

3.3 打印 Mybatis 执行的SQL

  1. 作用:帮我们进行调试,看到SQL代码的执行情况(运行的SQL、参数、结果分别是什么)
  2. 打印在开发环境:该日志的打印只建议出现在开发环境中,不要出现在线上环境。
    • 原理:因为当前我们打印这个日志,是为了帮助开发人员进行数据上的调试的。线上环境已经不是调试阶段了
  3. 环境分类:我们在实际的开发工作中,通常分为下面四种环境
    • 开发环境:写代码过程中,进行调试的这个环境
      • 方式:本地开发,或者一些公司提供单独的服务器让员工进行开发调试
      • 数据库使用:使用的是开发环境的数据库
    • 测试环境:测试人员使用的
      • 数据库使用:使用的是测试的数据库、配置,和开发环境没什么关系
    • 预发布环境:和线上环境同等地位,但不对外提供服务,主要用来观测上线的程序是否会出问题
      • 数据库使用:和线上环境一样都用的是【线上数据库】
      • 数据库使用
    • 发布环境(线上环境):域名后面会对应好几个服务器,分为“发布环境”和“预发布环境”,用户访问只能访问到“发布环境”。
mybatis:
  configuration: # 配置打印 MyBatis 执行的 SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MyBatis自动创建表是指在使用Spring MyBatis框架时,可以通过配置文件的设置来实现数据库表的自动创建。在使用MyBatis框架时,我们需要在数据库中手动创建相应的表,但是对于一些新项目中表较多的情况下,手动创建表比较耗时,而且容易产生错误。而使用Spring MyBatis框架自动创建表则可以节省大量的时间和精力,并且减少了错误的产生。 具体实现是在Spring配置文件(比如 applicationContext.xml)中使用自动创建表的配置,如下所示: ``` <!-- 自动创建表 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="mapperLocations" value="classpath*:mybatis/mapper/*.xml" /> <!-- 自动创建表 --> <property name="configuration"> <bean class="org.apache.ibatis.session.Configuration"> <property name="mapUnderscoreToCamelCase" value="true" /> <property name="useGeneratedKeys" value="true" /> <property name="defaultExecutorType" value="REUSE" /> <property name="defaultStatementTimeout" value="25000" /> <property name="autoMappingBehavior" value="FULL" /> <property name="autoMappingUnknownColumnBehavior" value="WARNING" /> <property name="cacheEnabled" value="true" /> <!-- 自动创建表 --> <property name="useGeneratedKeys" value="true" /> <property name="useColumnLabel" value="true" /> <property name="jdbcTypeForNull" value="NULL" /> <property name="defaultFetchSize" value="1000" /> <property name="defaultExecutorType" value="BATCH" /> <property name="logImpl" value="LOG4J" /> <property name="autoMappingBehavior" value="PARTIAL" /> <property name="autoMappingUnknownColumnBehavior" value="WARNING" /> </bean> </property> </bean> ``` 其中,配置文件中的`<property name="useGeneratedKeys" value="true" />`和`<property name="useColumnLabel" value="true" />`可以实现自动创建表的功能。 需要注意的是,在使用自动创建表的功能时,我们需要保证配置文件的正确性,否则会导致程序运行出错。同时,在使用自动创建表的功能时,需要注意数据库表的命名规范,以及需要自己编写好实体类和MyBatis的Mapper文件,以确保程序可以正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值