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);
相关推荐
一条大祥脚6 分钟前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
yaoxin52112310 分钟前
414. Java 文件操作基础 - 批量压缩与索引:将154首十四行诗高效存储为带目录的二进制文件
java·windows·python
超梦dasgg12 分钟前
详细讲解:WebMvcConfigurer 接口
java·开发语言·spring
JAVA社区23 分钟前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
彭于晏Yan35 分钟前
OkHttp 与 RestTemplate 技术选型对比
java·spring boot·后端·okhttp
金銀銅鐵1 小时前
[Java] 如何理解 class 文件中字段的 descriptor?
java·后端
500841 小时前
Graph Engine 是什么,为什么需要它
java·人工智能·性能优化·ocr·wpf
未若君雅裁1 小时前
服务雪崩、降级、熔断与服务保护
java·微服务
就叫_这个吧1 小时前
Java实现线程间的通讯--使用synchronized关键字和JUC方式实现
java·开发语言
学习中.........1 小时前
JVM 垃圾回收核心技术、演进全景与生产调优规范
java·jvm·测试工具