mybatis(一)连接数据库操作

目录

前言

一、回顾JDBC操作数据库的过程

二、Mybatis操作数据库的过程

三、上代码

1.引入库

2.创建User.java

3.创建UserMapper.java

4.创建UserMapper.xml

5.创建Mybatis核心配置文件mybatis-config.xml

6.创建测试类UserServiceTest.java

7.运行测试

四、mybatisX插件的安装​​​​​​​


前言

springboot项目结构:

mybatis(一)连接数据库操作_第1张图片


一、回顾JDBC操作数据库的过程

使用JDBC链接,操作数据库的过程:
 1. 加载JDBC驱动
 2. 建立并获取数据库链接
 3. 创建JDBC Statements 对象
 4. 设置SQL 语句的传入参数
 5. 执行SQL 语句并获取查询结果
 6. 对查询结果进行转换处理并将处理结果返回
 7. 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)
JDBC的问题:
1. 频繁的链接、关闭数据库,浪费数据库资源、影响性能(可以用连接池优化)
2. SQL语句散落在代码中,不断地拼入参,重复代码较多。(Mybatis中有变量名参数、动态SQL及SQL语句统一存放)
3. 得到结果后大量需要结果属性映射及封装。(Mybatis中SQL处理器直接返回需要的类型对象,完成数据结构及结果的映射)

二、Mybatis操作数据库的过程

使用Mybatis直接链接数据库操作数据
1. 建立对应表的用户实体类(普通的java bean)User.java
2. 定义DAO接口(也就是Mapper映射接口),与数据库交互作用:UserMapper.java
3. 创建统一写sql语句的XML文件与DAO接口(也就是Mapper映射接口)对应,路径报名要一致,XML文件与数据层接口类的名称一致,UserMapper.xml
4. 建立Mybatis核心配置文件mybatis-config.xml,在resources文件包下。配置文件中定义了数据源、数据层映射接口与SQL语句的XML文件的映射关系等

三、上代码

1.引入库

maven的pom.xml引入库



    4.0.0
    com
    mybatis_demo2
    0.0.1-SNAPSHOT
    mybatis_demo2
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.4
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
            junit
            junit
            test
        
        
        
            com.github.pagehelper
            pagehelper
            5.2.0
        
        
        
            log4j
            log4j
            1.2.17
        

    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.mybatis_demo2.MybatisDemo2Application
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    

2.创建User.java

package com.mybatis_demo2.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author lv
 * @date 2022年11月12日22点00分
 * 封装数据的实体bean,(lombok简化代码)
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String nickname;
    private Date addtime;
}

3.创建UserMapper.java

package com.mybatis_demo2.mapper;

import com.github.pagehelper.Page;
import com.mybatis_demo2.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author lv
 * @date 2022年11月12日17点24分
 * dao层,主要负责和数据库交互
 */
public interface UserMapper {

    /**
     * 查询所有用户信息
     * @return
     */
    public List selectUserAll();

    /**
     * 查询单个用户
     * @param id
     * @return
     */
    public User selectOneUser(int id);

    /**
     * 添加数据
     * @param user
     * @return
     */
    public int adduser(User user);

    /**
     * 更新数据
     * @param user
     * @return
     */
    public int update(User user);

    /**
     * 删除数据
     * @param id
     * @return
     */
    public int del(Integer id);

    /**
     * 查询分页总条数(普通分页方式)
     * @return
     */
    Long countAllUser();

    /**
     * 查询每页的显示数据(普通分页方式)
     * @param index LIMIT函数的起始索引值
     * @param size LIMIT函数的每页大小
     * @return
     */
    List selectPageUser(@Param("index") int index, @Param("size") int size);

    /**
     * 使用分页插件实现分页查询
     * @return
     */
    Page pagePluginselectUser();

    /**
     * 查询单个用户(根据用户名查询,演示SQL注入)
     * @param username
     * @return
     */
    User findUsernameUser(String username);

    /**
     * 据id查询用户(使用标签,在UserMapper.xml中使用where和if标签)
     * @param id
     * @return
     */
    List findUserList(int id);

    /**
     * 根据username查询用户(使用标签,在UserMapper.xml中使用where,if和 foreach 标签)
     * @Param("unamelist") 定义参数名,方便UserMapper.xml找到参数
     * @param unamelist
     * @return
     */
    List findUserListByUsername(@Param("unamelist") List unamelist);
}

4.创建UserMapper.xml

