mybatis入门

mybatis入门,第1张

mybatis入门 1、配置文件
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/product_systeam?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai

    //useSSL=true开启安全连接
    //useUnicode=true  使用Unicode编码
	//serverTimezone=Asia/Shanghai 设置时区
    



  
    
      
      
        
        
        
        
      
    
  
  
    
  


//如果在xml文件中使用mybatis配置(&  写法为 &)
2、建造mybatis工具类
package com.example.demo.productSysteam.utils;

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 java.io.IOException;
import java.io.InputStream;


//sqlSessionFactory --> sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

3、编写代码

实体类

package com.example.demo.productSysteam.entity;

import java.io.Serializable;

import lombok.Data;
import lombok.EqualsAndHashCode;


@Data
@EqualsAndHashCode(callSuper = false)
public class Customer implements Serializable {

    private static final long serialVersionUID = 1L;

    
    private String customerNumber;

    
    private String name;

    
    private String password;

    
    private String phoneNumber;

    
    private String customerType;

    
    private String sex;


}

Dao接口

@Repository
public interface CustomerMapper extends baseMapper {
    public List findAll();
}

接口实现




    
        select * from customer
    

测试

package com.example.demo.productSysteam.mapper;

import com.example.demo.productSysteam.entity.Customer;
import com.example.demo.productSysteam.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;

import java.util.List;


public class CustomerTest {
    @Test
    public void test(){
        
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        
        try {
            CustomerMapper customerMapper = sqlSession.getMapper(CustomerMapper.class);
            List customerList = customerMapper.findAll();

            
            List Customer = sqlSession.selectList("com.example.demo.productSysteam.mapper.CustomerMapper.findALL");
            for (Customer customer : customerList) {
                System.out.println(customer);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }


    }
}

遇到的问题

  1. 绑定接口出错
  2. 方法名不对
  3. 配置文件不全
  4. 返回类型不对
  5. mavan问题
CRUD
  1. namespace 包名要与Mapper/下的接口包名保持一致

select
id 方法名名称
resultType   Sql语句结果返回值
parameterType  传入参数类型

1、编写接口

public Customer getCustomerByNumber(String customer_number);

2、编写对饮的mapper中的sql语句


        select * from customer where customer_number= #{customerNumber};
    

resultMap元素是MyBatis中最重要最强大的元素
ResultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。
ResultMap最优秀的地方在于,虽然你已经对他相当了解了,但是根本就不需要显式地用到他们

日志
  • 日志工厂
    如果一个数据库 *** 作,出现异常,我们需要排错,那么日志就是最好的助手
    曾今:sout、debug
    现在:日志工厂
  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING
  • NO_LOGGING

在Mybatis中具体使用那个一日志实现,在设置中实现

STDOUT_LOGGING标准日志输出
 
        
    

LOG4J

什么是Log4J?

  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别我们能够更加细致地控制日志的生成过程。
  • 通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

1、先导入LOG4J包



    log4j
    log4j
    1.2.17

2、log4j.properties

### 配置根 设置日志级别###
log4j.rootLogger = DEBUG,console,file

### 设置输出sql的级别,其中logger后面的内容全部为jar包中所包含的包名 ###
log4j.logger.org.apache=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
Log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =  [%p][%d{yy-MM-dd}][%c]%m%n

### 配置输出到文件 ###
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.file.Append = true
log4j.appender.file.Threshold = DEBUG
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n



3.配置log4j为日志的实现


        
    

4、Log4j的使用,直接测试运行刚才查询

简单使用

在要使用Log4j的类中,导入包 import org.apache.log4j.Logger
日志对象,参数为当前类的class

    static Logger logger = Logger.getLogger(CustomerTest.class);

日志级别

    logger.info("info:进入了testLog4j");
        logger.debug("info:进入了testLog4j");
        logger.error("info:进入了testLog4j");
分页 为什么要分页?
  • 减少数据处理量
使用Limit分页
select *
from customer
limit 开始的位置,页的大小;

select *
from customer
limit 2; #[0,n]

接口

List getCustomerByLimit(Map map);

实现mapper

    
        select * from customer limit #{startIndex},#{pageSize}
    

测试

    @Test
    public void getCustomerByLimit(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);
        Map map = new HashMap();
        map.put("startIndex",0);
        map.put("pageSize",2);


        List customerByLimit = mapper.getCustomerByLimit(map);
        for (Customer customer : customerByLimit) {
            System.out.println(customer);
        }
        sqlSession.close();
    }
RowBounds分页

分页插件PageHelper

PageHelper

使用注解开发 面向接口编程


使用注解开发

1、注解在接口上实现

@Select("select * from return_factory")
    public List findAll();

需要在核心配置文件中绑定接口



        

    

测试

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5562883.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存