mybatis入门_配置文件的配置

一.全局配置文件配置

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>
时间: 2024-08-06 16:05:27

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

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

来源:http://www.mybatis.org/mybatis-3/zh/configuration.html properties mybatis读取属性顺序. 如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载: 在 properties 元素体内指定的属性首先被读取. 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性. 最后读取作为方法参数传递的属性,并覆盖

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

Mybatis 好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点.今天想谈谈关于mybatis的一些基础入门知识. 进入正题~~: a.关于mybatis: 我个人觉得mybatis深得中国中庸之道的精髓,虽然在执行速度上来说它没有直接使用jdbc那么效率,也不如Hibernate那么全自动(O/R mapping),只能算是个半自动的(O/R mapping) 但是半自动的好处就在于它的各个方面的缺点也都不像jdbc或者Hibernate那么突出.兼顾了效率也预防了优化sql的问

MyBatis 入门开发 —-配置文件

自定义别名在SqlMapConfig.xml中配置: <typeAliases> <!--单个别名--> <!-- <typeAlias alias="user" type="cn.fy.domain.User"/>--> <!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) --> <package name="cn.fy.domain"/> &l

MyBatis入门基础(一)

一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记录于此,方便大家参考,也方便自己查阅. 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么问题. package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P

Mybatis入门(1)

MyBatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代码

mybatis入门看这一篇就够了

Mybatis介绍 ? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2013年11月迁移到Github.MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程

intellij IDEA Mybatis入门案例

最近打算学习ssm框架  Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub   https://github.com/Wo-com/mybatis_demo,需要的点击下载 接下来说几个要点吧: 1.用mysql创建test数据库,添加一张user表,字段如下: 2.编辑  pom.xml  文件导入 jar包 <?xml version="1.0" enc

mybatis入门案例分析

mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exception{ //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder

mybatis入门一:mybatis框架原理

一.mybatis框架原理图(图片参考网上) 二.框架原理图解释: 1.mybatis配置 sqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息.mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句.此文件需要在SqlMapConfig.xml中加载 2.通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂 3.由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSessi