前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >01-mybatis基本应用

01-mybatis基本应用

作者头像
软件小生活
发布2021-10-20 15:44:35
3480
发布2021-10-20 15:44:35
举报
文章被收录于专栏:软件小生活软件小生活

JavaEE企业级框架-SSM之Mybatis01

1.JavaEE框架概述

1.1.主流框架的介绍

Struts2框架

l本质是一个filter

l基于MVC的web层框架

l内部封装了拦截器,可以对一些业务进行做拦截操作

Hibernate框架

l底层封装jdbc

l基于DAO层

l一个优秀的持久化框架

Spring框架

l一个轻量级的企业级框架

l依赖注入

lIOC控制反转

lAOP面向切面

l事物操作

l轻松与spring mvc mybatis struts2 hibernate集成

MyBatis框架

l基于DAO层

l持久化的数据访问层框架

Spring MVC框架

l本质是一个servlet

l基于web层的

lSpring框架提供的构建Web应用程序的MVC框架

lSpring MVC和Spring 进行无缝集成

1.2.Mybatis框架地位

【数据持久化】

数据的状态

瞬时态:在程序运行的时候,有些程序数据保存在内存中,当程序退出后,这些数据就不复存在了

持久态:有些数据,在程序退出后,还以文件等形式保存在硬盘中,这些数据的状态是持久的。

所以在3层架构中,DAO层称之为持久化

持久化就是将程序中的数据在瞬时状态和持久状态之间转换的机制

JDBC就是一种持久化机制,将程序数据直接保存成文件也是持久化机制的一种实现,但常用的将程序数据保存在数据库中。

=

2.Mybatis介绍及其环境搭建

2.1.Mybatis框架概述

2.1.1.简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2.1.2.mybatis资料

官网: http://www.mybatis.org/mybatis-3/

开发jar包下载: https://github.com/mybatis/mybatis-3/releases

Mybatis整合Spring jar包下载: https://github.com/mybatis/spring/releases

2.2.mybatis的架构图

2.3.mybatis环境搭建

2.3.1.下载mybatis架包

l官方mybatis架包目录

l依赖包目录:

l千万千万注意:mysql的驱动包

2.3.2.部署架包

l编译成小奶瓶

2.3.3.编写mybatis核心配置文件

lMybatis核心配置文件作用:

Mybatis的核心配置文件主要用于数据库连接和mybatis运行时所需的各种特性

Mybatis的核心配置文件的文件名可以随意,不是固定的,位置也是不固定

建议:文件名命名为:mybatis-config.xml 位置放在src目录下 便于管理一般建一个source folder目录

lmybatis的DTD头文件(在哪里找)

lmyabtis核心配置文件元素简单说明(因为后续会详解)

注意点:mybatis的XML核心配置文件里面的节点是有一定顺序的,节点位置若不按照顺序排列,则XML报错。

xml version="1.0" encoding="UTF-8" ?>DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><< span="">configuration> << span="">environments default="development"> << span="">environment id="development"> << span="">transactionManager type="JDBC" /> << span="">dataSource type="POOLED"> << span="">property name="driver" value="com.mysql.jdbc.Driver" /> << span="">property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> << span="">property name="username" value="root" /> << span="">property name="password" value="12345" /> dataSource> environment> environments>configuration>

2.3.4.创建实体类

什么叫做POJO实体类,其实就是普通的Java对象,POJO类可以简单JavaBean规范的实体,他不需要继承和实现任何特殊的java基类或者接口.JavaBean对象的状态保存在属性中,访问属性通过对象的getter和setter

注意: 使用mybatis,不需要POJO实体类名称和数据库表名一致,因为mybatis是POJO与SQL语句之间映射,只要pojo实体中的属性和数据表中的字段保持一致即可

2.3.5.创建sql映射文件

lMapper映射文件完成POJO和Sql语句之间的映射

l命名一般为:xxMapper.xml => UserMapper.xml

xml version="1.0" encoding="UTF-8" ?>DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><< span="">mapper namespace="test"><< span="">select id="selecctById" parameterType="int" resultType="com.shop.domain.User">select * from tb_user where id=#{id}select>mapper>

