栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis学习笔记

目录

步骤

多对一处理

一对多处理

其他标签的使用 

SqlSessionFactoryBuilder

SqlSessionFactory

SqlSession

缓存

依赖


步骤

1.配置文件 mybatis.xml





    
    
        
        
    

    
        
        
        
    

    
    
        
        
        
    

    
        
            
            
                
                
                
                
            
        
    

    
    
        
    

2.pojo实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Alias("user")
public class User implements Serializable {
    private int id;
    private String name;
}

3. SqlSession工具类,生成SqlSession实例

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

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

4.Mapper接口

public interface UserMapper {

    //@Select("select * from user")
    List getUserList();

    User getUserByID(int id);

    //@Select("select * from user where name like concat('%',#{value},'%')")
    List getUserLike(String value);

    //分页
    List getUserByLimit(Map map);

    int addUser(User user);

    int updateUser(User user);

    int updateUser2(Map map);

    int deleteUserByID(int id);

}

 5.Mapper.xml





    
    

    
        select * from mybatis.user where id=#{id}
    

    
    
        
        
    

    
        select * from mybatis.user limit #{startIndex},#{pageSize}
    

    
    
        insert into mybatis.user (id,name) values (#{id},#{name})
    

    
        update mybatis.user set name=#{name} where id=#{id}
    

    
    
        update mybatis.user set name=#{Name} where id=#{ID}
    

    
        delete from mybatis.user where id=#{id}
    

6.测试

@Test
    public void getUser() {
        //1.获取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2.执行sql 方式一 getMapper
        UserMapper userdao = sqlSession.getMapper(UserMapper.class);
        List userList = userdao.getUserList();
        User user1 = userdao.getUserByID(1);
//        //2.执行sql 方式二
//        List userList = sqlSession.selectList("com.lzq.dao.UserDao.getUserList");
//        User user1 = sqlSession.selectOne("com.lzq.dao.UserDao.getUserByID",1);

        for (User user : userList) {
            System.out.println(user);
        }
        System.out.println(user1);

        //3.关闭SqlSession
        sqlSession.close();
    }

其他:log4j属性文件 

log4j.rootLogger=DEBUG,console,file

#??????????
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=[%c]-%m%n

#?????????
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/lzq.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss}][%c]%m%n

#??????
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

多对一处理

多个学生对应一个老师

    
        select * from teacher where id=#{tid}
    

一对多处理

一个老师对应多个学生


        select t.id tid,t.name tname,s.id sid,s.name sname
        from teacher t,student s
        where t.id=s.tid and t.id=#{tid}
    
    
        
        
        
        
            
            
            
        
    

    
    
        select * from teacher where id=#{tid}
    
    
        
        
        
        
    
    
        select * from blog
        
            
        
    

    

    
        update blog
        
            title=#{title},
            author=#{author},
            views=#{views},
        
        where id=#{id}
    

SqlSessionFactoryBuilder

最佳作用域是方法作用域(也就是局部方法变量)。

SqlSessionFactory

最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中。

缓存

一级缓存:默认开启,只在一次sqlSession会话中有效,sqlSession.close就关闭了

一级缓存失效的情况:

  1. 查询不同的东西
  2. 增删改操作,可能会改变数据,所以必定刷新缓存
  3. 查询不同的Mapper.xml(二级缓存也失效)
  4. 手动清理缓存(sqlSession.clearCache)

二级缓存:namespace级别(Mapper级别),多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

1.映射语句文件中的所有 select 语句的结果将会被缓存。

2.映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。

(均可通过标签属性useCache flushCache等设置)

Ps:所有数据先放到一级缓存,只有会话(sqlSession)提交或关闭时才会提交到二级缓存!

依赖
        
            mysql
            mysql-connector-java
            5.1.44
        
        
        
            org.mybatis
            mybatis
            3.5.7
        

        
        
        
            org.projectlombok
            lombok
            1.18.22
            
        

        
        
            log4j
            log4j
            1.2.17
        
            
                src/main/resources
                
                    ***.xml
                
            
            
            
                src/main/java
                
                    ***.xml
                
                true
            

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号