Mybatis02

MyBatis02

1.优化

java 复制代码
@Before 在代码执行之前
@After  在代码执行之后
    对CRUD中的重复代码进行封装

2.配置

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

2.1已配置别名

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

2.2自定义别名

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:

xml 复制代码
<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

xml 复制代码
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:

xml 复制代码
@Alias("author")
public class Author {
    ...
}

3.ORM映射

java 复制代码
ORM(对象关系映射)是一种编程技术,用于将关系型数据库中的表结构映射到面向对象的语言中的类和对象。ORM工具能够自动完成数据库查询、插入、更新和删除等操作,让开发人员能够使用面向对象的方式来操作数据库。

在Java中,有多个流行的ORM框架可供选择,如Hibernate、MyBatis、Spring Data JPA等。这些框架提供了不同的特性和使用方式,但它们的核心思想都是通过配置和映射来实现对象与数据库表之间的映射关系。
    
    
    如果数据库列的名字与实体类中成员变量名称不同时,则获取不到数据
   A 此时可以在sql语句中给每一列 起别名 让他们一一对应
   B 使用映射
    <result column="s_name" property="name"></result>

4.mapper.xml中获取主键

java 复制代码
<insert id="saveStudent" parameterType="com.aaa.entity.Student" useGeneratedKeys="true" 		keyColumn="s_id" keyProperty="id">
        insert into student
        values (null, #{name}, #{age}, #{address}, 1)
 </insert>
    
    useGeneratedKeys:是否获取主键
    keyColumn:数据库主键列名称
    keyProperty:接收主键的成员变量    
        
    我们添加学生的时候 传递的参数是  parameterType="com.aaa.entity.Student"  
        此时获取主键会赋值给student的id属性

5.日志输出

添加依赖

xml 复制代码
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

在resources文件夹下创建log4j.properties文件

java 复制代码
log4j.rootLogger=ERROR, stdout

log4j.logger.com.aaa = TRACE

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6.#和$的区别

MyBatis中KaTeX parse error: Expected 'EOF', got '#' at position 6: {} 和 #̲{} 有什么区别?_在 myb...{} 和 #{} 的区别是什么_蜀州凯哥的博客-CSDN博客

7.接口绑定

java 复制代码
接口绑定四对应
    1.创建一个接口
    public interface  StudentMapper {
     }
	2.添加接口函数
    public interface  StudentMapper {
    	int saveStudent(Student student);
    }
    3.创建mapper.xml 添加对应标签
        1.<mapper namespace="com.aaa.mapper.StudentMapper"> 对应接口的全限定名
        2.<insert id="saveStudent"> 标签id对应函数名
        3.<select  parameterType="int" > 对应函数参数类型
        4.<select  resultType="com.aaa.entity.Student"> 返回值类型对应


接口绑定之后 接口类型就不用写了

8.多参数传递

java 复制代码
    List<Student> queryStudent(@Param("haha") int id,@Param("hehe") int age);


    <select id="queryStudent" resultType="com.aaa.entity.Student">
        select *
        from student
        where id = #{haha}
          and age = #{hehe}
    </select>

9.动态sql

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

-----待补充

10.注解配置sql

java 复制代码
mybatis支持 只写接口  在接口方法上 使用注解写sql
    先在配置文件中加入<package name="com.aaa.mapper"/>

    @Select("select * from student where id = #{id}")
    Student getOne(Integer id);
相关推荐
蓝天星空3 分钟前
spring cloud gateway 3
java·spring cloud
罗政8 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现
java·mysql·pdf
一根稻草君14 分钟前
利用poi写一个工具类导出逐级合并的单元格的Excel(通用)
java·excel
kirito学长-Java17 分钟前
springboot/ssm网上宠物店系统Java代码编写web宠物用品商城项目
java·spring boot·后端
木头没有瓜31 分钟前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
奋斗的老史31 分钟前
Spring Retry + Redis Watch实现高并发乐观锁
java·redis·spring
high201133 分钟前
【Java 基础】-- ArrayList 和 Linkedlist
java·开发语言
老马啸西风40 分钟前
NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
java
Cosmoshhhyyy1 小时前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法