lmapper映射文件中元素名称:

mapper:

namespace属性

select

id属性

parameterType 属性

resultType属性

2.3.6.将mapper映射文件和mybatis的核心配置文件关联

<< span="">mappers> << span="">mapper resource="com/shop/domain/UserMapper.xml"/> mappers>

2.3.7.编写测试类

1.读取核心mybatis配置文件(在内存中只是流的方式)String config ="mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(config);2.创建SqlSessionFactory对象,此对象可以完成对配置文件的读取SqlSessionFactory sf = newSqlSessionFactoryBuilder().build(is);3.创建SqlSession对象,该对象的作用是调用mapper文件进行数据操作(一定要先引mapper)SqlSession session = sf.openSession();4.使用sql会话对象进行增删改查session.selectOne("test.selecctById", 8);5.关闭sqlsession对象ss.close()

2.4.mybatis实现增删改查

2.4.1.查询

1)根据用户id查询,返回一个用户

<< span="">mapper namespace="test"> << span="">select id="selectUserById" parameterType="int" resultType="com.shop.domain.User"> select * from tb_user where id= #{id} select>

@Test public void fun1() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(); User user = session.selectOne("test.selectasasUserById", 12); System.out.println(user); }

2)根据姓名模糊查询,返回用户列表
2.1)方式1

<< span="">select id="selectUserListByName" parameterType="String" resultType="com.shop.domain.User"> select * from tb_user where name like #{name} select>

@Test public void fun2() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(); ListuserList = session.selectList("selectUserListByName", "%l%"); for (User user : userList) { System.out.println(user); } }

2.2)方式2

<< span="">select id="selectUserListByName2" parameterType="String" resultType="com.shop.domain.User"> select * from tb_user where name like '%${value}%' select>

@Test public void fun3() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(); ListuserList = session.selectList("selectUserListByName2", "l"); for (User user : userList) { System.out.println(user); } }

3)查询所有用户,返回用户列表

<< span="">select id="selectUser" resultType="com.shop.domain.User"> select * from tb_user select> @Test public void fun4() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(); ListuserList = session.selectList("selectUser"); for (User user : userList) { System.out.println(user); } }

2.4.2.添加

1)基本插入

<< span="">insert id="insertUser" parameterType="com.shop.domain.User"> INSERT INTO tb_user (name,age) values (#{name},#{age}) insert>

@Test public void fun5() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(); User user = new User(); user.setName("小王"); user.setAge(100); session.insert("insertUser", user); session.close(); }

思考:为何sql语句执行成功了,并且程序也没有报任何的错误呢?

2)事务提交

如果想要自动进行事务提交怎么办呢?

@Test public void fun5() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(true); User user = new User(); user.setName("小王2"); user.setAge(100); session.insert("insertUser", user); // mybatis 默认是不自动提交事务的 //session.commit(); session.close(); }

3)插入返回id值

<< span="">insert id="insertUser2" parameterType="com.shop.domain.User"> << span="">selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() selectKey> INSERT INTO tb_user (name,age) values (#{name},#{age}) insert>

<< span="">insert id="insertUser2" parameterType="com.shop.domain.User" useGeneratedKeys="true" keyProperty="id"> INSERT INTO tb_user (name,age) values (#{name},#{age}) insert>

@Test public void fun6() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(true); User user = new User(); user.setName("小王3"); user.setAge(100); session.insert("insertUser2", user); System.out.println(user); session.close(); }

4)uuid主键的插入

<< span="">insert id="insertUser3" parameterType="com.shop.domain.User" useGeneratedKeys="true" keyProperty="id"> << span="">selectKey keyProperty="uuid" resultType="String" order="BEFORE"> SELECT UUID() selectKey> INSERT INTO tb_user (name,age,uuid) values (#{name},#{age},#{uuid}) insert>

@Test public void fun7() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(true); User user = new User(); user.setName("小王11sa"); user.setAge(10); session.insert("insertUser3", user); System.out.println(user); session.close(); }

2.4.3.修改

@Test public void fun8() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(true); User user = new User(); user.setName("小三"); user.setId(36); session.update("updateUser",user); session.close(); }

