Mybatis学习第二天:Mybatis 增删改查

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

文章目录

使用代理dao的方式实现增删改查(基本都采用此方式)

为dao接口创建增删改查函数

package com.gegege.dao;
import com.gegege.domain.User;
import java.util.List;
public interface IUserDao {
    /**
     * 查询所有用户
     */
    List<User> findAll();
    /**
     * 插入一个用户
     */
    void installUser(User user);
    /**
     * 更新数据
     */
    void upDateUser(User user);
    /**
     * 删除数据
     */
    void deleteUser(int userid);
    /**
     *根据id查找一个人
     */
    User findById(Integer userid);
    /**
     * 根据姓名模糊查询用户信息
     */
    List<User> findByName(String name);
}

创建sqlmapconfig.xml

<?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>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="adminadmin"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/gegege/dao/IUserDao.xml"/>
    </mappers>
</configuration>

创建IUserDao.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">
<mapper namespace="com.gegege.dao.IUserDao">
    <select id="findAll" resultType="com.gegege.domain.User">
        select
               * from user ;
    </select>
    <insert id="installUser" parameterType="com.gegege.domain.User">
         insert into user (username,address,sex,birthday) values ( #{username},#{address},#{sex},#{birthday} );
    </insert>
    <update id="upDateUser" parameterType="com.gegege.domain.User">
        update user set username=#{username} , address = #{address} , sex=#{sex} ,birthday=#{birthday}
        where id = #{id};
    </update>
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{uid};
    </delete>
    <select id="findById" resultType="com.gegege.domain.User" parameterType="java.lang.Integer">
        select * from user
        where id = #{uid};
    </select>
    <select id="findByName" resultType="com.gegege.domain.User"  parameterType="java.lang.String" >
        select * from user
        where username like #{name};
    </select>
</mapper>

使用test调用

package com.gegege;
import com.gegege.dao.IUserDao;
import com.gegege.domain.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.Date;
import java.util.List;
import java.util.Random;
public class mybatis_test {
    private InputStream in;
    private SqlSessionFactoryBuilder sessionFactoryBuilder;
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession session;
    private IUserDao dao;
    @Before
    public void before() throws IOException {
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建工具
        sessionFactoryBuilder=new SqlSessionFactoryBuilder();
        //创建工厂
        sqlSessionFactory=sessionFactoryBuilder.build(in);
        //生产session
        session=sqlSessionFactory.openSession();
        //使用sqlsession 创建代理对象
        dao=session.getMapper(IUserDao.class);
    }
    @After
    public void after() throws IOException {
        //提交操作
        session.commit();
        //释放资源
        session.close();
        in.close();
    }
    /**
     * 测试查找
     * @throws IOException
     */
    @Test
    public void testFindAll() {
        //调用findall
        List<User> users=dao.findAll();
        for (User user:users
        ) {
            System.out.println(user);
        }
    }
    /**
     * 测试插入
     */
    @Test
    public void testInstall(){
        User user=new User();
        user.setUsername("ddd");
        user.setAddress("aaa");
        user.setBirthday(new Date());
        user.setSex("狗");
        dao.installUser(user);
    }
    /**
     * 测试修改
     */
    @Test
    public void testUpDate() {
        User user=new User();
        int num=new Random().nextInt();
        user.setId(41);
        user.setUsername("ddd"+ num);
        user.setAddress("aaa" + num);
        user.setBirthday(new Date());
        user.setSex("狗");
        dao.upDateUser(user);
    }
    /**
     * 测试删除
     */
    @Test
    public void testdelete() {
        dao.deleteUser(52);
    }
    /**
     * 测试查询一用户
     */
    @Test
    public void testoneuserA() {
        User user = dao.findById(48);
        System.out.println(user);
    }
    /**
     * 测试模糊查询
     */
    @Test
    public void name() {
        List<User> users = dao.findByName("%王%");
        users.forEach(System.out :: println);
    }
}

使用实现类的方式进行增删改查

在原通过代理对象实现的方式修改:

1.创建新的类继承dao接口

这里注意,添加一个session工厂对象,并重写构造方法,传入session工厂,方便下面进行调用

package com.gegege.dao.impl;
import com.gegege.dao.IUserDao;
import com.gegege.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class UserDao implements IUserDao {
    private SqlSessionFactory factory;
    public UserDao() {
    }
    public UserDao(SqlSessionFactory factory){
        this.factory=factory;
    }
    @Override
    public List<User> findAll() {
        //根据factory获取session
        SqlSession session = factory.openSession();
        //调用方法
        List<User> users = session.selectList("com.gegege.dao.IUserDao.findAll");
        //释放资源
        session.close();
        return users;
    }
    @Override
    public void installUser(User user) {
        //根据factory获取session
        SqlSession session = factory.openSession();
        //调用方法实现保存
        session.insert("com.gegege.dao.IUserDao.installUser",user);
        //提交事务
        session.commit();
        //释放资源
        session.close();
    }
    @Override
    public void upDateUser(User user) {
    }
    @Override
    public void deleteUser(int userid) {
    }
    @Override
    public User findById(Integer userid) {
        return null;
    }
    @Override
    public List<User> findByName(String name) {
        return null;
    }
}

2.对测试类进行更改

2.1 先删除session,因为在实现类里传入了session工厂,则session没有作用了

2.2 将dao 改为实例化的方式创建 即new UserDao(sqlSessionFactory);

package com.gegege;
import com.gegege.dao.IUserDao;
import com.gegege.dao.impl.UserDao;
import com.gegege.domain.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.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
public class mybatis_test {
    private InputStream in;
    private SqlSessionFactoryBuilder sessionFactoryBuilder;
    private SqlSessionFactory sqlSessionFactory;
    private IUserDao dao;
    @Before
    public void before() throws IOException {
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建工具
        sessionFactoryBuilder=new SqlSessionFactoryBuilder();
        //创建工
        sqlSessionFactory=sessionFactoryBuilder.build(in);
        //生产session
        //使用sqlsession 创建代理对象
        dao=new UserDao(sqlSessionFactory);
    }
    @After
    public void after() throws IOException {
        //提交操作
        in.close();
    }
    /**
     * 测试查找
     * @throws IOException
     */
    @Test
    public void testFindAll() {
        //调用findall
        List<User> users=dao.findAll();
        for (User user:users
        ) {
            System.out.println(user);
        }
//        int[] num;
//        num.length
    }
    /**
     * 测试插入
     */
    @Test
    public void testInstall(){
        User user=new User();
        user.setUsername("ddd");
        user.setAddress("aaa");
        user.setBirthday(new Date());
        user.setSex("狗");
        dao.installUser(user);
    }
    /**
     * 测试修改
     */
    @Test
    public void testUpDate() {
        User user=new User();
        int num=new Random().nextInt();
        user.setId(41);
        user.setUsername("ddd"+ num);
        user.setAddress("aaa" + num);
        user.setBirthday(new Date());
        user.setSex("狗");
        dao.upDateUser(user);
    }
    /**
     * 测试删除
     */
    @Test
    public void testdelete() {
        dao.deleteUser(52);
    }
    /**
     * 测试查询一用户
     */
    @Test
    public void testoneuser() {
        User user = dao.findById(48);
        System.out.println(user);
    }
    /**
     * 测试模糊查询
     */
    @Test
    public void name() {
        List<User> users = dao.findByName("%王%");
        users.forEach(System.out :: println);
    }
    @Test
    public void tttt() {
    }
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> hash=new HashMap<>();
        for (int i=0;i<nums.length;i++){
            hash.put(nums[i],i);
        }
        for (int i=0;i<nums.length;i++){
            int num = target-nums[i];
            if (hash.containsKey(num)){
                int[] o = {i,hash.get(num)};
                return  o;
            }
        }
        return null;
    }
}

properties标签

在SqlMapConfig.xml的使用 <properties resource="jdbcConfig.properties"/>语句来指定配置文件,jdbcConfig.properties文件内容为:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=admin

SqlMapConfig.xml更改为:

<?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">
        <!--mybatis主配置文件-->
<configuration>
    <properties resource="jdbcConfig.properties"/>
<!-- 配置环境 -->
<environments default="mysql">
    <!--配置mysql环境-->
    <environment id="mysql">
        <!--配置事务-->
        <transactionManager type="JDBC"></transactionManager>
        <!--配置数据源(连接池)-->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>
<!--指定映射配置文件,即每个dao独立的配置文件-->
<mappers>
    <mapper resource="com/xiongshou/dao/IUserDao.xml"/>
</mappers>
</configuration>

此时代码仍可正常执行

声明别名

有两种方式配置别名

    <typeAliases>
        <!--声明单个别名-->
<!--        <typeAlias type="com.gegege.domain.User" alias="user" />-->
        <!--声明包,则包下所有类都自动生成别名-->
        <package name="com.gegege.domain"/>
    </typeAliases>


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
203 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
51 5
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
67 1
|
4月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
4月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
4月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
5月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
251 3
|
4月前
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
392 0
下一篇
DataWorks