mybatis - 1

Mybatis - 1


  •     一、了解

        更加简化jdbc 代码,简化持久层,sql 语句从代码中分离,利用反射,将表中数据与java bean 属性一一映射即ORM


  •     二、mybatis环境搭建

        1. 新建maven项目,添加依赖坐标
        2. log4j.properties添加
        3. mybatis.xml配置文件添加
        4. UserMapper.xml映射文件添加

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
  1.命名空间配置  全局唯一  包名+文件名
  2.配置Mapped Statement
  3. statement配置
       id 值声明statement编号  同一命名空间(同一文件)下不可重复
       parameterType  输入参数即占位符的数据类型  类型可以是 基本数据类型,字符串,java bean ,map,list等
       resultType     输出结果  类型可以是基本数据类型,字符串,java bean,map等
       statement 描述 即待执行的sql
       #{id}  占位符  变量名为id/value 均可   ${value}  变量名必须为value 字符串拼接形式  无法避免sql 注入
 -->
<mapper namespace="com.lwx.mapper.UserMapper">
    <select id="queryUserById" parameterType="int"  resultType="com.lwx.po.User">
        select id,user_name as userName,user_pwd as userPwd from user where id=#{id}
    </select>
</mapper>


        5. 修改pom 配置,设置资源文件夹路径
        6. 测试

            a)、读取mybatis 的配置文件
            b)、加载配置文件创建SqlSessionFactory
            c)、根据SqlSessionFactory 创建SqlSession
            d)、通过sqlSession 操作数据库
            e)、处理结果
            f)、关闭session

package com.lwx;

import com.lwx.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/**
 * By:刘文旭 ~ https://blog.csdn.net/qq_40414738
 * Date:2018/11/2 20:30 .
 */
public class MybatisTest {

    @Test
    public void test() throws IOException {
        /**
         a)、读取mybatis 的配置文件
         b)、加载配置文件创建SqlSessionFactory
         c)、根据SqlSessionFactory 创建SqlSession
         d)、通过sqlSession 操作数据库
         e)、处理结果
         f)、关闭session
         */

        /**
         * 加载配置到内存
         */
        InputStream is= Resources.getResourceAsStream("mybatis.xml");

        /**
         * 创建SqlSessionFactory 对象hibernate 也是如此必须先获取
         SqlSessionFactory 实例化对象
         */
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        /**
         * 获取session 以便操作数据库
         * 参数一:指定UserMapper.xml 映射文件id 必须加入命名空间
         * 参数二:指定输入参数
         */
        SqlSession session = sqlSessionFactory.openSession();
        User user = session.selectOne("com.lwx.mapper.UserMapper.queryUserById",1);

        /**
         * 将返回的结果输出
         */
        System.out.println(user);

        /**
         * 操作完数据库关闭session
         */
        session.close();
    }
}

  •     三、Mybatis 配置文件解释

        1.properties
            简化jdbc配置, 可以引用jdbc.properties文件
                添加 .properties文件
                加载数据库配置
                    <properties resource="jdbc.properties"></properties>
                修改为动态配置的属性值
            
        2.settings
            MyBatis 修改操作运行过程细节的重要的步骤
                1) cacheEnabled 缓存
                    全局配置
                2) useGenerateKey 自动生成主键
                    允许JDBC生成主键
        3.别名 typeAlias
            减少类完全限定名的冗余
                自定义
                    <typeAliases><typeAlias alias="User" type="com.shsxt.mybatis.vo.User" /></typeAliases>
                    包扫描
                        <package name="com.shsxt.mybatis.vo"/>
                内置
                    _integer <- Int ...
        4.对象工厂
            MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。
        5.plugin插件
            会讲分页插件 PageHelper
        6.多数据源配置
            有助于将SQL 映射应用于多种数据库之中,(SqlSessionFactory 实例)
尽管可以配置多个环境,每个SqlSessionFactory 实例只能选择其一。
        7.事务管理
            两种:type=”[JDBC|MANAGED]”
        8.数据源
            UNPOOLED
                每次被请求时打开和关闭连接
            POOLED
                一种使得并发Web 应用快速响应请求的流行处理方式。(一般选用这种)
            JNDI
        9.mapper映射器4种配置
            sqlmapper 配置文件路径
                <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
            url 绝对路径形式
                <mapper url="file:///var/mappers/AuthorMapper.xml"/>
            接口列表配置形式注解sql
                <mapper class="org.mybatis.builder.AuthorMapper"/>
            映射包下所有接口
                <package name="org.mybatis.builder"/>
        10. typeHandlers(类型处理器)
            将获取的值以合适的方式转换成Java类型


  •     四、mapper.xml详解

        配置:
            1. id  唯一表示
            2. paramsType 参数类型
            3. resultTyps 结果类型
            4. resultMap描述如何从数据库结果集中来加载对象


        1.select标签
            1) 输入参数: int string Map JavaBean
            2) 输出参数: 基本数据类型,字符串,JavaBean,Map,List等
        2.insert标签
            1) 普通添加
            2) 添加返回主键
                a.    通过添加xml(区分mysql和Oracle)
                b.    通过属性useGeneratedKeys="true" keyProperty="id"
            3) 批量添加
             <foreach> 
                collection
                    根据传入参数不同
                item
                    集合元素迭代时的别名
                separator
                    迭代元素之间的分隔符
                open/close
                    以什么开始/结束
        3.update
            1) 普通添加
            2) 批量添加
        4.delete
            1) 单条更新
            2) 批量更新


        5.sql标签
            可以重用的sql片段
                1) 定义 <sql id=’’>.....</sql>
                2) <include refid=’’/>

        6.resultMap
            1) 定义<resultMap></resultMap>
            2) 使用 resultMap 定义sql返回类型


  •     五、mapper 接口代理方式的crud 开发

        不用写接口的实现类


  •     六、动态SQL语句

        根据参数不同,sql语句不同
            1.<if>
                <if test=”name!=null and name!=’’”>
                sql语句
                </if>
            2.choose、when、otherwise
            3.tirm where set
                1) where 在合适的时候去除多余的and
                2) set 在合适的时候去除 , 
                3) trim 拥有where 和 set功能, 可以可以扩展
            4.foreach
               详情请查看 foreach元素的属性主要有 item,index,collection,open,separator,close。


  •     七、Ognl 表达式

        简化if 的test判断
            1. 定义Ognl类,定义方法
            2. @Ognl@isNotEmpty(userName)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值