最简洁 学完就会MyBatis框架

MyBatis框架

这是作者一天的学习整理 希望多多鼓励!!
直接让你学完即可上手MyBatis

一、概念

三层架构

  1. 界面层 和用户打交道 显示处理结果
  2. 业务逻辑层 接收界面层的数据 处理业务调用数据库
  3. 数据访问层 访问数据库 对数据增删改查

框架

  1. 是一个软件
  2. 不是全能的 针对一个领域

JDBC的缺陷

重复的代码多 开发效率低

MayBatis框架

sql映射:把表中的数据映射成一个对象 操作对象 就是操作数据

数据访问:对数据增删改查

总结:增强版的JDBC 集中写SQL语句 不必关心JDBC各种繁琐的操作

二、入门案例使用

1. 下载MyBatis 配置环境

2.整理模块 添加资源目录

3.添加依赖 重新加载项目

<!--mybatis依赖-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.7</version>
</dependency>
<!--mysql驱动-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.23</version>
</dependency>
    
<!-- pom.xml下的build中加入 -->
<resources>
 	<resource>
        <directory>src/main/java</directory>
        <includes>
          	<include>**/*.properties</include>
          	<include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
	</resource>
</resources>    

4.domain创建实体类bean

数据库列名与属性名一致【保存表中一行数据】

5.do创建接口

接口名=实体类名+Dao

定义操作数据库的方法

5. 创建配置文件

sql映射文件.xml 【写sql语句的 一个表一个】

​ 在接口目录中

​ 文件名和接口名一致

<?xml version="1.0" encoding="UTF-8" ?>
<!-- mybatis-3-mapper.dtd:约束文件名称 
    	检查当前文件的格式是否符合mybatis的要求
    -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper:当前文件的根标签 
    namespace:命名空间 要求dao接口的全限定名称 -->
    
<mapper namespace="">
    <!-- id:赋值接口中的方法名称
        resultType:得到的类的全限定名称 -->
    <select id="" resultType="">
        select  from 
    </select>
</mapper>

6. 创建主配置文件

主要定义数据库的信息 sql文件的位置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 日志 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--环境配置 数据库的连接信息 default 指定id的数据库-->
    <environments default="sql">
        <!--一个数据库的信息配置 id:唯一值 环境的名称-->
        <environment id="sql">
            <!-- type myBatis的事物类型-->
            <transactionManager type="JDBC"/>
            <!--type 数据源的类型-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!-- mappers:sql映射文件的位置
        mapper:指定一个文件的位置 类路径开始的路径 classpath
    -->
    <mappers>
        <mapper resource="com/baidu/Dao/StudentDao.xml"/>
    </mappers>
</configuration>

7.测试

SqlSession session = MyBatisUtil.getSqlSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
        List<Student> list = studentDao.sel();
        for(Student student:list){
            System.out.println(student);
        }
        session.close();
//注意:MyBatis框架 提交
//session = factory.openSession(true);
//session.commit();

8.工具类

private static SqlSessionFactory factory = null;
    static{
        try {
            InputStream in = Resources.getResourceAsStream("mybatis.xml");
            factory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        SqlSession session = null;
        if(factory != null){
            session = factory.openSession();
        }
        return session;
    }

三、传参

将java代码的数据(接口中方法的形参)传入sql映射文件的sql语句中

1. 一个简单类型

#{任意字符}

2. 多个参数 @param

//接口中的方法
public xxx xxxx(@param("oo") xxx xxx){}

//sql映射文件
select xxx,xxx from xxx where xxx = #{oo}

3. 多个传参-对象传参

​ #{属性名}

4. Map传参 #{key}

//接口方法
public xxx xxxx(Map<String,Object> xxx){}

//测试
Map<String,Object> xxx = new HashMap();
xxx.put("name","张三")
xxx.put("age",20)

5.# 和 $区别

'#'防止注入

'$'允许注入 可以代替表名 列名

四、封装MyBatis输出结果

1. resultType 输出结果

返回对象:

​ 1. 执行sql语句 调用无参构造方法,创建对象

​ 2. 列名赋值给同名属性

​ 返回基本类型 建议全限定名称

  1. 返回Map Key就是列名 value就是列值

    一次只能返回一行记录 多了报错

2.自定义类型的别名

  1. 别名

  2. 包名

//在主配置文件 上面定义
<typeAliases>
        <typeAlias type="全限定名称" alias="别名"/>
</typeAliases>
    
<typeAliases>        
    //使用包名 类名就是别名
    	<package name="com.baidu.doMain" />
</typeAliases>
    
//在resultType属性使用别名
<select id="sel" resultType="别名">
    select id,name,email,age from student
</select>

3. 列名属性名不一致 赋值

  1. resultMap:结果映射 推荐

自定义列名赋值给那个属性

<resultMap id="studentMap" type="com.baidu.doMain.Student">
        <!-- 列给属性-->
        <!-- 主键对应-->
        <id column="" property=""/>
        <!-- 非主键对应-->
        <result column="" property=""/>
</resultMap>
//在resultMap属性使用别名
<select id="sel" resultMap="studentMap">
    select id,name,email,age from student
</select>
  1. 使用resultType解决列名属性名不一致 as
//在resultMap属性使用别名
<select id="sel" resultType="com.baidu.Student">
    select idd id,namee name,emaill emaill,agee age from student
</select>

like模糊查询

  1. 输入 String 字符串"%xx%" 整个输入

  2. 在sql语句内输入"%"要加双引号

五、动态sql

1. if where foreach

sql语句是变化的 可以根据条件获取不同的sql语句

主要是where部分变化

**实现:**是使用MyBatis提供的标签

<if>
	<if test = "判断java对象的属性值">
		//slq语句
	</if>
        
//会自动添加一个where 
//可以包含多个if并去掉多余and or
<where>
	<where>
		//多个if
	</where>
        
//循环数组和集合 主要用在in
<foreach>
    <foreach collection = "变量名" 
        item = "自定义变量名"
        open="(" close=")"
        separator=",">
        #{自定义变量名 如果是对象的属性加.}
	</foreach>

2. sql代码片段

就是代码复用

//定义
<sql id = "自定义名">
	//sql语句    
</sql>
   
//使用
<include refid = "自定义名">

六、配置文件

1. 数据库属性配置文件

  • 把数据库连接信息和主配置文件分开

  • 便于修改、保存、处理数据库的信息

  • propertises文件放在资源目录下 resources

  • 使用格式 xxx=xxx 比如 jdbc.mysql.driver = xxx

//主配置文件中指定路径
<properties resource = "xxxx.properties">
//使用格式 ${xxx}

2. 指定多个slq映射文件

//多写
<mappers>
	<mapper resource = "sql映射文件路径位置"/>
    <mapper resource = "sql映射文件路径位置"/>
</mappers>

//使用包名
//要求:1。映射文件名和接口名一致
//    	2.映射文件名和接口名同一个目录
<mappers>
	<package name = "包名"/>
</mappers>

七、扩展

1. 分页PageHelper使用

//加入依赖
<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.10</version>
    </dependency>
//在主配置文件中 数据库信息上 插入插件 
<plugins>
    <plugin interceptor = "com.github">
</plugins>

//方法使用   
PageHelper.startPage(第几页,一页几个);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值