Mybatis入门

Mybatis


1.MyBatis简介

  • Java的持久层框架
  • ORM(对象关系映射)框架

2.MyBatis简单使用

2.1 导包

Mybatis入门_第1张图片

2.2 配值MyBatis-Config.xml





    
    
    
   
    
        
       
  
        
    

    
        
        
            
            
            
            
                
                
                
                
                
            
        
    
    
    
        
    


2.3 配值UserMapper.xm






    
    
        
            and  id = #{id}
        
        
            and name like '%${name}%'
        
    
    
    
    
    
    
    
        insert  into  user(name) values (#{name});
    
    
    
        delete from  user where  id=#{id}
    
    
    
        update  user  set name = #{name} where  id= #{id}
    
    
    
        delete  from  user where  id in
        
            #{id}
        
    
       
    
        insert  into  user (name) values
        
            (#{user.name})
        
    
       
    
        update user set  name = #{name} WHERE  id in
        
            #{id}
        
    
        
    



2.4 抽取SqlSession用枚举

package cn.itsource.util;

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.Reader;

public enum SessionUtil {
    INSTANCE;
    private  static SqlSessionFactory sqlSessionFactory;

    static {
        Reader reader = null;
        try {
        //注意导包的类型
          reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory= new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {

            //打印堆栈信息
            e.printStackTrace();
            throw new RuntimeException("解析配置文件出问题"+e.getMessage());
        }

    }

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

2.5 具体实现类

package cn.itsource.dao.impl;

import cn.itsource.dao.IUserDao;
import cn.itsource.domain.User;
import cn.itsource.query.UserQuery;
import cn.itsource.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.Map;

public class IUserDaoImpl implements IUserDao {
    @Override
    public List findAll() {

        List users = SessionUtil.INSTANCE.getSqlSession().selectList("cn.itsource.dao.IUserDao.findAll");
        return users;
    }

    @Override
    public User findOne(Long id) {
        User user = SessionUtil.INSTANCE.getSqlSession().selectOne("cn.itsource.dao.IUserDao.findOne",id);
        return user;
    }

    @Override
    public void add(User user) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.insert("cn.itsource.dao.IUserDao.add", user);
         sqlSession.commit();
    }

    @Override
    public void update(User user) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.update("cn.itsource.dao.IUserDao.update",user);
        sqlSession.commit();
    }

    @Override
    public void delete(Long id) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.delete("cn.itsource.dao.IUserDao.delete",id);
        sqlSession.commit();
    }

    @Override
    public void deleteBatch(List ids) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.delete("cn.itsource.dao.IUserDao.deleteBatch",ids);
        sqlSession.commit();
    }

    @Override
    public void addBatch(List users) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.insert("cn.itsource.dao.IUserDao.addBatch",users);
        sqlSession.commit();
    }

    @Override
    public void updateBatch(Map map) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
        sqlSession.update("cn.itsource.dao.IUserDao.updateBatch",map);
        sqlSession.commit();
    }

    @Override
    public List findByConditions(UserQuery uq) {
        SqlSession sqlSession = SessionUtil.INSTANCE.getSqlSession();
       List  o = sqlSession.selectList("cn.itsource.dao.IUserDao.findByConditions", uq);
        sqlSession.commit();
         return  o;
    }


}

3 使用日志包


3.1 导包

Mybatis入门_第2张图片

3.2 log4j.properties 日志文件配置

# 日志输出级别 输出到控制
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.itsource=TRACE
# 输出到控制台的配置信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 输出到控制台的 格式类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

4 使用${id} 与 #{id}的区别

(1)  $ {id} 找的类参数类的里面 getId这个方法,如果有 就不会报错,没有就会报错

(2)  '# 占位符,$ 拼接字符串形式 -- 比较重要点

userMapper.xml
update t_user set name=${name} where id=#{id}
生成语句
update t_user set name=小秋秋 where id=?

$ 拼接字符串方式  --Statement --存在sql注入问题

'# 占位符 -- PreparedStatement

(3) 平时使用比较多还是 #{id}   

(4)  $一般使用在limit+orderby上面 其他情况下 就是使用#


Mybatis入门_第3张图片


5 细节

5.1 主键

有时候,我们保存一个数据,需要拿到主键的,做一些后续的操作


        insert into t_user(name) values(#{name})
    

你可能感兴趣的:(Mybatis入门)