mybatis基础用法

目录

前言

一、mybatis是什么?

二、配置步骤

1.引入jar包

 2.创建mybatis的配置文件

3.创建mybatis数据库和表

4.创建与表对应的实体类

5.创建mybatis和数据库的映射文件.

6.注册

7.测试配置 

 通过dao和映射文件的关联来完成操作---企业开发模式

后期测式方式 

 #{ }与${}

解决实例属性名和表的列名不一致

第一种方法 sql语句起别名

第二种方法resultmap映射

​传递多个参数。

增删改查写法及其属性含义

普通用法

模糊查询

第一种

第二种

 连表查询

一对多查询

为实体类起别名

 获取添加后的主键的值

mybatis映射文件处理特殊字符

 两种方式

第一种:转义字符

第二种

 动态sql

常用语句

where的写法

 choose标签 多条件分支判断

if标签--单条件判断

set的用法

foreach循环使用

sql片段

优化

 lombok插件

添加sql日志


前言

此篇记录了mybatis入门级基础用法。

一、mybatis是什么?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

Mybatis的功能架构分为三层:

1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

二、配置步骤

1.引入jar包

在maven的pom.xml配置文件中引入mybatis和mysql的jar包

<!--  mysql包-->     
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.20</version>    
    </dependency>
<!--  mybaris包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

 2.创建mybatis的配置文件

文件名mybatis.xml

写在resources包下

文件内容如下,直接粘贴进去 ,但是mappers中的路径参照第五步。一个mappers中可配置多个mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!--数据源的配置:name的值固定 value的值要根据客户自己修改-->
            <dataSource type="POOLED">
                <property name="driver"
                          value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

   <!--将映射文件注册到配置文件-->
    <mappers>
        <mapper resource="mapper/userMapper.xml"></mapper>
    </mappers>
</configuration>

3.创建mybatis数据库和表

4.创建与表对应的实体类

5.创建mybatis和数据库的映射文件.

作用: 映射实体和表之间的映射关系。

里面写入具体mysql语句

写在resources包的mappera包下,没有就新建一个mapper包,在里面创建XXXMapper.x ml文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:虽然命名空间可以随便起名,但是后期我们要求命名空间的值必须和所对应的dao相同-->
<mapper namespace="qy151.student">

<!--        查询单个 -->
    <select id="findById" resultType="com.ytr.entity.Student">
         select * from student where id=#{id}
    </select>

</mapper>

6.注册

文件创建完毕将路径配置到第二步的mappers中

7.测试配置 

所用方法必须是org.apache.ibatis.下的

查询测试示例:

public static void main(String[] args) throws IOException {
    //1.读取mybatis配置文件的内容----未来不需要写tomcat 解析配置文件
    Reader reader = Resources.getResourceAsReader("mybatis.xml");
    //2. 获取SqlSessionFactory对象
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

    //3. 获取SqlSession对象----封装了对数据库操作的各种方法
    SqlSession session = factory.openSession();

    //调用查询一个结果的接口
    //String statement, 第五步的:命名空间+id----指向sql标签
    // Object parameter 需要实参
    Student std = session.selectOne("qy151.student.findById", 1);
    System.out.println(std);
    //4.关闭
    session.close();
}

 增删改与查询不同,需要在关闭前提交:

 提交可以自动完成, 设为true,就不用写.common了.

 传递多个参数跟单参不一致。详情见下边。

 通过dao和映射文件的关联来完成操作---企业开发模式

命名空间要和接口名一致

dao里面不是java文件而是接口

后期测式方式 

    public void selone() throws IOException {
        //读取配置文件
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
//        建立工厂方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//        创建session
        SqlSession session = factory.openSession(true);
//        获取接口
        StudentDao studentDao = session.getMapper(StudentDao.class);
//        调用方法
        int i = studentDao.selone(22);
        System.out.println(i);
        session.close();
    }

 #{ }与${}

#{ } 占位

里面写属性作用等同于 ?,预编译

里面的值随便,他跟传入的类型名不关联,关联的是位置,就算传入的名字叫name你里面写aaa也能接到,但位置一定要一致。比如传入两个值id和name,但接收sql语句中条件先是name那就不行了。

位置一致可以

 位置不一致不行

 '${}'字符串拼接

用法和#{}一致但一定加单引号,不建议使用,有sql注入的风险。

示例:在两端拼接%用于模糊查询 

解决实例属性名和表的列名不一致

第一种方法 sql语句起别名

给sql语句起别名让他对应实体类的属性名

第二种方法resultmap映射

利用resultmap映射

如果列名与属性名一致,可省略不写。

 主键的映射关系 id column:表中的列名 property:实体类属性名

 普通列的映射关系 result

    <resultMap id="Sstudent" type="com.ytr.entity.Sstudent">
         <id column="sid" property="id"/>
         <result column="sname" property="name"/>
         <result column="sage" pro
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值