mybatis入门

mybatis-config.xml  

MyBatis 配置文件的 configuration 标签主要包括:

configuration 配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
databaseIdProvider 数据库厂商标识
mappers 映射器

configuration
    properties--配置文件可以用于dataSource里面使用,可以用url或者resource指定路径,可以有property子标签
    typeAliases--设置实体类的别名package子标签,然后再mapper.xml中可以直接使用类名,不用全名
    environments--设置连接池,事务等
    mappers--使用的mapper文件在哪mapper子标签的resource属性和url属性

<package name="com.shiyanlou.mybatis.mapper" />
<mapper class="com.shiyanlou.mybatis.mapper.UserMapper"/>
这两种方法需要将 mapper 接口类名和 mapper.xml 映射文件名称保持一致,且在一个目录中

此外由于IDEA maven项目默认不会把src下除java文件外的文件打包到classes文件夹下,需要在maven的pom中增加配置如下

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
    </build>

XxxMapper.xml

映射文件包含的顶级元素:

cache:给定命名空间的缓存配置。
cache-ref:其他命名空间缓存配置的引用。
resultMap:描述如何从数据库结果集中来加载对象。
sql:可被其他语句引用的可重用语句块。
insert:映射插入语句
update:映射更新语句
delete:映射删除语句
select:映射查询语句

mapper标签 namespace指定mapper类
resultMap--指定返回的map,当数据库中的字段与实体类的字段名称不一致时可以使用这种方法,也可以在具体额查询语句中使用as引入别名

resultMap 的子元素包括:
constructor:用来将结果注入到一个实例化好的类的构造方法中
    idArg: ID 参数,标记结果作为 ID
    arg:注入到构造方法的一个普通结果
id: 一个 ID 结果,标记结果作为 ID
result:注入到字段或 JavaBean 属性的普通结果--都有column和property属性的
association:复杂的类型关联,多个结果合成的类型
    嵌入结果映射:结果映射自身的关联,也可以引用一个外部结果映射
collection:复杂类型的集 也可以引用一个外部结果映射
discriminator:使用结果值来决定使用哪个结果集
    case:基本一些值的结果映射,也可以引用一个外部结果映射

select 返回时可以使用 resultType 或 resultMap,但不能同时使用

useGeneratedKeys="true" keyProperty="id"这个属性可以在插入的时候生成主键

useGeneratedKeys、keyProperty 和 keyColumn 仅对 insert 和 update 有用。同时只有数据库支持自增长主键字段(比如 MySQL、SQL Server)才可以设置 useGeneratedKeys="true",像 Oracle 则不支持自增长 id,如果设置 useGeneratedKeys="true" 就会报错。

$和#的区别

一般用#号
$是字符串拼接的,且括号里面必须写value。但是如果传入参数是列名的话必须用$.
模糊查询的时候#直接用,而$需要加单引号。因为是拼接。
一些sql的内联函数也可以在这个时候使用,中文字符串排序可以使用这个方法
order by CONVERT(chineseColumnName USING gbk)

XxxMapper

接口类

使用方法

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);

### MyBatis入门教程 #### 1. MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects) 映射成数据库中的记录[^1]。 #### 2. 日志输出配置 为了方便调试SQL语句,在`mybatis-config.xml`文件中可以加入如下配置: ```xml <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> ``` 这会使得执行的所有SQL语句都会被打印到控制台,便于开发人员查看和排查问题。 #### 3. 参数传递方式对比 在MyBatis中提供了两种不同的占位符用于构建动态SQL:`#{}` 和 `${}` 。其中 `#{}` 表达式的值会被视为预编译语句的一个参数,并由JDBC驱动自动处理转义字符;而`${}` 则直接替换为变量的实际内容,存在SQL注入风险,因此建议优先使用`#{}` 来防止潜在的安全隐患。 #### 4. 实体类定义 对于每一个要操作的数据表来说都需要创建对应的Java Bean对象即实体类。这里展示了一个基于 Lombok 注解简化后的User实体类例子: ```java import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; } ``` 此段代码利用了Lombok库提供的`@Data`自动生成getter/setter方法,减少了样板代码的数量并提高了可读性和维护效率[^2]。 #### 5. Mapper 接口编写 Mapper接口是用来声明针对特定数据表的操作行为的地方。通常情况下只需要按照一定命名规则定义好相应的方法签名即可完成CRUD功能实现。例如下面是一个典型的UserMapper接口片段: ```java package com.example.mapper; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { int insert(User user); List<User> selectAll(); void updateById(Long id, User updatedUser); boolean deleteById(Long id); } ``` 上述示例展示了如何简单地定义一些基础性的增删改查函数原型,实际业务逻辑则交给了XML映射文件或者内联注解去具体描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值