一.全局配置文件配置

1.1 properties标签

Properties标签可以用来加载配置文件.例如,我们可以将数据库的连接信息放入到一个配置文件(db.properties中..)

下为db.properties

db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
db.username=root
db.password=root

在全局配置文件SqlMapConfig.xml中引入该配置文件.

然后就可以在全局配置文件的关于数据库的配置信息里使用配置文件的信息了

加载properties的顺序:

1. 先加载<properties>标签下的property标签.观察有没有对应的键值对

2. 加载properties的resource属性指定的配置文件.注意.这一步如果与上一步重名.那么将会覆盖上一步声明的属性.例如:

图中的property声明的属性将会被后加载的配置文件的相同的属性给覆盖

3.优先级最高的是paramterType中传入的值.(这也是在配置文件中写db.username而不写username的原因..避免不必要的覆盖!)

1.2 typeAlias.

1.2.1 mybatis默认支持的别名

别名

映射的类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

1.2.2 自定义别名

Mybatis对于基本的数据类型定义了别名,我们可以为我们自己创建的Pojo类定义别名.定义别名采用的是<typeAliases>标签.

现在我们就可以使用别名了:

批量定义别名.(用于定义包)包下面的类的别名默认为类名.首字母大小写即可.

使用别名:

1.3 mapper标签

mapper标签用于引入mapper配置文件.

1.3.1 <mapper resource=’’”/>

使用相对于类路径的资源

如:<mapper resource="sqlmap/User.xml" />

1.3.2 <mapper url=’’”/>

使用完全限定路径

如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

1.3.3<mapper class=’’”/>

使用mapper接口的全限定名

如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>

注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

1.3.4 <package name=’’/>(推荐)

注册指定包下的所有映射文件

如:<package name="cn.itcast.mybatis.mapper"/>

注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

如下所示:

2.Mapping映射文件配置

2.1 传递输入参数

2.1.1 传递包装Pojo

包装Pojo即一个类,当中有一个属性为一个Pojo.而我们所需要的属性被封装在Pojo

下面是示例:我们将要查询的信息封装在一个Pojo类User中.然后将User类封装在UserQueryVO中.

public class UserQueryVO {
private User user ; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} }

紧接着我们需要在mapper配置文件的输入参数parameterType中声明这个类.

然后需要写SQL语句了.获取对应的属性值直接属性名.属性值即可.(无论嵌套多少层都没事)

2.1.2 传入HashMap

同传递POJO对象一样,map的key相当于pojo的属性。

@Test
public void testMapper2() {
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);//建立代理对象
Map<String,String> map=new HashMap<>();
map.put("username", "小明");
map.put("sex", "1");
List<User> users = mapper.findUserByQueryMap(map);
System.out.println(users);
}

2.2 输出映射

2.2.1 resultType的要点

查询的列名和映射的pojo的属性名一致,使用resultType映射才会成功。

如果查询的列名和映射的pojo的属性名全部不一致,则映射的pojo为null。

如果查询的列名和映射的pojo的属性名有一个一致,则映射的pojo不为null,而且只有一致的那一个属性才有值。

2.2.2 resultType为简单类型

@Test
public void testResult1() {
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);//建立代理对象
int count = mapper.selectCount();
System.out.println(count);
}

2.2.3 Pojo/Pojo集合

ResultType为单列的数据的类型.

2.2.4 resultMap

使用要求:

使用resultMap进行结果映射时,不需要查询出的列名和映射的pojo的属性名一致。但是需要定义一个resultMap标签来完成列名和属性名的映射关系。

需求:

将以下sql查询出的结果进行映射。

Select id id_,username username_,sex sex_ from user where id = 1

由于查询出的数据的名称与Pojo类的属性不一致,因此无法直接用resultType对结果进行映射.

所以我们采用resultMap进行映射.

具体方法如下:

1.在UserMapper.xml中进行配置

2/在UserMapper中添加方法

3.进行测试

@Test
public void testResult2() {
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);//建立代理对象
User user = mapper.selectByResultMap(1);
System.out.println(user);
}

2.3 动态sql拼接

