MyBatis笔记总结,怒干7000字

1,基本操作

1.1导入数据库,自动生成实体类

先在在idea右边找到database

在这里插入图片描述
填写信息

在这里插入图片描述

引驱动
在这里插入图片描述
下图中,3和4不是连续的步骤,根据需要去改

在这里插入图片描述
这个东西不改的话,默认生成的肯定不对,可以直接在类里改,如果生成的比较多,就把模板改一下更方便
在这里插入图片描述

1.2xml配置

  1. 主配置
    在src路径下,创建一个xml文件作为主配置文件,直接复制即可
    该文件一般命名为mybatis-config.xml 或者 sqlMapperConfig.xml
    详细配置下文介绍
<?xml version="1.0" encoding="UTF-8"?>
<!--mybaits全局配置文件的约束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">


<!--配置信息 -->
<configuration>
    <environments default="development">
        <environment id="development">
            <!--jdbc的事务管理 交给mybatis管理  -->
            <transactionManager type="JDBC"/>
            <!--数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/peanut"/>
                <property name="username" value="root"/>
                <property name="password" value="2535"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
     引入局部的配置
    </mappers>
</configuration>
  • 局部xml
    主要就是 增删改查 四个标签,配合一些参数
  • namespace:在这里可以随便写,如果用mapper代理,就必须保持与接口全路径名一致
  • id:在这里随便写,如果用mapper代理,需要保持与方法名一致
  • parameterType:写传入类型,没有配置主config的情况下,int表示Integer,string表示String,_int表示int,包装类和Stirng开头小写,基本类型开头加下划线,其他类型包名路径,就如我下面写的这样
  • resultType:写返回类型,和上面同理
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--以下为非mapper代理的配置
namespace可以随便写
id也可以,保持该mapper唯一即可
-->
<mapper namespace="any">
    <select id="selectByOne" parameterType="int" resultType="com.holy.entity.AdminUser">
-- 模糊查询,两种模式
-- 1,把百分号与值拼成字符串传进来
-- 2,传进值来拼,id='%${值}%',注意$号,不能写#号,在字符串里只能识别$
-- 普通查询如下:
        select * from peanut.admin_user where admin_id = #{id}
    </select>



<!--    普通插入-->
    <insert id="insert" parameterType="com.holy.entity.AdminUser">
