MyBatis是一款优秀的持久层框架,用于简化JDBC开发
持久层:
负责将数据保存到数据库的那一层代码
JAVAEE三层架构:表现层、业务层、持久层。
框架:
框架就是一个半成品软件,是一套可以重用、通用的、软件基础代码模型。
在框架的基础上构建的软件编写更加高效、规范、通用、可拓展
- MyBatis介绍

MyBatis几乎免除了所有JDBC的代码,以及设置参数和获得结果集的工作
- MyBatis快速入门

MyBatis核心文件:mybatis-config.cxml

sql映射文件
- Mapper代理
我们可以看到,实际开发中,我们仍需要传入参数test.selectAll这一硬参数,而且后面我们会有很种sql语句,对应不同的名称空间和唯一标识,很不方便。这时候我们可以借助Mapper代理

比如我们的select user表中所有的数据:
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();


如果,我们使用了Mapper代理的方式,我们可以通过包扫描的方式来加载映射文件。

- MyBatis核心配置文件讲解
<environment>:配置数据库的连接环境的信息,我们可以配置多个不同id的数据库连接环境,方便我们切换数据库。
<environments default = >里面的名称表示我们当前使用的连接环境

- MyBatis实现增删改查操作
一、通过配置文件实现增删改查
在Mysql中,我们的命名方式习惯为:brand_name,company_name······通过下划线来划分,但我们在java开发过程中呐,习惯用驼峰命名规则,比如:brandName和companyName。这就会使得xxxMapper.xml文件中和xxxMapper接口文件中名字不一样,如何解决?

占位符
Select * from info where id = #{id}
在MyBatis中,共有两种占位符:#{ }和¥{ }
#{ }会将其替换为 ?(相当于preparedStatement的占位符?,可以有效防止sql注入)
¥{ }则是直接替换为参数,容易出现sql注入。所以在参数传入的时候我们应该使用#{ }
当表名字和列名不固定的时候,我们也可使用¥{ },但还是有注入的问题
特殊字符的处理
当我们在xml文件里写sql语句时,有时需要 < 号,但xml文件中<有别的意思,怎么办?
1.转义符号 : <;
2.CDATA区 : 写个大写的CD然后补全,里面写符号


其中还用到了模糊查询,比如用户输入华为,能够搜索到华为有限公司(sql模糊搜索相关内容)
注意,不能这样子写!!

正确的写法是:

然后对两个参数进行操作:

2.将参数封装起来
将Mapper接口里的方法设置为:
![]()
然后在操作中new 一个brand对象,设置其参数,然后将其作为方法的参数。
- 动态查询
if用来判断属性是否有值,使用test属性来进行判断
Select * from xxx where id =#{id} and company_name ike #{companyName} and brand_name like #{brandName}
但用户查询的时候,不会输入三个参数,有时会输入一个或两个这样的情况,那么我们可以:
<if test = "id != null"> id = #{id} </if>
<if test = "companyName !=null> and company_name ike #{companyName} </if>
<if test = "brandName !=null> and brand_name ike #{brandName} </if>
那么我们就会发现,有时候id为null的时候,第二句前面就会多个and,那么我们可以
1.在where后面加上一个 1=1 ,然后在id=#{id}前面加上and
2.用<where>来替换where
单条件查询

最终,上面三个条件只会成立一个
注意,完成sql操作后,一定要sqlSession.commit才会在数据库显示(不要忘了提交!!!)
(或者我们也可以开启自动提交,默认是不开启自动提交,相当于开启了事务)
如果里面传入参数 true 就是自动提交了
SqlSessionsqlSession=sqlSessionFactory.openSession();
- 添加-主键返回


- 删除功能

void deleteByIds(@Param("ids") int[] ids)这样的话,collection后面就可以写ids了
Open="("表示开始的时候拼一个(,close=“)”表示结束的时候拼一个),也可以:
Where id in ( <foreach xxxx>
Xxxx
</foreach>
)
括号必须有!!要不然拼出来语句就是 where id in ?,?,?。。。会报错!
- 参数传递
多参数传递
如果一个Mapper中的方法有多个参数,MyBatis会自动将其封装为Map集合,默认为
Map.put(arg0,参数值1);
Map.put(param1,参数值1)
Map.put(arg1,参数值2);
Map.put(param2,参数值2)~~~~
所以后面的sql语句中,不能写参数的名字,而是要写arg,param什么的。
但是,我们可以使用注解,传入参数时,@Param("xx")这样会封装为map.put(xx,参数值)
单参数传递

6 .其他类型:直接使用
总的来说,就是Collection、List、Array、多个参数需要使用@Param注解。其余的直接使用

MyBatis是一个优秀的持久层框架,它几乎消除了所有JDBC代码,提供基于XML或注解的SQL映射。文章介绍了MyBatis的核心文件,如mybatis-config.xml和sql映射文件,以及Mapper代理的使用,展示了如何通过Mapper代理简化开发。此外,还详细讨论了MyBatis的环境配置、增删改查操作,包括占位符的安全性、动态SQL和多参数处理。
3639

被折叠的 条评论
为什么被折叠?