在mybatis提供了一些动态标签,可以帮助开发人员更快,更方便的开发出持久层的代码,常见的动态标签有if标签,

Where标签,foreach标签,sql片段标签.

2.3.1 if标签

在前面的关联查询中,我们用了下面的sql语句去根据关键字查询.但是这样实际是不合理的.

因为可能用户在输入的时候,根本就没有输入Username,只输入了其中的一项(这时候只能根据这一项进行查询),或者甚至什么都没有输入(这时候应该查询出全部).而我们是没有办法提前去判断用户的输入条件的.这时候就

需要根据用户输入的条件,动态的改变sql语句.用到了if标签.if标签用法如下,在if中书写需要判断的表达式,mybatis将会根据判断的结果动态的将sql语句拼接起来.

<!-- 通过if标签完成检索 -->
<select id="findUserByQuery" parameterType="com.xyy.po.UserQueryVO" resultType="user">
SELECT * FROM USER WHERE 1=1
<!-- 如果用户输入了username的情况下,才会进行关联查询.test内书写表达式 -->
<if test="user!=null">
<if test="user.username!=null and user.username!=''">
AND username LIKE '%${user.username}%'
</if>
<!-- 如果用户输入了sex的情况下,才会进行关联查询.test内书写表达式 -->
<if test="user.sex!=null and user.sex!=''">
and sex=#{user.sex};
</if>
</if>
</select>

2.3.2 where标签

实际上在关联查询的where后面先拼接1=1是不好的做法,因为它会降低效率.更好的做法是用where标签去替代:

Where标签可以判断后面有没有内容.如果后面只有1个内容,就会将and去掉.并且拼接上where.如果后面有两个或者以上的条件,那么将第一个条件,即where后面的条件,去掉and,然后将其他条件的and保留.如果后面没有

条件,则在主的sql语句后面不会添加where关键字.具体做法如下:

<select id="findUserByQuery" parameterType="com.xyy.po.UserQueryVO" resultType="user">
SELECT * FROM USER
<!-- 什么都没输,直接输出SELECT * FROM USER -->
<where>
<!-- 如果user.username!=null而user.sex==null那么将会输出WHERE username LIKE '%${user.username}%'.(默认去掉where后的第一个and) -->
<if test="user!=null">
<if test="user.username!=null and user.username!=''">
AND username LIKE '%${user.username}%'
</if>
<if test="user.sex!=null and user.sex!=''">
and sex=#{user.sex};
</if>
</if>
</where>
</select>

2.3.3 sql片段

Sql片段方便我们将一些sql语句中相同的部门提取出来,先声明为sql片段,然后在书写sql语句的时候,直接引用这些sql片段即可.注意,sql片段应该具有可复用性.具体做法如下所示:

<sql id="queryUser">
<if test="user!=null">
<if test="user.username!=null and user.username!=''">
AND username LIKE '%${user.username}%'
</if>
<if test="user.sex!=null and user.sex!=''">
AND sex=#{user.sex};
</if>
</if>
</sql> <!-- 通过if标签完成检索 -->
<select id="findUserByQuery" parameterType="com.xyy.po.UserQueryVO" resultType="user">
SELECT * FROM USER
<!-- 什么都没输,直接输出SELECT * FROM USER -->
<where>
<include refid="queryUser"></include>
</where>
</select>

2.3.4 foreach标签.

例如,如果需要根据传入的一系列的id,去查询对应的用户,要怎么做呢?

这种需求所对应的sql语句应该如下:

SELECT * FROM USER WHERE id IN (…)

括号内放的是传入的所有id值.而我们在mybatis可以通过foreach标签来完成对于传入的集合的遍历.具体做法如下所示:

<!-- 使用foreach标签遍历集合 -->
<!-- collection为要遍历的元素.open为在遍历前要拼接的语句,close为要遍历后要拼接的语句 -->
<!-- separator为遍历的每一个项目之间的分隔符,item为遍历的项目的标识(相当于JSTLeach标签的var) -->
<if test="ids!=null and ids.size>0">
AND id IN
<foreach collection="ids" open="(" close=")" separator="," item="id" >
#{id}
</foreach>
<!-- 上述形式不固定,只要能拼接成AND id IN (id,id,id)即可(id表示每次遍历得到的id) -->
</if>

