mybatis的使用(基础)及配置文件详解

前言:本文章以两个小例子讲述mybatis的简单使用。然后讲解了mybatis的全局配置文件以及mapper文件。

 

示例一:简单使用mybatis。

准备工作:创建一个User实体类,并在数据库中创建一个对应的user数据表。

      

项目包结构如下:

开始

1、导入所需要的jar包(连接数据库所需包、mybatis包、为在控制台输出信息导入日志包)。

2、创建log4j.properties文件,创建mybatis的全局配置文件:sqlMapConfig.xml文件。

(1)log4j.properties(只写了控制台输出的部分)。

(2)sqlMapConfig.xml。

3、创建sql映射文件UserMapper.xml,创建完成后要在全局配置文件中进行注册。

4、写测试类。通过全局配置文件创建SqlSessionFactory,通过工厂获得SqlSession对象,通过SqlSession进行增删改查操作。

5、测试结果,控制台输出打印出来的user信息。

这是原始的mybatis的写法,很古老了,这里执行sql语句传的参是写死的,可以修改代码,使用接口。

==================华 丽 丽 的 分 割 线===================

示例二:使用DAO接口的方式。

1、新建一个接口,放到dao包中,不需要写接口的实现类。

2、修改sql映射文件,命名空间写接口的全类名,sql语句的id与接口中的方法名保持一致。

3、修改测试代码,如图,创建工厂的方式和示例一是一样的,通过全局配置文件创建,在获取接口实现类对象时,mybatis会自动为我们创建一个代理对象proxy,由代理对象进行增删改查。

4、测试结果

==================又 是 一 条 华 丽 丽 的 分 割 线=====================

以下将讲解mybatis的一些知识点。

1、mybatis的dtd引入。

为啥要引入?为了提示啊!多方便!

全局配置文件(sqlMapConfig.xml)引入mybatis-3-config.dtd。sql映射文件(mapper文件)引入mybatis-3-mapper.dtd。dtd文件位置如下图所示。

2、全局配置文件标签详解。

(1)properties。可以引入外部properties配置文件。

(2)settings。包含了很多重要的设置项,每一个setting标签是一个设置项,最常用的是mapUnderscoreToCamelCase,将数据表列名user_name自动转为驼峰userName。

(3)typeAliases。给类起别名,因为在mapper文件中写全类名太麻烦(返回类型),一个typeAlias只能给一个类起别名,默认别名是类名小写,也可以用alias指定别名。要想批量起别名,用package,可以为该包及该包中的子包中的每一个类起别名(默认别名)。注意别名不区分大小写,批量起别名时如果不同包中有相同的类名的类,就会报错,所以使用@Alias("新别名")为某个类指定新的别名。

(4)environments。环境,每一个environment配置一个具体的环境信息,其中必须有transactionManager事务管理器和dataSource数据源标签才算完整,id为设置环境的唯一id标签(测试环境和开发环境可能不同,使用不同数据库厂商的数据库),default设置使用哪一种环境,transactionManager中type有两种:JDBC(代表使用jdbc的方式进行事物的提交和回滚)MANAGED(代表使用j2ee的方式),dataSource为数据源,type为数据源类型UNPOOLED(该数据源的实现只是在每次请求时打开和关闭连接,速度有点慢)POOLED(数据源池JDBC连接对象的实现,这是并发web应用程序实现最快响应的流行方法)。

(5)databaseIdProvider。为支持多数据库厂商,可以设置多个数据库,如mysql,oracle,sql server等数据库,type="DB_VENDOR"就是得到数据库厂商表示来执行不同的sql。

指定不同的数据库厂商后,要使用某个数据库,在mapper文件中加databaseId属性,如下图。

(6)mappers。将sql映射注册到全局文件中,

有三种方式:(6.1)、写mapper文件所在位置<mapper resource="com/nz/pojo/UserMapper.xml" />
  (6.2)、每个mapper文件对应一个接口(同名且放在同一目录下),写该接口的位置<mapper class="com.nz.dao.UserMapper" />在接口中使用注解的方式操作


  (6.3)、批量注册,写mapper文件(实体与sql映射在同一包中)所在的包<package name="com.nz.pojo"/>

注:可以在config文件夹下建一个与src中dao包同名的dao包,使之在视觉效果上好看一点。

3、sql映射文件(*Mapper.xml)详解。

(1)在接口中定义好增删改查的方法,然后在mapper文件中写对应的增删改查的sql语句。

接口:

mapper文件:

测试:使用sqlSessionFactory.openSession(),创建的sqlSession需要手动提交sqlSession.commit()。

4、提高(参数处理)。

(1)需求:添加一条数据后返回该数据的自增主键。

做法:在mapper文件中添加两个属性,useGeneratedKeys(使用自增主键获取主键值策略,keyProperty(mybatis获取主键后封装给实体的哪个属性)。

注意:Oracle不支持自增,它是使用序列模拟自增,所以在插入时先要查出序列,再插入。

2)返回结果是一个List

返回结果虽然是List集合,但是mapper中resultType不写list,而是写集合中元素的类型。

(3)返回结果是一个Map

返回map时有单个记录:mapper中resultType为map,

返回map时有多条记录:mapper中的resultType为map记录的类型,如Map<Integer, User>,resultType="User"。

(4)参数处理

单个参数(无论什么类型):#{参数名} 获取参数值。

多个参数:mybatis会把参数封装成一个map,#{key} 就是从map中取得对应key的值,但是此时的key是param1,param2……。要想指定key的名字,就要在接口的方法的参数中加@param注解,然后#{参数名} 获取参数值。

如果这多个参数刚好是pojo的属性,那么直接传入pojo就可以了,按#{属性名} 获取参数值。

如果这多个参数不是pojo的属性,不经常使用时,可以直接传入一个map;如果这多个参数经常使用,每次都传map不好,所以可以封装成一个TO(数据传输对象)[例如分页,要传开始索引,当前页码,页面大小等]

接口:

mapper文件:

测试:

扩展:

(1)参数类型与mapper中取值的方式。

(2)${}与#{}的区别

${}取出值直接封装在sql语句中,如 id=2。会有安全隐患。原生jdbc不支持占位符的地方可以使用(分表、排序,如查每年的薪水表,表名是参数,sql中不支持占位符,2016_sal、2017_sal)。

#{} 是预编译的方式,将参数设置到sql语句中,如 id=?。防止sql注入,使用较多。

=================最 后 一 条 华 丽 丽 的 分 割 线=====================

先写到这吧,下次学习再增加新的内容。

  
        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值