注意在resources资源文件夹下创建com\mybatis_demo2\mapper目录





    
    
    
    
    
    
        insert into users(username,password,nickname,addtime) values(#{username},#{password},#{nickname},NOW())
    
    
    
        update users set username=#{username} where id=#{id}
    
    
    
        delete from users where id=#{id}
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        
        
        
        
        
    

5.创建Mybatis核心配置文件mybatis-config.xml




    
        
    
    
        
        
    
    
    
        
            
            
            
                
                
                
                
            
        
    
    
        
        

        
        
    

6.创建测试类UserServiceTest.java

package com.mybatis_demo2;

import com.mybatis_demo2.pojo.User;
import com.mybatis_demo2.service.impl.UserService;
import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author lv
 * @date 2022年11月12日23点41分
 * 测试用例类
 */
public class UserServiceTest {

    private Logger logger = Logger.getLogger(this.getClass());

    /**
     * 使用JDBC链接,操作数据库的过程
     * 1. 加载JDBC驱动
     * 2. 建立并获取数据库链接
     * 3. 创建JDBC Statements 对象
     * 4. 设置SQL 语句的传入参数
     * 5. 执行SQL 语句并获取查询结果
     * 6. 对查询结果进行转换处理并将处理结果返回
     * 7. 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)
     */

    /**
     * 使用Mybatis直接链接数据库操作数据
     * 1. 建立对应表的用户实体类(普通的java bean)User.java
     * 2. 定义DAO接口(也就是Mapper映射接口),与数据库交互作用:UserMapper.java
     * 3. 创建统一写sql语句的XML文件与DAO接口(也就是Mapper映射接口)对应,路径报名要一致,XML文件与数据层接口类的名称一致,UserMapper.xml
     * 4. 建立Mybatis核心配置文件mybatis-config.xml,在resources文件包下。配置文件中定义了数据源、数据层映射接口与SQL语句的XML文件的映射关系等
     * 5. 测试
     */
    @Test
    public void testSelectAlluser(){
        UserService userService=new UserService();
        /**
         * 查询所有字段时如果User用户封装实体中有字段与表中字段不一致,得到的字段显示结果为null
         * 解决方法为:使用as关键字取别名进行关联映射,select id_card as idCard from users
         */
        List list= userService.selectAlluser();
        if(list.size()>0){
//            //for迭代循环
//            for(User user:list){
//                System.out.println(user.getUsername()+"||"+user.getPassword()+"||"+user.getNickname());
//            }
//            //for循环,语法格式:for (①初始化部分; ②循环条件部分; ④迭代部分){ ③循环体部分; }
//            for(int i=0;i list= userService.selectPageUser(3,4);
    }

    /**
     * 分页插件简化分页
     * 1. 向pom.xml中添加依赖包
     *         
     *         
     *             com.github.pagehelper
     *             pagehelper
     *             5.2.0
     *         
     * 2. 向 mybatis-config.xml 核心配置文件中加入插件拦截器
     * 
     * 
     * 
     * 
     * 3. 使用分页插件传入分页参数,只有紧跟startPage()方法之后的查询语句才会被执行分页
     * PageHelper.startPage(pageNum,size);  --pageNum:第几页,size每页分页大小
     * 4. 调用分页查询的方法,使用Page 或 PageInfo
     *     Page pageUser= mapper.pagePluginselectUser();
     *     或
     *      userlist= mapper.selectUserAll();
     *      PageInfo pinfo=new PageInfo<>(userlist,1);
     */
    @Test
    public void pagePluginSelect(){
        UserService userService=new UserService();
        List list= userService.PagePluginUserSelect(3,3);
    }

    /**
     * 查询单个用户(根据用户名查询,演示SQL注入)
     */
    @Test
    public void findUsernameUser(){
        UserService userService=new UserService();
        /**
         * findUsernameUser(String username)调用此方法时正确的参数是传入一个username,但是实际我传入了一个字符串,模拟进行了SQL注入。
         * 运行后打印的结果为:
         * Preparing: select * from users where username='user001' and username='mm'
         * Parameters:
         * Total: 0
         * UserMapper.xml文件中SQL语句为:select * from users where username=${username}
         *
         * -------改进避免SQL注入
         * 将UserMapper.xml文件中SQL语句改为:select * from users where username=#{username} --Mybatis中使用#{}传参避免了SQL注入。
         * 运行后打印的结果为:
         * Preparing: select * from users where username=?
         * Parameters: 'user001' and username='mm'(String)
         * Total: 0
         */
        userService.findUsernameUser("'user001' and username='mm'");
    }

    /**
     * 根据id查询用户(使用标签,在UserMapper.xml中使用where和if标签)
     */
    @Test
    public void testGetListUser(){
        UserService userService=new UserService();
        userService.findListUser(3);
    }

    /**
     * 根据username查询用户(使用标签,在UserMapper.xml中使用where,if和 foreach 标签)
     */
    @Test
    public void testfindUserListByUname(){
        UserService userService=new UserService();
        List unamelist=new ArrayList<>();
        unamelist.add("'user02'");
        unamelist.add("'user003'");
        unamelist.add("'user005'");
        userService.findUserListByUname(unamelist);
    }
    

    /**
     * 附加
     * 打印99乘法表
     */
    @Test
    public void multiplyTable(){
//        for(int i=1;i<10;i++){
//            for(int j=1;j<(i+1);j++){
//                System.out.print(j+"*"+i+"="+(j*i)+"    ");
//                if((j*i==6||j*i==8)&&(i==3||i==4)){
//                    System.out.print(" ");
//                }
//            }
//            //println()换行,print()不换行
//            System.out.println();
//        }
        int a= 8%2;
        System.out.println(a>0 ? 8/2+1 : 8/2);
    }

}

7.运行测试

测试运行selectUserOne()测试方法的运行接口如下:

mybatis(一)连接数据库操作_第2张图片

四、mybatisX插件的安装

使用mybatisX插件可以实现在UserMapper.xml和UserMapper.java文件之间的关联切换

mybatis(一)连接数据库操作_第3张图片

你可能感兴趣的:(Mybatis学习,mybatis,数据库,java)