-- 对应实体类属性名
        INSERT INTO admin_user(`admin_name`, `admin_password`) VALUES (#{adminName},#{adminPassword})
    </insert>


<!--插入后返回主键-->
    <insert id="returnKey" parameterType="com.holy.entity.AdminUser">
-- 加入一个selectKey,设置返回类型以及属性名称(与传进来对象的实体类相对应)
        <selectKey resultType="int" keyProperty="adminId" order="AFTER">
--         调用函数,查询最后一次插入的主键id
            select last_insert_id()
        </selectKey>
--         有了如上的设置,在插入后会按照上面的配置,把返回值设置到传进来的对象之中
        INSERT INTO admin_user(`admin_name`, `admin_password`) VALUES (#{adminName},#{adminPassword})
    </insert>

</mapper>

有了这些,开始往主配置xml里配置吧
在mybatis-config里面的mappers写入 他的路径,注意这里路径得分类讨论,有4种写法

  1. resource: 如图下第一个这种,注意不能点,必须斜杠连起来,resource是从src开始算的
  2. URL: 如图下第二个这种,绝对路径,外加协议
  3. class: 直接接口名字相对路径(从src开始),用点的不用斜杠
  4. package 如图第三种,这种最常用,可以使所有该包下的满足条件的xml全部引入

class和package用法都有个要求
1,必须在同一个包里面
2,xml文件和接口名必须相同

<mappers>
        <mapper resource="com/holy/mapper/admin.xml"/>
		<mapper url="file:///F:\mybaits01\src\com\shangma\cn\mapper\user.xml"/>

		<package name="com.shangma.cn.mapper"/>
 </mappers>

1.3Java中该如何做

步骤就是读取主配置xml,然读成个流 生成sqlseesion工厂,通过工厂获取sqlSession对象 用sqlSession对象去执行增删改查,调insert,updata,delete,select
//配置文件路径
        String resource = "config.xml";
        //通过路径加载配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //获得sqlsessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获得sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();



        // 操作数据库
        AdminUser o = sqlSession.selectOne("any.selectByOne", 5);
      

        //关闭资源
        sqlSession.close();
        inputStream.close();

需要注意的是,增删改的时候得提交事务,查不需要
提交事务有两种方法
第一种,在执行完增删改语句后,加一个commit

sqlSession.commit();

第二种,在获取commit对象时,使用一个开启自动提交事务的构造方法,true是开启

SqlSession sqlSession = sqlSessionFactory.openSession(true);

2,mapper代理

实际中基本都是使用mapper代理方式
这个方式就是接口不需要写实体类,直接把mybatis的xml当成接口的实现类怼
这就要求了:

  1. namespace必须与接口名称相同
  2. 增删改查的id必须与接口中的方法对应
  3. 其传入参数和返回类型必须相同,如果接口中的返回类型是list,那么xml中返回类型就写list泛型中的类型
  4. 当然得把接口和xml放在同一个包

接口

package com.holy.mapper;

import com.holy.entity.AdminUser;

import java.util.List;

/**
 * @author :
 * @data:
 * @className:
 * @description:
 * @kit:
 */
public interface UserMapper {
    AdminUser queryByOne(int id);
    List<AdminUser> queryAll();
}

xml文件

<mapper namespace="com.holy.mapper.UserMapper">
    <select id="queryByOne" parameterType="int" resultType="com.holy.entity.AdminUser">
        select * from peanut.admin_user where admin_id = #{id}
    </select>
    <select id="queryAll" resultType="com.holy.entity.AdminUser">
        select * from admin_user
    </select>
</mapper>

Java

public class Demo2 {
    SqlSession sqlSession;
    InputStream inputStream;
    @Before
    public void before() throws IOException {
        //通过路径加载配置文件
        inputStream = Resources.getResourceAsStream("config.xml");
        //获得sqlsessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获得sqlSession
        sqlSession = sqlSessionFactory.openSession();
    }
    @Test
    public void func(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);//该mapper对象是通过动态代理获取的对象,并非原本的接口对象
        System.out.println(mapper.queryAll());
        System.out.println(mapper.queryByOne(1));
    }
    @After
    public void after() throws IOException {
        sqlSession.close();
        inputStream.close();
    }
}

嗯,用的时候确实很简单,只需干个接口就行了

3,配置mybatis-config

这个东西一共有如下这么多配置方法,而且必须按照顺序来

在这里插入图片描述

3.1环境和mappers配置(必备配置)

一般直接复制最基本的,其他的在根据需要配 最基本的两个就是environments环境配置(连上数据库)和mappers(放配置文件,4种放的方法上面已经说过了) 在说environments里的这俩一个配事务,写jdbc就行了
 <!--jdbc的事务管理 交给mybatis管理  -->
            <transactionManager type="JDBC"/>

一个是配数据源,先看配数据源的开头的type属性,这是数据库连接池,
写POOLED实现mybatis自己的数据库连接池PooledDateSource,
写UNPOOLED就是不用连接池,一般还是用上好

`<!--数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/peanut"/>
                <property name="username" value="root"/>
                <property name="password" value="2535"/>
            </dataSource>`

在一个是这些参数,直接写上就写,但如果想引用外部的properties文件,就得在上面配置个properties配置
这个配置也分为resource和URL配置,与上面说的类似

在这里插入图片描述

然后在value里写上"${properties文件里的键}"

3.2,起别名

上文提到在写xml参数或返回值类型的时候,引入类得写全包名,非常的麻烦 所以起别名就出现了,在主配置里统一给配置上该路径叫啥名字

单个起别名,可自定义名称

<typeAliases>
     <typeAlias type="com.shangma.cn.entity.User" alias="user"/>
 </typeAliases>

对该包内全部起别名,名称为小写类名

<typeAliases>
      <!--指定包名时  别名就是包中对应类的类名  不区分大小写-->
    <package name="com.shangma.cn.entity"/>
 </typeAliases>

3.3 setting设置

设置开启驼峰命名,他默认是关闭驼峰的,所以非常坑逼,必须使类的属性名字与表的字段名一模一样才能用,比如数据库里user_id, 在Java里userId,这样的命名很正常,但是就对应不上 所以得去手动的开启驼峰命名
<settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值