2.4.4.删除

@Test public void fun9() throws IOException { String config = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(config); SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sf.openSession(true); session.delete("test.deleteUser", 36); session.close(); }

3.mybatis常见要素详解

3.1.myabtis的核心对象

SqlSessionFactoryBuilder

SqlSessionFactory

SqlSession

3.2.mybatis-config.xml配置文件

3.3.mapper.xml sql映射文件

3.4.核心对象

思路图:

3.4.1.SqlSessionFactoryBuilder

SqlSessionFactoryBulider是专门构建SqlSessionFactory对象的。

SqlSessionFactoryBulider是通过build方法去构建对象的。

SqlSessionFactoryBulider使用build方法时,有三种方式可以创建对象

nConfig配置

nStream流的方式

nReader流

注意: 不管是哪种方式创建对象,内部其实都是通过加载xml文件方式来创建!!

3.4.2.SqlSessionFactory

SqlSessionFactory是专门帮我们创建SqlSession对象,可以理解为是一个专门创建SqlSession对象的工厂。

SqlSessionFactory是允许存在多个,但是存在多个意义不大,在mybatis程序中,一般只需要一个。

SqlSessionFactory是通过openSession方法去创建对象。

3.4.3.SqlSession

SqlSession专门用来操作数据库的增删改查,事物操作。

SqlSession是可以创建多个,但是一旦调用了close方法,那么当前sqlSession就废了

SqlSession和JDBC中connection很像,只不过它还可以帮我们操作数据库

3.5.编写mybatis的Utils工具类

1)让SqlSessionFactory在整个程序中只有一份

2)获取session方法

3)关闭session方法

4.SqlSession使用进阶

4.1.直接使用内部封装的方法

4.2. mapper接口方式

4.2.1.mapper接口规则

1.映射文件中namespace要等于接口的全路径名称

2.映射文件中sql语句的id要等于接口的方法名称

3.映射文件中输入参数类型要等于接口方法中的参数类型

4.映射文件中的返回值类型要等于接口方法中的返回值类型

4.2.2..使用mapper接口(重点)

1)Mapper映射文件编写

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"><< span="">mapper namespace="com.shop.mapper.UserMapper"> << span="">select id="selectUserById" resultType="com.shop.domain.User" parameterType="int"> SELECT * from tb_user WHERE id = #{id}; select> << span="">select id="selectUser" resultType="com.shop.domain.User"> SELECT * from tb_user select> << span="">insert id="insertUser" parameterType="com.shop.domain.User"> INSERT INTO tb_user(name,age,gender)VALUES(#{name},#{age},#{gender}) insert> << span="">update id="updateUser" parameterType="com.shop.domain.User"> UPDATE tb_user SET name=#{name},age=#{age},gender=#{gender} where id = #{id} update> << span="">delete id="deleteUser" parameterType="int"> delete from tb_user where id = #{id} delete>mapper>

2)编写Mapper接口

package com.shop.mapper;import com.shop.domain.User;public interface UserMapper { public User selectUserById(Integer id);}

3)将Mapper 文件引入主配置文件
4)测试

