Mybatis基础笔记四

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: Mybatis基础笔记四

1.1 数据库环境切换****

1.1.1 切换 environment****

****
*
**
**
<property name="driver"  value="oracle.driver"/>            <propertyname="url"                      value="{oracle.driver}" />              <property name="url"                        value="oracle.driver"/>            <propertyname="url"                      value="{oracle.url}" />
**
***
<property name="driver"  value="mysql.driver"/>            <propertyname="url"                      value="{mysql.driver}" />              <property name="url"                        value="mysql.driver"/>            <propertyname="url"                      value="{mysql.url}" />



数据库文件db.properties****

#oracle*
oracle.driver=oracle.jdbc.OracleDriver
oracle.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
oracle.username=scott
oracle.password=tiger
#mysql
*mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mydb
mysql.username=root
mysql.password=root

1.1.2 配置 Provider别名****

*




***

1.1.3 写不同数据库的SQL语句****

大部分相同,只是有个别不同****

1.1.4 在mappe.xml中配置databaseId="Provider别名"****

1、oracle****

*
*<select id="queryStudentByNoWithONGL" parameterType="student" resultType="student"
databaseId="oracle">

2、Mysql****

<insert id="addStudent"
parameterType="com.yanqun.entity.Student"  databaseId="mysql">

如果mapper.xml的 sql标签 仅有 一个 不带databaseId的标签,则改标签 会自动适应当前数据库。

如果 既有不带databaseId的标签,又有带databaseId的标签,则程序会优先使用带databaseId的标签

 

1.2 注解方式(推荐使用xml)****

a.将sql语句写在接口的方法上@Select("") ;

b.将接口的全类名 写入,让mybatis知道sql语句此时是存储在接口中

注解/xml都支持批量引入,

   

         

     

1.3 增删改的返回值问题****

返回值可以是void、Integer、Long、Boolean

如何操作:只需要在接口中 修改返回值即可

public abstract Integer addStudent(Student student);

1.4事务自动提交****

手动提交:

sessionFactory.openSession();
 session.commit();

自动提交:每个dml语句 自动提交

sessionFactory.openSession(true);
SqlSession session = sessionFacotry.openSession(true) ;

1.5 自增问题****

1.5.1 mysql****

mysql支持自增

只需要配置两个属性即可:、

之前设置数据库的递增

useGeneratedKeys="true" keyProperty="stuNo"
 <insert id="addStudent"
            parameterType="com.yanqun.entity.Student"  databaseId="mysql" useGeneratedKeys="true" keyProperty="stuNo">
          insert into student(stuName,stuAge,graName)
          values(#{stuName},#{stuAge},#{graName})
create table student
(
   stuno int(4) primary key auto_increment,
   stuname varchar(10),
   stuage int(4),
   graname varchar(10)
);
<insert id="addStudent"
parameterType="com.yanqun.entity.Student"  databaseId="mysql">
insert into student(stuNo,stuName,stuAge,graName)
values(#{stuNo} , #{stuName},#{stuAge},#{graName})

1.5.2 oracle****

oracle不支持自增 :通过序列模拟实现

方式一:before(推荐)

create sequence myseq
increment by 1
start with 1;

通过  的字标签 实现:

在 中查询下一个序列(自增后的值),再将此值传入keyProperty="stuNo"属性,最后在真正执行时 使用该属性值。

方式二:after

序列自带的两个属性:

nextval:序列中下一个值

currval: 当前值

方法一:****

<insert id="addStudent"
parameterType="com.yanqun.entity.Student"  databaseId="oracle">
select myseq.nextval from dual
insert into student(stuno,stuName,stuAge,graName)
values(#{stuNo} , #{stuName},#{stuAge},#{graName})

方法二:

<insert id="addStudent"
parameterType="com.yanqun.entity.Student"  databaseId="oracle">
select myseq.currval from dual
     insert into student(stuno,stuName,stuAge,graName)
values(myseq.nextval , #{stuName},#{stuAge},#{graName})

1.6 参数问题****

目前 将多个参数封装到一个javabean对象(pojo),然后使用该对象传递

1.6.1传入多个参数时,不用在mapper.xml中编写parameterType****

异常提示:

stuNo不能使用。可以使用的是: [arg3, arg2, arg1, arg0, param3, param4, param1, param2]
    <insert ...>
        insert into student(stuno,stuName,stuAge,graName)
        values(#{arg0} , #{arg1},#{arg2},#{arg3})

1.6.2命名参数****

可以在接口中通过@Param("sNo") 指定sql中参数的名字

public abstract Integer addStudent(@Param("sNo") Integer stuNo,
  public abstract Integer addStudent(@Param("sNo") Integer stuNo, @Param("sName")String stuName, @Param("sAge")Integer stuAge, @Param("gName")String graName);
    <insert...>
         insert into student(stuno,...)
         values(#{sNo}, ...)

 

1.6.3综合使用****

Integer addStudent(@Param("sNo")Integer stuNo, @Param("stu")Student student);
public abstract Integer addStudent(@Param("sNo")Integer stuNo, @Param("stu")Student student);
    <insert id="addStudent"  databaseId="oracle">
         insert into student(stuno,stuName,stuAge,graName)
         values(#{sNo} , #{stu.stuName},#{stu.stuAge},#{stu.graName})


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
11月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
Java 数据库连接 数据库
Mybatis逆向工程笔记小结
Mybatis逆向工程笔记小结
|
SQL Java 数据库连接
【Java笔记+踩坑】MyBatisPlus基础
MyBatisPlus简介、标准数据层开发CRUD、业务层继承IService、ServiceImpl、条件查询、LambdaQueryWrapper、id生成策略、逻辑删除、乐观锁@Version、代码生成器、ActiveRecord
【Java笔记+踩坑】MyBatisPlus基础
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
SQL Java 关系型数据库
MyBatis-Plus全套笔记三
MyBatis-Plus全套笔记三
178 1
|
SQL Java 数据库连接
MyBatis-Plus全套笔记二
MyBatis-Plus全套笔记二
180 1
|
Java 关系型数据库 数据库连接
MyBatis-Plus全套笔记一
MyBatis-Plus全套笔记一
463 1
|
SQL Java 数据库连接
[推荐] MyBatis框架初学笔记-为之后拾遗
[推荐] MyBatis框架初学笔记-为之后拾遗
147 0
|
SQL 存储 缓存
MyBatis 学习心得笔记
MyBatis 学习心得笔记
273 0