MyBatis相关
MyBatis核心组件:
- SqlSessionFactoryBuilder(构造器): 它可以从XML、注解或者手动配置Java代码来创建SqlSessionFactory。
- SqlSessionFactory: 用于创建SqlSession (会话) 的工厂
- SqlSession: SqlSession是Mybatis最核心的类,可以用于执行语句、提交或回滚事务以及获取映射器Mapper的接口
- SQL Mapper: 它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果
通过配置文件创建sqlSessionFactory工厂:
sqlSessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsStream("mybatis-config.xml"));
我们使用sqlSession.getMapper()方法获取UserMapper对象,实际上这里我们是获取了UserMapper接口的代理类,然后再由代理类执行方法。
try (SqlSession sqlSession = sqlSessionFactory.openSession()) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//在这里才创建数据库连接对象Connection User user = userMapper.selectById(1); System.out.println("User : " + user); }
在myBatis中如何使用连接池:
在mybatis中,定义了一个数据库连接池状态的类PoolState,在这个类里,除维护了数据源实例,还维护着数据库连接。数据库连接被分成了两种状态类型并存放在两个列表中:idleConnections和activeConnections。
idleConnections:
空闲(idle)状态PooledConnection对象被放置到此集合中,表示当前闲置的没有被使用的PooledConnection集合,调用PooledDataSource的getConnection()方法时,会优先从此集合中取PooledConnection对象。当用完一个java.sql.Connection对象时,MyBatis会将其包裹成PooledConnection对象放到此集合中。
activeConnections:
活动(active)状态的PooledConnection对象被放置到名为activeConnections的ArrayList中,表示当前正在被使用的PooledConnection集合,调用PooledDataSource的getConnection()方法时,会优先从idleConnections集合中取PooledConnection对象,如果没有,则看此集合是否已满,如果未满,PooledDataSource会创建出一个PooledConnection,添加到此集合中,并返回。
https://www.cnblogs.com/yougewe/articles/10061276.html
获取连接池中的connection
@Override public Connection getConnection() throws SQLException { // 调用 popConnection() return popConnection(dataSource.getUsername(), dataSource.getPassword()).getProxyConnection(); }
参考:Mybatis源码解读
https://juejin.im/post/5cd4355be51d453a5143306c
关于#{}和${}
#{}可以防止sql注入(比如where ‘1’=‘1’这种情况)
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
$方式一般用于传入数据库对象,例如传入表名.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
参考:
https://www.cnblogs.com/baizhanshi/p/5778692.html
https://www.cnblogs.com/200911/p/5869097.html
Mybatis所用到的设计模式
http://www.crazyant.net/2022.html
Mybatis命名空间namespace作用:
1.定义mapper接口,面向接口编程。
2.在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件中的每个SQL语句就成了定义在这个命名空间中的一个ID。只要我们能够保证每个命名空间中这个ID是唯一的,即使在不同映射文件中的语句ID相同,也不会再产生冲突了。
Mybatis中一级二级缓存:
<!--开启二级缓存--> <setting name="cacheEnabled" value="true"/>
对于两个不同的SqlSession查同一个mapper文件里面的内容,是会把sqlsession里面的一级缓存存到二级缓存里面的。
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/10654936.html
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号