上面的是通过POJO对象传入List集合,实际上我们可以直接传入List集合.代码如下:

需要注意的是获取这个List集合,mybatis声明的变量为list.而这个变量变量名是不可以改变的.

<!-- 通过直接传入List集合完成检索 -->
<select id="findUserByQueryList" parameterType="java.util.List" resultType="user">
SELECT * FROM USER
<!-- 什么都没输,直接输出SELECT * FROM USER -->
<where>
<if test="list!=null and list.size>0">
id IN
<foreach collection="list" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</if>
</where>
</select>

mybatis入门_配置文件的配置的更多相关文章

  1. mybatis入门_一对多,多对多映射以及整合spring框架

    一.一对多映射. 1.1 一对多映射之根据多的一方关联查询一的一方 示例:查询出具体的订单信息,同时也查询出来订单的用户信息. 引入的订单表如下所示: 框选出来的为具体的外键. 订单的Pojo类如下所 ...

  2. Mybatis XML 映射配置文件 -- 熟悉配置

    来源:http://www.mybatis.org/mybatis-3/zh/configuration.html properties mybatis读取属性顺序. 如果属性在不只一个地方进行了配置 ...

  3. mybatis入门篇基——基本配置与参数说明

    Mybatis 好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点.今天想谈谈关于mybatis的一些基础入门知识. 进入正题~~: a.关于mybatis: 我个人觉得mybatis深得 ...

  4. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  5. Mybatis(一) mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  6. Mybatis学习(一)—————mybatis入门

    学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hib ...

  7. Java SSM框架之MyBatis3(一)MyBatis入门

    MyBatis3介绍 mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的o ...

  8. Mybatis系列(一):Mybatis入门

    一.Mybatis是什么 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  9. Mybatis入门及Dao开发方式

    本节内容: Mybatis介绍 使用jdbc编程问题总结 Mybatis架构 Mybatis入门程序 Dao的开发方式 SqlMapConfig.xml文件说明 一.Mybatis介绍 MyBatis ...

随机推荐

  1. [转]spring_bean的属性

    1.parent 表示继承的父类 如果有很多继承同一个父类的BEAN 那么在配置文件中实例那些BEAN时候可以省略掉父类已经注入的属性 bean定义继承父bean定义,它可以覆盖父bean的一些值,或 ...

  2. splitFile2SmallFile

    1. split file into several files """ this is aa customizable version of the standard ...

  3. 《zw版·Halcon入门教程与内置demo》

    <zw版·Halcon入门教程与内置demo> halcon系统的中文教程很不好找,而且大部分是v10以前的版本. 例如,QQ群: 247994767(Delphi与halcon), 共享 ...

  4. 【原创】我所理解的自动更新-APP发布与后台发布

    发布后台 创建渠道:添加新的渠道,设置渠道名称,自动生成渠道id.    查看渠道:查看渠道基本信息,渠道app版本号,资源版本号,是否开启更新.    创建/更新APP:选择打包ios,androi ...

  5. Makefile使用库

    这篇文章演示了Makefile使用mysqlpp库和lua库的写法. test.cpp: #include <iostream> #include <stdint.h> #in ...

  6. Autumn is a second spring when every leaf is a flower.

    Autumn is a second spring when every leaf is a flower. 秋天即是第二个春天,每片叶子都是花朵.——阿尔贝·加缪

  7. 剑指offer——树的子结构 (JAVA代码)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: ...

  8. poj3069 Saruman's Army

    http://poj.org/problem?id=3069 Saruman the White must lead his army along a straight path from Iseng ...

  9. SeleniumIDE从0到1 (Selenium IDE 录制)

    seleniumIDE安装成功后下面我们用百度网址来简单录制下: 简介一:百度输入框录制操作 1.打开SeleniumIDE 2.SeleniumIDE地址栏中输入百度网址:[https://www. ...

  10. JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

    需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...