Mybatis-各标签解读以及增删改查

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mybatis-各标签解读以及增删改查

1.配置文件标签解读

<?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>
</configuration>


1.属性翻译

configuration(配置)

properties(属性)

settings(设置)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境配置)

environment(环境变量)

transactionManager(事务管理器)

dataSource(数据源)

databaseIdProvider(数据库厂商标识)

mappers(映射器)


2.dataSource

  配置连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"></property>
                    <property name="url" value="jdbc:mysql://localhost:3306/bobo?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"></property>
                    <property name="username" value="root"></property>
                    <property name="password" value="123456"></property>
                </dataSource>


dataSource使用标准的JDBC数据源接口来配置JDBC,有三种数据源

POOLED(常用) |UNPOOLED | JNDI(不推荐)

POOLED:利用池的原理,使用完毕后会将数据返回池中

UNPOOLED:没有利用池,每一个数据库操作都会创建一个新的连接,用完就会关闭

JNDI:在服务器,spring容器中使用,容器集中或在外部配置数据源,然后放置一个JNDI上下文的引用


3.transactionManager

JDBC中通过Connection对象进行事务管理,不提交,数据不会真正的插入到数据库中

通过commit方法进行提交,rollback方法进行回滚

         <transactionManager type="JDBC"></transactionManager>


4.environment

配置mybatis的多套运行环境,将sql映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default来指定)

<!--    配置环境-->
    <environments default="mysql">
<!--        配置mysql的和环境-->
        <environment id="mysql">
        </environment>
    </environments>


5.mappers

映射器:定义映射sql语句文件

通过映射器告诉mybatis到哪里找到映射文件

<!--    配置映射文件的位置-->
    <mappers>
    //使用xml配置 用resource
        <mapper resource="cn/bobo/IUserDao/IUserDao.xml"></mapper>
  //使用注释设置 用class来设置
<!--        <mapper class="cn.bobo.IUserDao.IUserDao"></mapper>-->
    </mappers>


6.namespace

namespace 的命名必须跟某个接口同名,接口中的方法与映射文件中的sql语句id应该一一对应,用来区别不同的mapper

命名规则: 包名+类名

<mapper namespace="cn.bobo.IUserDao.IUserDao"></mapper>


7.生命周期和作用域

流程图

551ff23c1f3f4e3bb372ee4147ffffc4.png


**

SqlSessionFactoryBulider 的作用在于创建SqlSessionFactory,创建成功后,其就失去了作用

SQLSessionFactory作用是创建SqlSession接口对象,其生命周期等同于Mybatis的应用周期,

由于SqlSessopmFactory是一个对数据库的链接池。创建几个就会出现几个数据池,所以要避免这种情况的产生。

而此时,Sqlsession就相当于一个数据库连接,可以在一个书屋李执行多条sql,然后通过他的commit,rollback等方法,提价或者回滚事务,所以它应该存活于一个业务请求中,处理完毕整个请求后,应该关闭这条连接,让它归还给SqlSessionFactory中,否则数据库资源就很快被耗费精光了。所以要使用try…catch finally 语句来保证其是否正确关闭。


2.CRUD增删改查实现

注意:其中增删改操作需要提交事务

1.创立实体类:

package cn.bobo.UserDao;
import java.io.Serializable;
public class user implements Serializable {
    private Integer id;
    private String name;
    private String pw;
    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pw='" + pw + '\'' +
                '}';
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPw() {
        return pw;
    }
    public void setPw(String pw) {
        this.pw = pw;
    }
}


2.实现接口:

package cn.bobo.IUserDao;
import cn.bobo.UserDao.user;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IUserDao {
//查询所有
    List<user> findall();
//保存用户
    void saveUser(user user);
//更新用户
    void updateUser(user user);
//删除用户
    void deleteUser(Integer userid);
//查询id
    user findidUser(Integer id);
//模糊查询
    List<user> findbyName(String username);
//查询总用户数
    int countUser();
}


3.sql中配置

<?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">
<mapper namespace="cn.bobo.IUserDao.IUserDao">
    <select id="findall" resultType="cn.bobo.UserDao.user">
        select * from user;
    </select>
<!--    保存用户-->
    <insert id="saveUser" parameterType="cn.bobo.UserDao.user">
        insert into user(id, name, pwd)values(#{id},#{name},#{pw});
    </insert>
<!--    更新用户-->
    <update id="updateUser" parameterType="cn.bobo.UserDao.user">
        update user set id=#{id},name=#{name},pwd=#{pw} where id=#{id}
    </update>
<!--    删除用户-->
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{uid}
    </delete>
<!--    查询id-->
    <select id="findidUser" parameterType="int" resultType="cn.bobo.UserDao.user">
        select * from user where id =#{uid}
    </select>
<!--    模糊查询-->
    <select id="findbyName" parameterType="String" resultType="cn.bobo.UserDao.user">
        select * from user where user.name like  #{name}
    </select>
<!--    获取用户记录总条数-->
    <select id="countUser" resultType="int">
        select count(id) from user;
    </select>
</mapper>


4.测试类中实现:

package cn.bobo;
import cn.bobo.IUserDao.IUserDao;
import cn.bobo.UserDao.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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class test1 {
    public InputStream in;
    public SqlSession sqlSession;
    public IUserDao userDao;
    public SqlSessionFactory factory;
    @Before
    public void init() throws IOException {
//        1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("mybatis.xml");
//        2. 获取SqlSwssionFactory
        factory = new SqlSessionFactoryBuilder().build(in);
//        3.获取SqlSession对象
        sqlSession = factory.openSession();
//        4. 获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
//        5.查询执行所有方法
    }
    @After
//        6. 释放资源
    public void destroy() throws IOException {
        //    提交事务
        sqlSession.commit();
        sqlSession.close();
        in.close();
    }
    @Test
    public void testfindall() throws IOException {
        List<user> users = userDao.findall();
        for (user user1 : users) {
            System.out.println(user1);
        }
    }
    @Test
    public void testSave() {
        user user1 = new user();
        user1.setId(2);
        user1.setName("luhua");
        user1.setPw("asd");
//    保存方法
        userDao.saveUser(user1);
    }
    @Test
    public void testUpdate() {
        user user1 = new user();
        user1.setId(9);
        user1.setName("wuhu");
        user1.setPw("6513312");
//    执行更新方法
        userDao.updateUser(user1);
    }
    @Test
    public void testdelete() {
        userDao.deleteUser(1);
    }
    @Test
    public void testfindid(){
        user user = userDao.findidUser(2);
        System.out.println(user);
    }
    @Test
    public void testfindname(){
        List<user> users = userDao.findbyName("%小%");
        for (user user : users){
            System.out.println(user);
        }
    }
    @Test
    public void testfindCount(){
        int count = userDao.countUser();
        System.out.println(count);
    }
}


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
|
6月前
|
SQL XML Java
Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢
Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢
54 0
|
5月前
|
SQL 存储 Java
基于MyBatis的增删改查操作
基于MyBatis的增删改查操作
42 1
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
1月前
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
176 1
|
1月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
41 0
Mybatis入门(select标签)
|
5月前
|
SQL 存储 Java
基于MyBatis的增删改查的基础操作
基于MyBatis的增删改查的基础操作
37 0
|
1月前
|
SQL Java 数据库连接
Mybatis的<insert>,<update>,<delete>标签用法
这篇文章详细讲解了Mybatis中<insert>, <update>, <delete>标签的使用方法,并提供了示例代码来展示如何执行数据库的增删改操作。
34 0