MyBatis学习过程中所遇到的问题

本文介绍了MyBatis的基本配置步骤,包括添加依赖、创建数据库表、实体类、SQL映射文件和核心配置文件。在实践中,作者遇到并解决了数据库连接、接口名匹配和主键生成等问题。此外,还讨论了resultMap、一对一和一对多关联查询及动态SQL的使用,强调了MyBatis在简化JDBC操作和防止SQL注入方面的优势。
摘要由CSDN通过智能技术生成

 前言

第一步:准备工作

1.下载并添加MyBatis依赖

mybatis-3.5.10.jar是MyBatis的核心包,mybatis-3.5.10.pdf 是Mybatis官方使用手册,lib文件夹的jar文件shiMybatis的依赖包.

 最重要不要忘记加mysql-connector-java-8.0.21.jar包

 没有加会出现以下异常

 2.创建数据库表结构

3.创建实体类

4.SQL映射文件

src目录下创建xx.mapper包。映射文件为xx.xml;

5.核心配置文件

在src目录下创建Mybatis的核心配置文件mybatis-config.xm;在该文件中来配置数据库环境和映射文件的位置。

遇到问题:数据库密码账号或数据库名字写错

将mapper文件加入到配置文件中 

如果接口名和mapper里的名字不一样,会出现以下异常 

而且要注意的一点是一但在mapper里加载了该接口,映射文件里必须有mapper

 如果没有写,会发生如下异常

6:日志文件

Mybatis默认使用 log4j输出日志文件,如果开发着需要查看控制台输出的sql语句,需在classpath路径下配置其日志文件.

 7.测试类

首先使用输入流读取配置文件,然后根据配置信息构建SqlSessionFactory对象,接下来通过SqlSessionFactory对象创建SqlSessionFactory对象创建SqlSession对象,并使用SqlSession对象的方法执行数据库操作

在传递多个参数时遇到的问题:

接口

mapper.xml

 不能和参数匹配

解决方案:

使用注解通过@Param提供的名称就会直到#{name}代表name参数.

  insert标签

如果没有设置主键

注意最后要提交commit否则数据库里没有添加的数据

 自定义主键

<insert id="insertNewWebsite" 
			parameterType="com.apesource.entity.Website">
    <selectKey keyProperty="id" resultType="Integer" order="BEFORE">
			select if(max(id) is null,1,max(id)+1) as newId from Website
		</selectKey>
		insert into website(id,name,url,age)values(#{id},#{name},#{url},#{age})
</insert>

resultMap元素

resultMap是MyBatis中最复杂的元素,主要用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象。

出现问题

把column和property写反了

 一对一关联查询

<association property="studentCard" column="cardId"
            javaType="com.apesource.entity.StudentCard"
            select="com.apesource.mapper.StudentCardMapper.selectStuCardById" />

一对多

<collection property="orderList"
            ofType="com.apesource.entity.Order" column="id"
            select="com.apesource.mapper.OrderMapper.selectOrderById" />

如果把ofType和javaType弄混

动态SQL

${}一般用于在SQL中拼接数据库表名,视图或关键字,例如,动态使用order by进行排序时,就需要使用${}来拼接排序字段名称和排序规则。

使用#{}会产生一个?占位符,并使用PreparedStatement进行处理。而$则进行的是字符串的拼接。

使用#{}可以预防SQL注入,而${}无法防止SQL注入。

心得   

   通过Mybatis的学习,我感受到了Mybatis简单易懂,传统JDBC弊端太多,jdbc底层没有用连接池,操作数据库需要频繁的创建和关联连接,消耗资源。它封装JDBC,简化了加载驱动,创建连接,创建statement等过程。学习Mybatis和核心在于其映射关系的学习。学习过程中,我感受到SQL语句工作量较大,对我们的SQL语句的功底有一定要求。在今后的学习中,一定要多去运用到实际开发应用的过程中,这样才能更加熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值