MyBatis学习笔记

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

 

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.转义符号 : &lt;

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   .其他类型:直接使用

 

总的来说,就是CollectionListArray、多个参数需要使用@Param注解。其余的直接使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值