Mybatis基础笔记四

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 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})


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java 数据库连接 数据库
Mybatis逆向工程笔记小结
Mybatis逆向工程笔记小结
|
1月前
|
SQL Java 关系型数据库
MyBatis-Plus全套笔记三
MyBatis-Plus全套笔记三
|
1月前
|
SQL Java 数据库连接
MyBatis-Plus全套笔记二
MyBatis-Plus全套笔记二
|
1月前
|
Java 关系型数据库 数据库连接
MyBatis-Plus全套笔记一
MyBatis-Plus全套笔记一
|
7月前
|
SQL Java 数据库连接
[推荐] MyBatis框架初学笔记-为之后拾遗
[推荐] MyBatis框架初学笔记-为之后拾遗
43 0
|
10月前
|
SQL 存储 缓存
MyBatis 学习心得笔记
MyBatis 学习心得笔记
75 0
|
SQL Java 关系型数据库
|
SQL XML Java
MyBatis知识点笔记
MyBatis知识点笔记
167 0
MyBatis知识点笔记