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);
相关推荐
碎叶城李白5 分钟前
若依学习笔记1-validated
java·笔记·学习·validated
都叫我大帅哥32 分钟前
🌊 Redis Stream深度探险:从秒杀系统到面试通关
java·redis
都叫我大帅哥32 分钟前
Redis持久化全解析:从健忘症患者到记忆大师的逆袭
java·redis
程序猿阿越1 小时前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序无bug1 小时前
Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步
java
二川bro1 小时前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
Q_970956391 小时前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
Wyc724091 小时前
Maven
java·数据库·maven
程序猿小D1 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站