SSM—02—MyBatis简介

目录

MyBatis

准备工作:创建名为 ssm_data 数据库:

设计流程:

***配置映射文件

设计pojo类的时候,参考数据表结构 -- ORM

解决方法:

环境配置

MyBatis执行数据操作原理:

*** MyBatis中的占位符:

*** 练习过程中,学会解读异常信息



MyBatis

准备工作:创建名为 ssm_data 数据库:

导入数据:source 路径:/college.sql

使用 college 数据进行数据操作查看数据表结构: show columns from college;

字段名称,字段对应的数据类型

结合数据分析字段的含义

结合数据,可以看到数据表的含义--代表学校的二级学院的信息:学院编码,学院名称,所在校区使用 MyBatis 操作数据(数据的添加)

设计流程:

1)在项目的 pojo 包中,根据分析的数据表结构,创建 class 与数据表建立映射关系

2)在项目的 mapper 包中,创建接口(interface),在接口中创建抽象方法

3)复制提供的 StudentMapper.xml,复制之后重命名文件 pojo 中创建类的类名+Mapper.xml(映射文件)

***配置映射文件

(1)打开文件,修改 namespace(命名空间)

(2)创建元素节点

元素节点名称:

添加数据:<insert> -->在元素内部使用的 SQL 语句为插入语句

修改数据:<update> -->在元素内部使用的 SQL 语句为修改语句

删除数据:<delete> -->在元素内部使用的 SQL 语句为删除语句

查询数据:<select> -->在元素内部使用的 SQL 语句为查询语句

--》本次示例:为插入数据,因此,在映射文件中添加<insert>节点

设计语句的时候,首先配置元素的属性(2 个)

--》id 属性:属性值与接口中的抽象方法名完全相同(字母大小写),初次使用的时候,属性值建议使用复制和粘 贴的方式完成

--》传入参数类型的属性: parameterType

属性值为 add 方法中的 参数类型(包名.类名)

(3)配置元素

设置要执行的 SQL 语句

当前的任务是向 college 数据表中添加一条数据(College 对象)

字段值:根据 MyBatis 的规则,引用对象的成员属性值;引用的格式为 #{类的成员属性名}

4)在映射文件中配置数据操作的 SQL 语句

5)在项目的 service 包中创建接口(功能是 JavaBean 为上层的调用提供服务)

6)实现 service 包中的接口,重写抽象方法---》在 service 包中创建一个子包,名为 impl

实现接口的时候,使用 CollegeMapper 调用 add 方法完成数据的操作。

添加注解

在类体中,创建成员,类型为 CollegeMapper

如果 Spring 容器中提取了对象,则使用的时候不会出现空指针异常完成数据的操作,在 save 方法中执行 SQL 语句:执行的方式调用 CollegeMapper 中的 add 方法

7)修改资源文件 jdbc.properties,配置数据库连接的驱动、URL、账号和密码

8)测试

在 test 文件夹中创建 package

在 test.college 包中创建测试类--新建 class ; test 目录下创建的 class 与 java 文件夹中创建的 class 性质不同

  • test 文件夹中创建的 class 用于程序的运行(单元测试,内部测试)

  • 在测试类中,创建一个无返回值的方法

  • 运行测试程序,在方法头添加注解@Test

  • 在@Test 行右击,选择 run -->运行测试程序

  • 运行的时候,观察控制台消息(注意:测试程序是在控制台运行,没有部署到 tomcat)

  • 验证是否数据添加成功,查看数据表中的数据

设计pojo类的时候,参考数据表结构 -- ORM

执行程序之后,存入数据库,字段值为?--乱码

解决方法:

连接数据库URL的后面添加参数

***注意:MySQL的编码格式也要设置为utf8

**url的参数指定的参数名和参数值

参考:MySQL URL 连接参数设置_mysql url参数-优快云博客

环境配置

1)重要配置文件applicationContext.xml

配置:Spring框架集成MyBatis

classpath:jdbc.properties

classpath: ---> 指类的根路径 --》对应发布之后classes文件夹的路径

jdbc.properties --》资源包中的属性文件--》属性文件

文件内容: key = value

根据key名称 得到 value的值

${dbcp.driverClassName} --> 读取属性文件中key为dbcp.driverClassName 的值,把值作为当前元素的属性值

2)applicationContext.xml -->引入了文件 jdbc.properties

读取映射文件(实现ORM): 扩展名为xml, 该文件要求满足MyBatis的指定的模板

MyBatis框架查找映射文件,源于路径

classpath:cs/sasu/pojo/*.xml

映射文件所在的位置

以项目发布为例:

classes文件夹为类的根路径

项目中,package的规范以小点分隔子包;文件系统中,包代表一个文件夹

查找xml文件,需要从文件系统中查找,文件系统--父目录与子目录的分隔符号 为 /

一个项目,可以创建若干映射文件,映射文件要求从myBatis提供的模板基础上做一些修改

解释了:文档中,复制一份studentMapper.xml

映射文件的模板:

在模板中修改:namespace(命名空间)

命名空间属性值为包名.接口名 (接口一定在项目中存在,并且接口要求在指定的package中)

指定的package

修改命名空间

映射文件:

xml元素

<insert> -->元素的内部设计的是SQL的添加数据的命令

<update> -->SQL的修改命令

<delete>

<select>

**上面每一个元素,必须设置 id 属性

**** id 属性值 为 namespace属性指定的接口中的方法名

大小写完全一致

MyBatis执行数据操作原理:

*** MyBatis中的占位符:


#{变量} --》如果parameterType为类,#{}中的符号为 类定义的成员属性名 --》根据属性名 --》调用 getXxx方法得到成员属性 --》得到成员属性值之后,为 insert与中的字段值对应
*** 由此:设计pojo类的时候,每一个成员属性都必须设置get或set方法,为减少代码量,使用lombok

--》执行SQL之后,实现了数据的操作

映射文件中,保证SQL语法正确,否则编译的时候将出现错误

*** 练习过程中,学会解读异常信息


例如:
Cause: java.sql.SQLException: Column count doesn't match value count at row 1

The error may exist in file [D:\idea-proj\ssm-cs\out\production\ssm-cs\cs\sasu\pojo\CollegeMapper.xml]

The error may involve cs.sasu.mapper.CollegeMapper.add-Inline

The error occurred while setting parameters

SQL: INSERT INTO college(c_id,c_title,c_zone) VALUES(?,?)

Cause: java.sql.SQLException: Column count doesn't match value count at row 1

; bad SQL grammar []; nested exception is java.sql.SQLException: Column count doesn't match value count at row 1

这个异常java.sql.SQLException: Column count doesn't match value count at row 1表明在执行SQL插入语句时,提供的值的数量与表中列的数量不匹配。具体来说,在您的SQL语句中,您指定了三个列(c_id, c_title, c_zone),但只提供了两个占位符(?)用于传递参数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值