@Test public void fun4() throws IOException { // 读取mybatis的核心配置文件 String configXml = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(configXml); SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSession.openSession(true); UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.selectUserById(35); System.out.println(user); session.close(); }

5.mybatis的基本要素-核心配置文件(重点)

mybatis核心配置文件专门用来配置myabtis的一些核心功能,常见的比如数据库的连接操作,事物,关联mapper映射文件。

5.1.mybatis-config.xml文件结构

注意:一定要注意节点顺序,如果顺序错了,IDE会报错!

5.2Mybatis核心配置文件详解:

Configuration 是核心配置文件的总管,就是一个根标签,mybatis所有的配置信息都会放在它里面

核心配置文件中的标签元素的顺序位置是固定的,不能乱改的,参照笔记

5.2.1. Properties

Properties是专门配置一些动态的可以被替换(灵活)的内容(配置数据库的信息)

【方式1】:(重点)

1.创建一个properties文件

2.使用properties标签来引入

3.使用datasource标签中占位符来替换

【方式2】:(了解)

直接在核心配置文件中使用properties标签定义

思考:若两种方式都使用了,哪种方式的会优先呢?

5.2.2.Setting(暂时作为了解)

Setting元素中设置了mybatis框架中很多很多非常重要的选项,用于设置和改变mybatis的行为

5.2.3.typeAliases(重点)

typeAliases元素的作用是配置类型别名,通过与mybatis的SQL映射文件相关联,减少输入多余的完整类名,从而简化操作

思考:上面这种写法,有弊端吗?

答案肯定是有的

<< span="">typeAliases> << span="">typeAlias type="com.shop.domain.User" alias="user" /> << span="">typeAlias type=" com.shop. domain. product" alias="product" /> << span="">typeAlias type=" com.shop. domain .Customer" alias="customer" /> << span="">typeAlias type=" com.shop. domain. Order" alias="order" />…………………………..typeAliases>

如果是有很多个实体对象,意味着仍然需要写很多个typeAlias,简单的说也要取很多别名

最好的方式,使用package进行限定

<< span="">typeAliases>

5.2.4.Environments(重点)

Mybatis允许配置多套环境:开发、测试、生产环境

<< span="">environments default="development">

5.2.5.Mappers (重点)

Mappers:映射器,用来定义Sql的映射语句,我们只需要告诉mybatis在哪里找到这些SQL语句,即去哪里找对应的SQL映射文件

帮助我们引入写好sql语句的mapper映射文件

一个mappers父元素中可以有多个儿子(mapper映射文件)

Mapper元素加载SQL映射文件有几种方式:

使用类资源路径获取资源

<mapperresource="cn/test/UserMapper.xml"/>

使用URL获取资源(路径是绝对路径)

<mapperurl="file:///E:SqlMapper/UserMapper.xml"/>

使用class获取资源(实际上是接口名)

<mapper </mapperclass="cn.test.UserMapper"/>

使用package包名加载

<package name="com.shop.dao"/>

6.mapper.xml sql映射文件

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JavaEE企业级框架-SSM之Mybatis01
  • 1.JavaEE框架概述
    • 1.1.主流框架的介绍
      • 1.2.Mybatis框架地位
      • 2.Mybatis介绍及其环境搭建
        • 2.1.Mybatis框架概述
          • 2.1.1.简介
          • 2.1.2.mybatis资料
        • 2.2.mybatis的架构图
          • 2.3.mybatis环境搭建
            • 2.3.1.下载mybatis架包
            • 2.3.2.部署架包
            • 2.3.3.编写mybatis核心配置文件
            • 2.3.4.创建实体类
            • 2.3.5.创建sql映射文件
            • 2.3.6.将mapper映射文件和mybatis的核心配置文件关联
            • 2.3.7.编写测试类
          • 2.4.mybatis实现增删改查
            • 2.4.1.查询
            • 2.4.2.添加
            • 2.4.3.修改
            • 2.4.4.删除
        • 3.mybatis常见要素详解
          • 3.1.myabtis的核心对象
            • 3.2.mybatis-config.xml配置文件
              • 3.3.mapper.xml sql映射文件
                • 3.4.核心对象
                  • 3.4.1.SqlSessionFactoryBuilder
                  • 3.4.2.SqlSessionFactory
                  • 3.4.3.SqlSession
                • 3.5.编写mybatis的Utils工具类
                  • 1)让SqlSessionFactory在整个程序中只有一份
                  • 2)获取session方法
                  • 3)关闭session方法
              • 4.SqlSession使用进阶
                • 4.1.直接使用内部封装的方法
                  • 4.2. mapper接口方式
                    • 4.2.1.mapper接口规则
                    • 4.2.2..使用mapper接口(重点)
                • 5.mybatis的基本要素-核心配置文件(重点)
                  • 5.1.mybatis-config.xml文件结构
                    • 5.2Mybatis核心配置文件详解:
                      • 5.2.1. Properties
                      • 5.2.2.Setting(暂时作为了解)
                      • 5.2.3.typeAliases(重点)
                      • 5.2.4.Environments(重点)
                      • 5.2.5.Mappers (重点)
                  • 6.mapper.xml sql映射文件
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档